登录
Unity3D
概述
接入向导
Apple 登录
Universal Link
检测 Universal Link
授权登录
游客登录
扫码登录
微信视频号授权
第三方平台拉起登录
异账号处理
获取票据
实名制
退出登录
常见问题
Android
概述
接入向导
授权登录
扫码登录
微信视频号授权
第三方平台拉起登录
异账号处理
获取票据
实名制
退出登录
常见问题
IOS
概述
接入向导
Apple 登录
Universal Link
检测 Universal Link
授权登录
游客登录
扫码登录
微信视频号授权
第三方平台拉起登录
异账号处理
获取票据
实名制
退出登录
常见问题
其他
数据结构
系统工具
登录 / Unity3D / 概述

概述

MSDK登录功能是游戏玩家登录游戏的最快捷方便的方式:玩家可以使用QQ账号,微信账号,游客账号登录您的游戏,可用于iOS、Android的手机,平板设备。

显示详情

接入向导

1 前置条件

1) 您已经在腾讯开放平台上注册游戏并通过审核,或您的腾讯接口人已经通过内部渠道帮您注册游戏。

2) 您已经按初始化模块说明完成 初始化

3) 确认您的游戏登录权限已开通。完成游戏注册后此权限已经默认开通,如果您调用登录接口返回"-303, no permission",请联系MSDK联调支持的同学。

2 参考Demo示例

手Q登录示例参考 Assets\Example\MsdkDemo.cs 脚本的 ShowQQ() 方法的登录部分。

微信登录示例参考 Assets\Example\MsdkDemo.cs 脚本的 ShowWX() 方法的登录部分。

游客登录示例参考 Assets\Example\MsdkDemo.cs 脚本的 ShowNotice() 方法的登录部分。

3 绑定接口到按钮

下面以Unity原生的UGUI为例说明如何将登录接口绑定到UGUI的Button,NGUI绑定方法类似可参考此例。

1) 通过属性面板绑定接口

  • 创建Button

在 Hierarchy 面板依次选择 Create -> UI -> Button。

  • 创建C#脚本

在 Project 面板下右键单击弹出菜单中,依次选择 Create -> C# Script,重名名C#脚本为 ClickTest.cs(可使用任意名称)。

  • 编辑脚本

双击刚才创建的C#脚本 ClickTest.cs,在打开的IDE中编辑脚本。

using UnityEngine;
using System.Collections;
// Step1 引用MSDK库
using Msdk;

public class ClickTest : MonoBehaviour {

    void Start () {
        // Step2 设置是否使用PC调试桩环境
        WGPlatform.SetPCDebug(true);
        // Step3 设置MSDK登录回调
        MsdkEvent.Instance.LoginEvent += LoginCallback;
        // Step4 初始化MSDK
        WGPlatform.Instance.Init();
    }

    // Button需要绑定的方法,名称可随意
    public void Clicked()
    {
        // 点击按钮后调用MSDK登录接口
        WGPlatform.Instance.WGLogin(ePlatform.ePlatform_QQ);
    }

    // MSDK登录回调
    public void LoginCallback(LoginRet ret)
    {
        Debug.Log(ret.ToString());
    }
}

其中MSDK初始化步骤的详细说明请参考MSDK初始化

  • 将脚本设置为 Canvas 的组件

在 Hierarchy 面板选择 Canvas 调出 Inspector 面板,将 ClickTest.cs 脚本拖动到 Inspector 面板的最下面,结果如图示

  • 绑定方法到按钮

在 Hierarchy 面板选择 Button 调出 Inspector 面板,点击 Inspector 面板下方的加号以添加一个点击事件

点击刚添加的条目旁的圆圈以选择绑定点击事件的 GameObject,这里我们选择绑定过 ClickTest.cs 脚本的 Canvas

点击 No Function 条目选择点击触发的方法 Clicked()

2) 通过代码动态绑定接口

  • 创建按钮

和"通过属性面板绑定接口"一样,创建Button。然后在Button的 Inspector 面板修改Button的名称为 LoginButton(可使用任意名称),便于在代码中获取此按钮。

  • 创建并编辑脚本

创建 ClickTest.cs 脚本,代码类似:

using UnityEngine;
using System.Collections;
using UnityEngine.Events;
using UnityEngine.UI;
// Step1 引用MSDK库
using Msdk;

public class ClickTest : MonoBehaviour {

