主题
Skip to content
说明
登录模块提供了适配市场的登录方式
可以参考示例中的内容,来集成登录模块
登录时需要注意的存档操作流程
为了方便快速集成,我们的存档系统分成了两套,一套是无需接入登录依赖于用户设备id(DeviceID)的无登录存档流程,另一套是基于登录后获取到渠道的openId的`有登录存档流程。
使用登录模块后,请使用有登录存档流程进行存档。
游客登录
游客登录时,sdk会根据用户的DeviceID来生成一个openId,,在用户没有调用注销接口时,始终会使用最新游客账号对应的存档。当调用注销接口后,该存档被清理。
游客登录+渠道登录
游客登录后,如果游戏研发切渠道登录,进行了渠道登录操作。此时会有两种情况
1、渠道账号下已有存档
此时游客账号存档不会丢失,会切换至渠道账号下的存档,下次用户进行游客登录,会继续回到游客存档。
2、渠道账号下无存档
此时SDK会自动将游客账号下的存档转移到渠道账号下,并清除游客账号下的存档数据。下次用户进行游客登录会新开存档。
渠道登录
渠道登录直接按照有登录存档流程进行存档来进行存档即可。
Unity常用接口
查询当前登录状态
c#
//获取登录状态0-未登录 1-成功登录
ZMYSDKManager.I.Sdk.ServerLoginStateStatic();
查询支持的登录方式
c#
// type: 2-第三方 3-邮箱 4-手机 5-游客
// subType: 0-type为4和5时 1-Weixin 2-qq 3-Facebook 4-Twitter 5-WhatsApp 6-Apple 7-google
/*[
{
"type": 5,
"subType": 0
},
{
"type": 4,
"subType": 0
}
]
*/
ZMYSDKManager.I.LoginSupportItemInfo();
登录
c#
ZMYSDKManager.I.Sdk.ServerLoginAppStatic();
无UI登录
c#
//无UI登录:type -1自动登录 0游客 1手机 2邮箱 3QQ 4微信 5facebook 6谷歌 7line 8Apple
//openId 选择1和2时为用户填写的手机号或者邮箱地址
//unionPassword 选择1和2时此方法需要传值,验证码
ZMYSDKManager.I.Sdk.ServerNoUiLoginAppStatic(string atype,string openId,string unionPassword);
获取验证码
c#
ZMYSDKManager.I.Sdk.ServerLoginGetUnionCodeStatic(string atype,string enumber);
退出登录
c#
ZMYSDKManager.I.Sdk.ServerLoginExitStatic();
注销
c#
ZMYSDKManager.I.Sdk.DoAccountLoginOffStatic();
获取用户信息
json
/*
{
accountInfo = (
{
name = " 86_2222";
openId = " 86_2222";
subType = 0;
type = 4;
}
);
gameDataDate = 0;
leaveDay = 0;
status = 0;
token = 244fbd2e2b9242ffb53cbefe11bbd085;
userId = "eed52123-e296-4875-9643-a30d6af3eb7a";
userInfo = {
fsLogin = 1;
icon = "";
loginDays = 1;
userName = "";
};
}
*/
ZMYSDKManager.I.LoginGetUserInfo();
上传存档
c#
ZMYSDKManager.I.Sdk.ServerLoginUploadDataStatic(string keyInfo,string valueInfo);
下载存档
c#
ZMYSDKManager.I.Sdk.ServerLoginGetDataStatic(string keyInfo);
上传存档回调
c#
ZMYSDKManager.I.Login_UpLoadData += upLoadDataCallBack;
void upLoadDataCallBack(UploadDataResult dataResult)
{
if (dataResult.code==1)
{
Debug.Log($"上报Key[{dataResult.key}] 成功");
}
else
{
Debug.Log($"上报Key[{dataResult.key}] 失败");
}
}
下载存档回调
c#
ZMYSDKManager.I.Login_DownData += downDataCallBack;
void downDataCallBack(DownDataResult dataResult)
{
if (dataResult.code == 1)
{
Debug.Log($"下拉Key[{dataResult.key}] 成功 Value=[{dataResult.value}]");
}
else
{
Debug.Log($"下拉Key[{dataResult.key}] 失败");
}
}
主动消失登录相关的弹窗
c#
ZMYSDKManager.I.Sdk.LoginDismissDialog();
示例
C#
using System.Collections;
using System.Collections.Generic;
using System.Text;
using ZMYSDK;
using UnityEngine;
using UnityEngine.UI;
public class loginTest : MonoBehaviour
{
public Text m_resultTxt;
// Start is called before the first frame update
void Start()
{
ZMYSDKManager.I.Login_CallBack += LoginCallBack;
ZMYSDKManager.I.Login_Out += Login_Out;
ZMYSDKManager.I.Login_Off += Login_Off;
ZMYSDKManager.I.Login_UpLoadData += upLoadDataCallBack;
ZMYSDKManager.I.Login_DownData += downDataCallBack;
}
public void Click_LoginState()
{
int code = ZMYSDKManager.I.Sdk.ServerLoginStateStatic();
if (code==1)
{
m_resultTxt.text = "已登录";
}
else
{
m_resultTxt.text = "未登录";
}
}
public void Click_LoginSupportItemInfo()
{
List<LoginChannelInfo> info = ZMYSDKManager.I.LoginSupportItemInfo();
StringBuilder sb = new StringBuilder();
if (null== info || info.Count<=0)
{
m_resultTxt.text = "获取支持的登录方式失败";
return;
}
foreach (var item in info)
{
sb.Append(item.type + "-" + item.subType);
sb.Append("||");
}
m_resultTxt.text = "支持的登录方式有:" + sb.ToString();
}
public void Click_Login()
{
ZMYSDKManager.I.Sdk.ServerLoginAppStatic();
}
void LoginCallBack(LoginResult loginResult)
{
if (loginResult.code==1)
{
Debug.Log("登录成功");
m_resultTxt.text = "登录成功" + loginResult.loginInfo.userId;
}
else
{
Debug.Log("登录失败");
m_resultTxt.text = "登录失败";
}
}
public void Click_LoginExit()
{
ZMYSDKManager.I.Sdk.ServerLoginExitStatic();
}
void Login_Out(SdkResult result)
{
if (result.code == 1)
{
Debug.Log("退出成功");
m_resultTxt.text = "退出成功";
}
else
{
Debug.Log("退出失败");
m_resultTxt.text = "退出失败";
}
}
public void Click_LoginOff()
{
ZMYSDKManager.I.Sdk.DoAccountLoginOffStatic();
}
void Login_Off(SdkResult result)
{
if (result.code == 1)
{
Debug.Log("注销成功");
m_resultTxt.text = "注销成功";
}
else
{
Debug.Log("注销失败");
m_resultTxt.text = "注销失败";
}
}
public void Click_ClickBindAccount()
{
Debug.Log("Click_ClickBindAccount");
ZMYSDKManager.I.Sdk.VisitorBindAccount();
}
public void Click_GetUserInfo()
{
LoginInfo loginInfo = ZMYSDKManager.I.LoginGetUserInfo();
if (null==loginInfo)
{
m_resultTxt.text = "用户信息获取失败";
}
else
{
m_resultTxt.text = "用户信息获取成功+" + loginInfo.userId;
}
}
public InputField m_key;
public InputField m_Value;
public void Click_UpLoadData()
{
ZMYSDKManager.I.Sdk.ServerLoginUploadDataStatic(m_key.text, m_Value.text);
}
void upLoadDataCallBack(UploadDataResult dataResult)
{
if (dataResult.code==1)
{
Debug.Log($"数据Key[{dataResult.key}] 上传成功");
m_resultTxt.text = $"数据Key[{dataResult.key}] 上传成功";
}
else
{
Debug.Log($"数据Key[{dataResult.key}] 上传失败");
m_resultTxt.text = $"数据Key[{dataResult.key}] 上传失败";
}
}
public void Click_GetData()
{
ZMYSDKManager.I.Sdk.ServerLoginGetDataStatic(m_key.text);
}
void downDataCallBack(DownDataResult dataResult)
{
if (dataResult.code == 1)
{
Debug.Log($"数据Key[{dataResult.key}] 下载成功 Value=[{dataResult.value}]");
m_resultTxt.text = $"数据Key[{dataResult.key}] 下载成功 Value=[{dataResult.value}]";
}
else
{
Debug.Log($"数据Key[{dataResult.key}] 下载失败");
m_resultTxt.text = $"数据Key[{dataResult.key}] 下载失败";
}
}
void OnDestroy()
{
ZMYSDKManager.I.Login_CallBack -= LoginCallBack;
ZMYSDKManager.I.Login_Out -= Login_Out;
ZMYSDKManager.I.Login_Off -= Login_Off;
ZMYSDKManager.I.Login_UpLoadData -= upLoadDataCallBack;
ZMYSDKManager.I.Login_DownData -= downDataCallBack;
}
}
Cocos Creator&Laya登陆模块
GameHelper.Login
注意登录相关都有一个 invalidCallback
回调,当账号掉线时会回调,此时可提示引导重新登录
TypeScript
let status = GameHelper.Login.loginServerStateStatic()
if (status == 0 || status == 2) {
GameHelper.Login.loginAppServerStatic(() => {
//上传
//下载
})
} else if (status == 1) {
//上传
//下载
}
常用接口
查询当前登陆状态
TypeScript
//---获取登录状态---
//-1 登录中。游戏应该禁止用户打断登录过程。
//0-未登录。进入游戏后取到该状态,游戏需要在合适的时机调用PUB_loginAppServer,平台层会弹出QQ微信界面第三方框。
//1-登陆成功,游戏已经发起过登录且登陆成功了。
//2-曾经登陆过,但是本次启动还未自动登录,游戏需要在合适的时机调用PUB_loginAppServer,平台层为无界面的自动登录连接服务器
//3-游客登录,启动后游戏不需要调用PUB_loginAppServer登录
public loginServerStateStatic() : number {
return this.api.loginServerStateStatic()
}
登陆
TypeScript
//---登录---
//0-失败,按照现在的游戏逻辑,弹出登录框之后都会进游戏,失败了也返回3游客成功,这个返回值视作保留数值。
//1-第三方登录正常成功(ServerState-1)。登录后需要游戏调用上传游戏数据PUB_loginUploadUserData
//2-第三方登录(ServerState-1),换了设备登录且用户选择了覆盖数据。登录后需要游戏调用下拉数据覆盖本地PUB_loginGetUserData
//3-用户取消登录等操作,或者是换设备登录但是选择了不覆盖本地数据。视作游客登录成功(ServerState-3)。游戏不用调用上传或者下拉数据。
//游戏层在PUB_loginServerState为0,2时需要调用这一个接口,平台层自动判断是弹出qq微信的登陆界面还是根据之前的登陆信息进行自动登录
public loginAppServerStatic(callback: (code : number, userInfo: LoginUser | null) => void, invalidCallback? : () => void) {}
上传存档
TypeScript
//---上传数据---
//code表示keyInfo是否上传成功,code-0获取失败 1-获取成功 2-再次调用登录方法
//注意,如果此过程服务器结果为被踢掉线了,那么PUB_loginServerState也会改变状态为0
public loginUploadUserDataStatic(key: string, value: string, callback: (code: number, key: string) => void, invalidCallback? : () => void) {}
下载存档
TypeScript
/**
* 下拉数据
* @param callback
* ---下拉数据---
说明:返回值为key-value字符串类型,code-0获取失败 1-获取成功 2-再次调用登录方法
注意,如果此过程服务器结果为被踢掉线了,那么PUB_loginServerState也会改变状态为0
* @returns
*/
public loginGetUserDataStatic(keyInfo: string, callback: (code : number, key: string, value: string) => void, invalidCallback? : () => void) {}
获取用户信息
TypeScript
public getUserInfo() : GameUser {}
注销
TypeScript
//注销 code 0-取消 1-注销完成
public loginOff(completion : (code : number) => void, invalidCallback? : () => void) {}
退出登录
TypeScript
// 退出登录
//code 0 失败 1成功
public serverCustomLogExit(callback :{ exitCallBack : (code : number, user : LoginUser | string) => void,tokenInvalidCallBack : () => void}){}
点我快速对接