    void Start () {
        // Step2 设置是否使用PC调试桩环境
        WGPlatform.SetPCDebug(true);
        // Step3 设置MSDK登录回调
        MsdkEvent.Instance.LoginEvent += LoginCallback;
        // Step4 初始化MSDK
        WGPlatform.Instance.Init();

        // 通过按钮名称获取GameObject
        GameObject btnObj = GameObject.Find("LoginButton");
        // 获取Button实例
        Button loginBtn = btnObj.GetComponent<Button>();
        // 设置点击事件
        loginBtn.onClick.AddListener(delegate() {
            // 点击按钮后调用MSDK登录接口
            WGPlatform.Instance.WGLogin(ePlatform.ePlatform_QQ);
        });
    }

    // MSDK登录回调
    public void LoginCallback(LoginRet ret)
    {
        Debug.Log(ret.ToString());
    }
}

其中MSDK初始化步骤的详细说明请参考MSDK初始化

4 运行查看结果

点击Unity中间上方的三角图标在PC环境下运行程序,然后点击 Game 面板的按钮

此时查看 Console 可看到如下登录接口调用成功并回调的日志

最后,打出安装包并在手机上安装运行,可以看到点击按钮后拉起了手Q并完成登录授权。

5 调用此模块其他接口

完成前面Step1-Step4步骤后,即已完全接入此模块,可直接调用此模块的其他接口不需要额外的配置。此模块各部分说明如下。

授权登录:拉起手Q/微信客户端或web页面(手Q未安装)授权。
游客登录:MSDK提供游客模式可方便用户在不提供任何账号密码的情况下可完整体验游戏流程。
扫码登录:在用户设备未安装QQ/微信的情况下,游戏可通过扫码登录让用户其他设备的QQ/微信进行授权。
异账号处理:手Q/微信平台要求处理不同账号登录的异账号场景。
获取票据:在游戏需要票据(如支付)的地方调用此接口可获取当前用户的票据信息。
退出登录:用户需要注销或切换账号时可调用此接口清除登录用户的票据信息。

Universal Link

Universal Link 是 Apple 从 iOS 9 引入的一种打通 web 和 app 之间跳转的机制。在 Safari 或者 WebView 中打开与 app 关联的链接时,会自动跳转到 app 并且不丢失参数内容。Universal Link 的使用、相关配置及平台侧(手Q、微信)支持情况等详细描述可参考:导航-->初始化-->左侧目录:iOS-->Universal Link。

检测 Universal Link

概要说明

MSDK 3.3.15 版本开始新增 Universal Link 接入后检测接口,可用于检测接⼊ Universal Link 是否正确接入。目前只支持微信平台, 仅可在MSDK测试环境下调用,请勿在正式环境调用

可通过OnCheckULNotify回调查看检测结果。

1)示例代码
//检查微信 UL
WGPlatform.Instance.WGCheckWXUniversalLink();
//回调示例例
MsdkEvent.Instance.CheckULEvent += (CheckULRet ret) =>
{
    // 回调函数中检查检测结果
};
2)CheckULRet 数据结构介绍
//CheckULRet 数据结构介绍

public class CheckULRet : CallbackRet
{
    public int step;          //检查步骤
    public bool success;      // 检测是否成功
    public string errorInfo;  // 检测信息
    public string suggestion; //出错时的建议
}

// 其中 step 分 7 步骤,对应枚举类型如下:

typedef enum _eULCheckStep {
    eULCheckStepParams = 0,             // 参数检查
    eULCheckStepSystemVersion = 1,      // 当前系统版本检查
    eULCheckStepWechatVersion = 2,      // 微信客户端版本检查
    eULCheckStepSDKInnerOperation = 3,  // 微信SDK内部操作检查
    eULCheckStepLaunchWechat = 4,       // App拉起微信检查
    eULCheckStepBackToCurrentApp = 5,   // 由微信返回当前App检查
    eULCheckStepFinal = 6,              // 最终检查
};

// 会依次回调这 7 个 step,当回调了 eULCheckStepFinal,说明检测通过,Universal Link 接入成功。 任一 step 回调的 success 为 false, 流程终止,后续不再回调,可以根据 errorInfo 查看当前步骤错误的原因,根据 suggestion 修复问题。

Apple 登录

msdk 3.3.12 版本开始支持 Apple 登录。

配置说明

1 Apple Developer Potral 配置

实现 Sign in with Apple 功能之前,需要在 Apple Developer Portal:

  • 获取 Team ID;
  • 创建用于向 Apple 发送请求时标识请求来源的 client_id;
  • 对于 iOS 应用来说,client_id 亦即 App ID(Bundle ID)
  • 创建描述文件
  • 创建用于计算 client_secret 的 key 以及对应的 Key ID;
1.1 获取 Team ID
  • 登录 Apple Developer Portal,点击 Account;
  • 点击左侧边栏的 Membership,即可看到 Team ID;

1.2 创建 App ID

  • 点击左侧边栏的 Identifiers,然后点击蓝色加号;

  • 第一步选择 App IDs,点击 Continue;

  • 输入 Description 以及 Bundle ID,在 Capabilities 下勾选 Sign in with Apple;

  • 点击 Continue,点击 Register;

对于现存 App ID 来说,只需找到想要增加 Sign in with Apple 的 App ID ,在 Capabilities 下勾选 Sign in with Apple 即可。

1.3 创建描述文件

  • 点击左侧边栏的 Profiles,然后点击蓝色加号;

  • 选择证书类型, 点击 Continue

  • 选择上一步注册的 App ID, 点击 Continue

  • 选择签名证书,点击 Continue

  • 选择设备,点击 Continue

  • 为描述文件命名,点击 Continue

  • 下载描述文件,点击 Download

  • 安装下载的描述文件到开发或者打包环境中

对于现存的描述文件来说,只需在 App ID 的 Capabilities 添加 Sign in with Apple 之后, 重新编辑、保存和下载即可

1.4 创建 Key 以及获取 Key ID

  • 输入 Key Name,勾选 Sign in with Apple;

  • 点击 Sign in with Apple 旁边的 Configure,选择上述配置了 Sign in with Apple 功能的 App ID 作为 Primary App ID,点击保存;

  • 点击 Continue,点击 Register;
  • 下载 Key 文件(只能下载一次,确保不要丢失),获取 Key ID

将上述过程中获得的 App ID,Team ID,Key ID,Key 文件中的内容在游戏接入时配置到飞鹰系统中即可。配置路径在:游戏管理 -> 我的游戏 -> SDK参数 -> 搜索:编辑iOS信息 -> MSDKV3苹果渠道配置(联调环境/正式环境)。

2 Unity 配置

Apple 从 XCode 11开始支持 Apple ID 登录,当运行的 iOS 系统版本在 iOS 13 及以上版本的时候,功能正常,否则登录返回错误码 8002 eFlag_Apple_NotSupport

2.1 Unity XUPoter 的 xx.projmods 文件的配置

Unity 导出 XCode 工程时,需要配置 projmods 文件

{
    "group": "MSDKApple",
    "libs": [],
    "frameworks": ["AuthenticationServices.framework:weak"],
    "files": [],
    "folders": [],
    "excludes": [],
    "headerpaths":[],
    "build_settings": {},
    "system_capabilities": {},
    "Info.plist":{} 
}
2.2 Unity 工程需要新增 Entitlement 文件

在 Xcode BuildPhases 中添加 AuthenticationServices.framework,同时设置Status 为 optional,Xcode 11 编译可以不设置 optional,默认即可

示例:MSDKDevDemo.entitlements

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.applesignin</key>
    <array>
        <string>Default</string>
    </array>
</dict>
</plist>

Unity 如何添加 Entitlement 文件,参考Unity 论坛的策略https://forum.unity.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/

Apple 登录界面要求

[human-interface-guidelines] 是苹果要求的界面风格,有明确的界面要求,游戏方需要关注的是:

按钮的外观颜色要求

登录按钮存在三种外观:白色、带边框的白色和黑色。选择适合背景的按钮外观有要求

白色按钮

用于深色或者彩色背景

白色按钮带边框

用于不能提供足够对比度的白色或者浅色白净

黑色按钮

用于提供足够对比度的白色或浅色背景

按钮的位置要求

  • 使用与其他登录按钮大小相同的 Apple 登录按钮
  • 避免让滚动才看到按钮
  • 默认情况下,“使用 Apple 登录” 按钮具有圆角
  • 此外按钮不能出现拉伸或者压缩导致的比例丢失
  • 按钮需要在所有其他登录方式上面

其他关注点

苹果提供了 “Sign in With Apple” 和 “Continue With Apple” 两种文档用于登录按钮(Objective-c 和 Swift 原生UI组件),业务侧可选择符合您登录体验的文案,文案的语言会随着手机系统语言进行本地化。

Apple 登录 openID 的说明

同一开发者账号下的所有 App,在同一个 iCloud 账号下返回的 userID 均相同, MSDK 后台透传该 userID 作为 openID 使用。

iCloud 账号在 Apple 登录时 userID 变化情况说明

操作 结果
同一 App,多次登录 userID 值不变
同一 App,卸载后安装 userID 值不变
同一开发者账号下的所有 App userID 值相同
iCloud 账号不同 ,App 相同 userID 值不同

授权登录

1 概要说明

拉起手Q/微信客户端或web页面(手Q未安装)授权,在用户授权以后通过LoginEvent通知游戏获取到LoginRet登录信息。

2 注册回调

1)功能描述

为接收MSDK的登录回调,您需要注册回调函数进行处理,建议在Awake函数中进行注册。登录结果会通过回调函数通知给您。

2)接口声明
public delegate void LoginDelegate(LoginRet loginRet);
3)参数说明
参数名称 类型 说明
loginRet LoginRet 类 登录结果信息类,具体成员跳转查看
4)返回值

5)示例代码
MsdkEvent.Instance.LoginEvent += (LoginRet loginRet) =>
{
    switch (loginRet.flag)
    {
    case eFlag.eFlag_Succ:
    // 登录成功, 可以读取各种票据
    // 游戏TODO:进入游戏
        int platform= loginRet.platform;
        if((int) ePlatform.ePlatform_Weixin == platform) {
            loginState = "微信登录成功";
        } else if((int) ePlatform.ePlatform_QQ == platform) {
            loginState = "QQ登录成功";
        } else if((int) ePlatform.ePlatform_QQHall == platform) {
            loginState = "大厅登录成功";
        } else if((int) ePlatform.ePlatform_Guest == platform) {
            loginState = "游客登录成功";
        }
        break;

    // 游戏TODO:对登录失败情况分别进行处理,一般均为返回登录页面引导用户重新授权
    case eFlag.eFlag_QQ_UserCancel:
    // 玩家取消授权
    case eFlag.eFlag_QQ_LoginFail
    // QQ登录失败
    case eFlag.eFlag_QQ_NotInstall
    // 未安装QQ
    case eFlag.eFlag_Local_Invalid:
    // 自动登录失败,包含本地票据过期, 刷新失败登等所有错误
    case eFlag.eFlag_WX_UserCancel:
    // 玩家取消授权
    case eFlag.eFlag_WX_NotInstall:
    // 未安装微信
    case eFlag.eFlag_WX_NotSupportApi:
    // 微信版本不支持
    case eFlag.eFlag_WX_LoginFail:
    <stong>//微信登录失败</stong>
    default:
        loginState = "登录失败";
        message = loginRet.ToString();
        break;
    }
};
6)特殊说明

V3.3.21 版本 开始新增授权登录回调中微信授权scope字段透传能力,如下:

授权登录回调OnLoginNotify中,新增微信授权scope字段透传,业务侧可根据该字段判断用户是否有授权关系链权限;scope字段在LoginRetextra_json中,示例如下:

    用户授权关系链权限的scope样式:
    loginRet.extra_json = "{\"scope\":\"snsapi_userinfo,snsapi_friend,snsapi_message\"}";

    用户未授权关系链权限的scope样式:
    loginRet.extra_json = "{\"scope\":\"snsapi_userinfo,snsapi_message\"}";

注意事项:

1.授权登录scope透传仅限微信平台,QQ平台不支持

2.授权登录时默认个人信息与好友关系链在同一页面授权。如需好友关系链单独授权页面:

  • 微信平台需向微信(企业微信wxgame)平台侧申请开通
  • QQ平台当前不再支持该特性配置,请关注后续版本更新
7)名称解释
名称 描述 支持平台 调用接口
授权登录 游戏通过拉起平台的授权界面,引导用户授权游戏获得登录所需票据 手Q/微信 WGLogin
快速登录 玩家的操作使平台拉起游戏时会透传登录相关的票据信息从而登录进入游戏。 手Q
自动登录 登录时不指定平台参数,不会拉起手Q或者微信,只使用本地有效票据进行授权。 手Q/微信 WGLogin(ePlatform.ePlatform_None)
自动刷新 MSDK提供自动刷新微信票据接口 MSDK 提供功能
异账号 当前游戏内登录的账号和平台登录的账号不一致 MSDK 提供功能 WGSwitchUser

ePlatform定义说明

LoginRet定义说明

QQ大厅登录 : QQ大厅登录是早期棋牌类游戏通过QQ游戏大厅拉起传递票据进行登录的方式,不接入QQ游戏大厅的游戏可以不关注

推荐登录流程

3 调用登录

1)功能描述

您可以通过调用WGLogin 接口进行指定平台拉起授权登录 或者 进行自动登录,调用结果会通过回调函数通知给您,函数声明及调用示例代码如下:

2)接口声明
void WGLogin(ePlatform platform);
3)参数说明
参数名称 类型 说明
platform ePlatform 枚举 游戏需要授权登录的平台类型
4)返回值

无,登录信息通过LoginEvent 回调返回给游戏

5)示例代码
WGPlatform.Instance.WGLogin (ePlatform.ePlatform_QQ); //QQ登录
WGPlatform.Instance.WGLogin (ePlatform.ePlatform_Weixin); //微信登录
WGPlatform.Instance.WGLogin (ePlatform.ePlatform_Guest); //游客登录(仅iOS)
WGPlatform.Instance.WGLogin (ePlatform_Apple);//Apple登录(仅iOS)
6)特殊说明
  • 因为微信和手Q各自的bug,会导致游戏在多个场景下收不到登录回调。游戏在调用WGLogin后,然后回到游戏时建议做一个超时判断, 如果超过15秒则认为登录超时。其中收不到回调的场景包括但不限于:
    i) 在微信未登录的情况下, 游戏拉起微信输入用户名密码以后登录, 可能会没有登录回调, 这是微信客户端已知BUG
    ii) 在微信未登录的情况下, 在输入用户名密码界面直接点返回, 可能会没有登录回调, 这是微信客户端已知BUG
    iii) 在iOS9以上系统,点击系统左上角的“返回xx游戏”,不会有登录回调

  • MSDK 3.3.22版本开始支持微信视频号授权,调用WGLogin接口,传入 ePlatform.ePlatform_WeixinVideoLive,在MSDK的回调中获取tdiAuthBuffer,用于后续的直播登录。

视频号授权注意事项:

  • 视频号直播授权当前仅支持微信渠道
  • 登录回调中tdiAuthBuffer存在于_extra_json字段中,以Base64的格式返回,通过Json解析获取,请使用标准的Base64解码后使用
  • MSDK仅做tdiAuthBuffer内容的返回,具体使用方法联系MSDK助手对接
7)名词解释

4 调用登录(3.0.8及以上版本使用)

1)功能描述

具有防重复点击,防超时功能,您可以通过调用WGLogin 接口进行指定平台拉起授权登录 或者 进行自动登录,调用成功返回eFlag_Succ,如果正在登录中返回eFlag_Logining,登录结果会通过回调函数通知给您,函数声明及调用示例代码如下:

2)接口声明
eFlag WGLoginOpt(ePlatform platform, int overtime);
3)参数说明
参数名称 类型 说明
platform ePlatform 枚举 游戏需要授权登录的平台类型
overtime int 登录超时时间,超时从授权回来开始计算,单位秒
4)返回值

无,登录信息通过LoginEvent 回调返回给游戏

5)示例代码
WGPlatform.Instance.WGLoginOpt (ePlatform.ePlatform_QQ,20); //QQ登录
WGPlatform.Instance.WGLoginOpt (ePlatform.ePlatform_Weixin,20); //微信登录
WGPlatform.Instance.WGLoginOpt (ePlatform.ePlatform_Guest,20); //游客登录(仅iOS)
6)特殊说明

msdk增加了登录超时的回调

7)名词解释

游客登录

1 概要说明

由于苹果审核要求用户在不提供任何账号密码的情况下可完整体验游戏流程,MSDK提供游客模式方便游戏快速接入实现该要求,目前游客模式仅限于iOS端。游客模式登录和获取票据同手Q、微信一样,可参考授权登录获取票据。除了登录和获取票据游客模式还需注意以下几点事项:

1) 游客模式支付

游客模式支付同手Q、微信支付一样,需先调用米大师的注册支付(补发货)接口,然后再调用支付接口,支付时需注意游客模式的session_id和session_type的值为:

//支付时游客模式session_id和session_type固定为:
sessionId = "hy_gameid";
sessionType = "st_dummy";

2) 游客模式不支持的接口

有些接口如关系链、LBS、公告等接口游客模式是不支持的,若游戏在游客模式下调用这些接口时返回值相对应的Ret的flag为eFlag_InvalidOnGuest,请注意该flag。

3) 游客重置

在GameServer清除相关数据之后,可以调用游客重置接口清除MSDK留在终端的Guest账号数据,下次登录Guest模式将会生成新的Guest账号。

4) 玩家提醒

由于游客模式无需任何账号密码,故游客模式账号、游戏数据仅限本机使用。以下几种场景将导致游客数据丢失:

  • iPhone升级或降级系统后重新激活并设置为新的iPhone

  • 还原并抹掉iPhone数据

  • 删除游戏并重装

故用户在进行游客模式登录时可进行友好提醒,具体提醒可参考:

游客登录流程

在Guest模式下,登录分为注册和登录两个序列。但两个场景的差异性被MSDK屏蔽,游戏不需关心两者的不同。这里只做方案说明:

账号模式和Guest模式流程比较

2 注册回调

参见授权登录 注册回调

3 调用登录接口

参见授权登录登录接口调用

4 调用刷新游客id接口

1)功能描述

刷新游客模式下的id。

2)接口声明
void WGResetGuestID();
3)参数说明

4)返回值

5)示例代码
WGPlatform.Instance.WGResetGuestID ();
6)特殊说明

现网版本请勿调用游客重置接口,以防用户数据丢失。

7)名词解释

扫码登录

1)功能描述

支持拉起登录二维码显示界面,玩家可以通过另外一个已经登录微信/QQ 对应社交账号的手机扫描二维码,根据提示授权后,游戏即可获得登录票据信息,一般用于电视或平板环境,或者手机未安装平台客户端的情况。无论机器上是否有安装微信/QQ APP,均可拉起二维码进行扫码授权登录。

备注:3.3.16 版本开始支持QQ 扫码登录。

2)接口声明
void WGQrCodeLogin(ePlatform platform);
3)参数说明
参数名称 类型 说明
platform ePlatform 枚举 游戏需要授权登录的平台类型
4)返回值

无,登录信息通过LoginEvent 回调返回给游戏

5)示例代码
WGPlatform.Instance.WGQrCodeLogin (ePlatform.ePlatform_Weixin);
6)特殊说明

关于微信扫码登录权限:非精品的游戏统一由游戏邮件向微信申请,精品的游戏由协同统一接入处理。

拉取到的二维码图片有效期5分钟,过期扫码无法登录成功。

7)名词解释

微信视频号授权(跨平台)

1)功能描述

MSDK 封装视频号授权接口,通过调用 WGChannelPermissionAuth 接口,当前微信要求传入 snsapi_channels_livestream,在 MSDK 的回调中获取 tdiAuthBuffer,用于后续的直播登录。3.3.26 版本开始新增该接口。

2)示例代码

请使用 WGChannelPermissionAuth 接口,参数设置为 ePlatform.ePlatform_WeixinVideoLive、snsapi_channels_livestream,在视频号授权的接口 ChannelPermissionAuthEvent 接收回调。调用示例:


// ePlatform_WeixinVideoLive,表示微信视频号渠道
// snsapi_channels_livestream,同时也是一个特殊标记权限

WGPlatform.Instance.WGChannelPermissionAuth(ePlatform.ePlatform_WeixinVideoLive, "snsapi_channels_livestream");

回调示例:


MsdkEvent.Instance.ChannelPermissionAuthEvent += (LoginRet ret) =>
{
    Debug.Log(ret.ToString());
    message = ret.ToString();
    switch (ret.flag)
    {
        case eFlag.eFlag_Succ:
            // 视频号授权成功
            Debug.Log("视频号授权成功!");
            break;
        case eFlag.eFlag_WX_UserCancel:
            Debug.Log("视频号授权-用户取消!");
            break;
        case eFlag.eFlag_WX_UserDeny:
            Debug.Log("视频号授权-用户拒绝!");
            break;
        default:
            // 视频号授权失败
            Debug.Log("视频号授权失败!");
            break;
    }
};

返回结果:


{
	"_flag": 0,
	"_desc": "",
	"_platform": 8,
	"_open_id": "",
	"_user_id": "",
	"_pf": "",
	"_pf_key": "",
	"_token": [],
	"_prajna_ext": "",
	"_extra_json": "{\"tdiAuthBase64\":\"Cp4BMV9CZ0FBYTRpb3RxYVA3aUgwQ1AzejkzRlZWY0Y4OG55NmZPZlZtaXh3ZUZNVHMwYVdJK0FF\\nVFpQR1c1SnpKbDdySWpnSnV6MEJRL2EyUXlQQlJWMG0xejNlTzRTR25ZN1VvSmt4N01idmxyemVp\\nOGNRU21lSnkxZGt6M0JubTFsNkgxZGJIMWVYRWNMMDdJa3dlYzJQMVZCUmhnPT0SF2lsaW5rYXBw\\nXzA2MDAwMDNiNzhjMTc2\\n\"}"
}
3)注意事项
  • 视频号授权当前仅支持微信视频号
  • 当前传入 snsapi_channels_livestream,后续微信可能会变动
  • 登录回调中 tdiAuthBuffer 存在于 _extra_json 字段中,以 Base64 的格式返回,通过 Json 解析获取,请使用标准的 Base64 解码后使用
  • 该功能不限制登录渠道及登录态,即可以跨平台调用该接口
  • MSDK 仅做 tdiAuthBuffer 内容的返回,具体使用方法联系MSDK助手对接

第三方平台登录

MSDK 3.3.21及以上版本需关注

为对抗租号平台,从MSDK 3.3.21版本开始屏蔽QQ游戏中心启动游戏时的快速登录能力,游戏未登录状态下从QQ游戏中心启动将无法直接登录成功进入游戏;游戏中心启动异账号场景相关操作指引(游戏评估处理):

1) 游戏未登录:保持在登录页或调用QQ登录拉起QQ授权
2) 游戏已登录:
    2.1) 无异账号:等待MSDK登录回调,登录成功则可进游戏
    2.2) 有异账号:
        2.2.1) 用户选择本地账号:等待MSDK登录回调,登录成功则可进游戏
        2.2.2) 用户选择拉起账号:退回登录页或调用QQ登录拉起QQ授权页

注意事项:

更新到3.3.21版本的业务需联系QQ平台侧,取消业务在QQ游戏中心启动时scheme携带的accesstoken、paytoken字段,避免已登录用户游戏内登录态受影响。

1)功能描述

是指当玩家在手Q或者微信内点击分享消息直接拉起并进入游戏时,平台会透传登录相关的票据信息从而直接完成登录进入游戏。这种场景下,游戏在被拉起以后无需用户再次授权才能进入游戏。MSDK内部已经将相关代码和回调设置好了。只需要参考Android,iOS双端wiki,设置相关配置。

异账号处理

1 概括说明

用户从平台拉起进入游戏,因为账号不一致(平台不一致或者平台一致但账号不一致),需要游戏弹框提示异账号。异账号场景详细描述参考异账号说明文档

2 注册回调

为接收MSDK提供的游戏被拉起的回调,您需要注册WakeupEvent回调。

1)功能描述

平台拉起进入游戏携带的信息,会通过wakeupEvent 传递给游戏。

2)接口声明
public delegate void WakeupDelegate(WakeupRet wakeupRet);
3)参数说明
参数名称 类型 说明
wakeupRet WakeupRet 类 游戏拉起的信息
4)返回值

5)示例代码
MsdkEvent.Instance.WakeupEvent += (WakeupRet wakeupRet) =>
{
    // TODO GAME 这里增加处理异账号的逻辑
    if (eFlag.eFlag_Succ == wakeupRet.flag || eFlag.eFlag_AccountRefresh == wakeupRet.flag) {
        // 本地账号登录成功可直接进入游戏
        // 游戏TODO:进入游戏逻辑
        if((int) ePlatform.ePlatform_Weixin == wakeupRet.platform) {
            loginState = "微信登录成功";
        } else if ((int) ePlatform.ePlatform_QQ == wakeupRet.platform) {
            loginState = "QQ登录成功";
        } else if((int) ePlatform.ePlatform_QQHall == wakeupRet.platform) {
            loginState = "大厅登录成功";
        }
    } else if (eFlag.eFlag_UrlLogin == wakeupRet.flag) {
        // 本地无账号信息,自动用拉起的账号登录,登录结果在OnLoginNotify()中回调
    } else if (eFlag.eFlag_NeedSelectAccount == wakeupRet.flag) {
        // 游戏TODO:异账号时,游戏需要弹出提示框让用户选择需要登录的账号,并根据用户的选择调用WGSwitchUser接口
        Debug.Log("diff account");
        isShowDiffAcount = true;
        message = "异账号!";
    } else if (eFlag.eFlag_NeedLogin == wakeupRet.flag) {
        // 游戏TODO: 没有有效的票据,登出游戏让用户重新登录
        loginState = "登录失败";
        message = "请重新登录";
    } else {
        loginState = "未登录";
        message = "OnWakeupNotify    flag : " + wakeupRet.flag + "\ndesc : " + wakeupRet.desc;
        WGPlatform.Instance.WGLogout();
    }
};
6)特殊说明

收到 eFlag.eFlag_NeedSelectAccount 时即为触发异账号场景,此时游戏需要弹出提示框让用户选择需要登录的账号,并根据用户的选择调用WGSwitchUser接口,然后等待 LoginEvent 回调获取切换账号的结果。

7)名词解释

ePlatform定义说明

WakeupRet定义说明

3 切换账号

1)功能描述

当异账号判断的wakeupRet.flag为eFlag_NeedSelectAccount时,游戏需要弹框提示用户,选择本地账号或者拉起账号登录游戏,游戏需要根据用户选择的结果调用接口WGSwitchUser完成用户登录。

2)接口声明
bool WGSwitchUser(bool flag);
3)参数说明
参数名称 类型 说明
flag bool true : 切换到外部账号; false : 继续使用原账号
4)返回值

true : 表明此账号有票据。MSDK会去验证此票据的有效性,并在 LoginEvent 中返回验证结果。

false : 表明此账号无票据或票据不合法。可直接登录,让用户重新授权登录。

5)示例代码
// 异账号弹窗处理示例
void ShowDiffAcount(int windowID)
{
    // 选择本地账号登录
    if (Button("本地账号"))
    {
        if(!WGPlatform.Instance.WGSwitchUser(false)){
            WGPlatform.Instance.WGLogout();
            loginState = "未登录";
            loginStateMaybeChange = true;
        }
    }
    // 选择拉起账号登录
    if (Button("拉起账号"))
    {
        if(!WGPlatform.Instance.WGSwitchUser(true)){
            WGPlatform.Instance.WGLogout();
            loginState = "未登录";
            loginStateMaybeChange = true;
        }
    }
}
6)特殊说明

由于微信平台游戏中心拉起游戏时,没有携带用户登录态,因此在微信平台下调用switchuser会返回false,此时需要重新进行授权登录。

7)名词解释

获取票据

1 概括说明

您在登录回调中通过解析LoginRet中的 TokenRet可以获得登录的回调票据,除此之外,您还可以调用如下接口来获取当前的登录票据。LoginRet票据信息中包含玩家的openid,pf,pfkey,LoginRet中的TokenRet包含pay_token(QQ登录时特有),access_token(微信登录时特有)等信息。您在进行支付时将会用到这些信息。

2 注册回调

3 调用接口

1)功能描述

获得登录的回调票据

2)接口声明
LoginRet WGGetLoginRecord();
3)参数说明

4)返回值

LoginRet 当前登录票据

5)示例代码
LoginRet loginRet = WGPlatform.Instance.WGGetLoginRecord();
if (loginRet == null || loginRet.open_id == "") {
    // 用户未登录;
    // 游戏TODO:票据无效,返回登录页面
} else {
    // 用户已登录
    // 游戏TODO:读取票据
}
6)特殊说明

1、您通过此接口获取到的票据以后需要判断LoginRet.flag,如果为0(eFlag_Succ),则票据正常有效可直接使用;如果为5001(eFlag_Checking_Token),这表明MSDK正在校验票据,此时获取到的票据无效。需要稍后重试。

2、该接口会涉及到查询本地数据库,高频调用会对性能有损耗,所以不适合高频调用。例如unity游戏不要在update函数频繁调用

7)名词解释

LoginRet定义说明

实名制

按照文化部《网络游戏管理暂行办法》的相关要求,网络游戏用户需要使用有效身份证件进行实名注册才可登录游戏,为了减轻游戏开发的负担我们为游戏定制了实名认证的界面以及整套接口,通过该模块您可以花费几分钟的时间来完成实名认证的功能。

实名制详细描述参考实名制说明文档

退出登录

1 概括说明

您可以调用WGLogout接口来退出登录,清除本地票据

2 注册回调

3 调用接口

1)功能描述

获得登录的回调票据

2)接口声明
bool WGLogout();
3)参数说明

4)返回值

返回true,您无需处理返回值

5)示例代码
WGPlatform.Instance.WGLogout();
6)特殊说明

7)名称解释

MSDK票据自动刷新流程

MSDK2.6.0i版本之后,在支持之前版本登录流程的基础上优化了新流程,业务只需关注WGLoginWGGetLoginRecord两个接口即可完成登录和票据处理。

  • 游戏自动登录的调用逻辑:

    游戏启动直接调用WGLogin()接口,等待OnLoginNotify()回调,流程如下:

  • 游戏需要登录票据时的调用逻辑:

    调用WGGetLoginRecord()接口,当返回值flag = 5001时表明MSDK内部正在校验票据有效性,可过几秒钟再次尝试调用获取,流程如下:

  • MSDK内部票据校验、刷新逻辑:

常见问题

游戏前后台切换用检查票据吗?

游戏在前后台切换时无需校验票据有效性。如果游戏中后台时间过长再切前台时,MSDK会自动校验票据有效性。

未装手Q时用web QQ登录返回游戏时Crash检查方法

如果游戏是用Unity直接打出Apk包,出现此问题,需要把MSDK的jar包中的assets中的内容解压放入Android/assets中。如果使用其他方式打包,需要注意打包脚本中适当处理MSDK的jar包中的so文件和资源文件,如果还有问题可尝试把MSDK的jar包中的assets中的内容解压放入游戏工程中的assets目录。

Apple 登录常见问题

1.返回-3003;检查 App ID,Team ID,Key ID,Key 文件中的内容在飞鹰系统中配置是否正确。检查路径:游戏管理 -> 我的游戏 -> SDK参数 -> 搜索:编辑iOS信息 -> MSDKV3苹果渠道配置(联调环境/正式环境)。

2.返回-3008; 检查使用的BundleID与飞鹰系统配置的是否匹配。

3.返回-3011;检查MSDK 客户端和服务端的环境是否匹配,MSDK环境需要一致。

4.Apple 证书如何添加 Sign in With Apple 能力?Apple 证书相关能力,需要联系证书的提供者添加相应能力并更新证书。一般是联系 KeyStore-helper 证书助手或者蓝盾助手。使用带有 Sign in With Apple 的能力的证书打包后,不要进行重签名操作。