SDK合规指南
1 文档修订记录
文档版本 | 文档更新日期 | 文档更新内容 |
---|---|---|
3.3.63 | 2024.08.23 | 1.「4.10 获取配置参数接口」新增渠道模板标识 |
3.3.56 | 2023.05.10 | 1.新增SDK合规指南;2.可选个人信息的配置。 |
3.3.42 | 2022.10.12 | 1.「4.5 支付」新增notifyURL 参数 |
3.3.30 | 2021.11.18 | 从聚合SDK独立拆分 |
2 接入准备
2.1 导入SDK
将下载好的 FYBase、FYCombine 目录,拷贝到游戏工程目录中并引入
2.2 添加SDK配置
到星云平台的"对接中心->SDK对接->SDK列表->基础接入参数->SDK配置参数"下载如下的配置文件,拷贝到游戏工程目录中并引入:
- iOS SDK配置文件:FYCoreConfig.plist
说明: 「引入」是指在 Xcode 界面右键点击工程列表,选择
Add File to 'xxx'
,然后在弹出框选择你要添加的文件或文件夹,将其添加到 Xcode 工程内。 以上的文件和文件夹都需要引入到工程,并且保持在工程中只有一份,否则会引起报错
。
可选个人信息的配置。如不希望本SDK采集某信息,请将对应字段的值改为0。如允许本SDK采集某信息,请将对应字段的值改为1
(1)在FYCoreConfig.plist中添加如下配置
<key>FY_GAME_PRIVACY</key>
<string>{"basic_device_data":"0","os_version":"0"}</string>
(2)字段名称说明
OS | 个人信息类型及字段 | 用途和目的 | 是否可选 | 关闭方式 |
---|---|---|---|---|
iOS | 设备基础信息(设备型号、硬件信息、屏幕分辨率) | 帮用户排查异常时使用,作为异常分析的依据 | 是 | 修改配置参数 FY_GAME_PRIVACY 的 basic_device_data 字段值为"0" |
iOS | 操作系统版本 | 帮用户排查异常时使用,作为异常分析的依据 | 是 | 修改配置参数 FY_GAME_PRIVACY 的 os_version 字段值为"0" |
iOS | IDFA(版本3.3.56已去除) | 帮用户排查异常时使用,作为异常分析的依据 | 是 |
2.3 添加Xcode配置
1.TARGETS -> Build Settings -> Other Linker Flags -> 添加 -ObjC
2.TARGETS -> Build Settings -> Apple LLVM - Language - Objective C -> Weak References in Manual Retain Release -> YES
3.TARGETS -> Build Settings -> Enable Objective-C Exceptions -> YES
4.TARGETS -> Build Settings -> Enable Bitcode -> NO
2.4 开启调试模式
1.将 FYCoreConfig.plist 中的 FY_GAME_DEBUG 的值改为 1,即可开启「调试模式」;FY_GAME_DEBUG 改为 0,即关闭「调试模式」。
2.开启「调试模式」会显示客户端的悬浮球,点击进入调试工具可以查看接口/回调的调用信息,具体调试方法可查看文档。
2.5 引入头文件
在对接代码头部引入头文件:
# import <FYCombine/FYCombine.h>
3 界面跳转标准规范
为了您能快速接入,并避免大多数对接问题,请按照标准规范来对接。
3.1 登录流程
3.2 首屏-切换账号流程
3.3 游戏中-切换账号流程
4 客户端接口
接口接入的要诀?
-
必接接口一定要接入,选接接口根据需要接入
-
必传参数一定要传,能传的参数尽量都传
-
所有的生命周期接口一定要接入
4.1 客户端回调
1.说明
- SDK接口在执行以后,会调用相应的回调方法,可以在回调方法中,处理相应的游戏逻辑
2.使用
- 注册以下通知,注册通知可以放在 AppDelegate.m(Unity 为UnityAppController.mm) 的
application:didFinishLaunchingWithOptions:
方法中
//注册初始化回调通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fycombineInitCallBack:) name:FYCOMBINE_CALLBACK_INIT object:nil];
//注册登录回调通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fycombineLoginCallBack:) name:FYCOMBINE_CALLBACK_LOGIN object:nil];
//注册支付回调通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fycombinePayCallBack:) name:FYCOMBINE_CALLBACK_PAY object:nil];
//注册获取本地化商品信息回调通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryLocalProductsCallback:) name:FYCOMBINE_CALLBACK_QUERY_LOCAL_PRODUCTS object:nil];
//注册登出回调通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fycombineLogoutCallBack:) name:FYCOMBINE_CALLBACK_LOGOUT object:nil];
//注册实名认证回调通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fycombineRealNameCallBack:) name:FYCOMBINE_CALLBACK_REAL_NAME object:nil];
//注册绑定回调通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fycombineBindCallBack:) name:FYCOMBINE_CALLBACK_BIND object:nil];
- 实现注册的回调方法,回调方法可以添加在AppDelegate.m(Unity 为UnityAppController.mm) 的末尾处。
// 初始化回调
// 游戏应在确保收到此回调后才能调用聚合渠道模块的其他接口
// 游戏不需管是否初始化成功,只要关心有没有收到初始化回调即可,也不需要重新调用初始化,SDK内部自己会处理初始化失败的情况
- (void)fycombineInitCallBack:(NSNotification*)notify {
// TODO: 初始化完成
}
// 登录回调
// 收到此回调的「登录成功」时,需将登录参数传到游戏服务器,再请求聚合SDK 的服务端做登录校验,校验成功才算登录成功,具体校验方式请看「服务端接入文档」https://help.737.com/archives/docs/detail/channel_combine/server/base
// 游戏收到此回调的「登录取消」或「登录失败」时,需向用户提供再次登录的按钮,以便用户能重新登录
// 假如在游戏中收到此回调,并且 open_id 变了,此时需要退出到登录首屏,切换成另外一个角色,并重新进入游戏
// 关于identityBirthday、identityAge这两个参数的使用,因不同渠道给到聚合的可能是生日也可能是年龄,所以若需使用这2个值,需对这2个值共同进行判断,如果identityAge有值就使用identityAge,如果没有就解析identityBirthday
- (void)fycombineLoginCallBack:(NSNotification*)notify {
FYCombineResponse *resp = notify.object;
if (resp.status == FYCombineResponseSuccess) {
// 游戏维度唯一用户ID
NSString *openId = [resp getDataWithKey:@"open_id"];
// 登录校验码,有效时间 7天,请在有效时间内完成校验,如超出时间需重新调用登录接口获取新校验码
NSString *token = [resp getDataWithKey:@"token"];
// 第三方用户ID
NSString *userId = [resp getDataWithKey:@"user_id"];
// 全渠道唯一用户ID
NSString *unionId = [resp getDataWithKey:@"union_id"];
// 渠道ID
NSString *channelId = [resp getDataWithKey:@"channel_id"];
// 身份证生日,格式:"1991-12-31"(有可能空)
NSString *identityBirthday = [resp getDataWithKey:@"identity_birthday"];
// 身份证年龄(有可能空)
NSString *identityAge = [resp getDataWithKey:@"identity_age"];
// 支付标识
NSString *paymentCode = [resp getDataWithKey:@"payment_code"];
// 通行证标识
NSString *passportCode = [resp getDataWithKey:@"passport_code"];
// TODO: 登录成功
// TODO: 请求游戏服务端验证登录
} else if (resp.status == FYCombineResponseLoginCancel) {
// TODO: 登录取消
} else {
// TODO: 登录失败
// 失败原因
NSString *message = resp.message;
}
}
// 支付回调
// 此回调不能作为支付成功的依据,故游戏不能在此处发放道具,游戏需要根据服务端的支付回调作为支付是否成功的依据,具体的服务端回调请看「服务端接入文档」https://help.737.com/archives/docs/detail/channel_combine/server/base
// 此回调只可以用来控制游戏界面显示,例如 loading 框的关闭、遮罩层的关闭
- (void)fycombinePayCallBack:(NSNotification*)notify {
FYCombineResponse *resp = notify.object;
// 星云订单号
NSString *orderId = [resp getDataWithKey:@"order_id"];
// 游戏订单号
NSString *gameOrderId = [resp getDataWithKey:@"game_order_id"];
if (resp.status == FYCombineResponseSuccess) {
// TODO: 支付成功
} else if (resp.status == FYCombineResponsePayCancel) {
// TODO: 支付取消
} else {
// TODO: 支付失败
// 失败原因
NSString *message = resp.message;
}
}
// 登出回调
// 当游戏调用 doLogout接口,本SDK会进行注销行为,并触发此回调的「登出成功」,游戏在此处判断是否在游戏内,如果在游戏内则退出到首页
// 一些第三方通行证自带登出按钮,当用户点击此按钮时,也会执行此回调
- (void)fycombineLogoutCallBack:(NSNotification*)notify {
FYCombineResponse *resp = notify.object;
if (resp.status == FYCombineResponseSuccess) {
// TODO: 登出成功
}
}
// 实名认证回调
// 当用户填写了实名认证信息并提交完成,将触发此回调的「实名认证成功」,并提供相关的实名信息
// 关于identityBirthday、identityAge这两个参数的使用,因不同渠道给到聚合的可能是生日也可能是年龄,所以若需使用这2个值,需对这2个值共同进行判断,如果identityAge有值就使用identityAge,如果没有就解析identityBirthday
- (void)fycombineRealNameCallBack:(NSNotification*)notify {
FYCombineResponse *resp = notify.object;
if (resp.status == FYCombineResponseSuccess) {
// 身份证生日,格式:"1991-12-31"(有可能空)
NSString *identityBirthday = [resp getDataWithKey:@"identity_birthday"];
// 身份证年龄(有可能空)
NSString *identityAge = [resp getDataWithKey:@"identity_age"];
// TODO: 实名认证成功
} else if (resp.status == FYCombineResponseNoRealName) {
// TODO: 未实名游客时间,可以用来给游戏提示距离实名认证弹出还有多少时间。每隔10s会回调一次
// 游客时间总时长,单位:秒
NSString *totalTime = [resp getDataWithKey:@"total_time"];
// 游客剩余时长,单位:秒
NSString *remainTime = [resp getDataWithKey:@"remain_time"];
} else if (resp.status == FYCombineResponseRealNameCancel) {
// TODO: 实名认证取消
} else {
// TODO: 实名认证失败
// 失败原因
NSString *message = resp.message;
}
}
// 获取本地化商品信息回调
// 当用户调用`queryLocalProducts`接口后,将触发此回调,返回商品信息列表
// 还在母包测试阶段,会返回测试用的商品信息,用于调试;待打出正式渠道包后,会根据真实情况,返回正确的本地化商品信息,具体的能获取到什么以苹果后台的配置为准`
// 如果回调失败或者返回的本地化商品信息为空,请使用原始的商品信息进行展示
- (void)queryLocalProductsCallback:(NSNotification *)notify {
FYCombineResponse *response = notify.object;
if (response.status == FYCombineResponseSuccess) {
// TODO:获取本地商品信息成功
NSArray *productLocalInfos = response.data[@"local_product_infos"];
for (NSDictionary *info in productLocalInfos) {
// 商品ID
NSString *productId = info[@"product_id"];
// 本地化标题
NSString *title = info[@"title"];
// 本地化说明
NSString *desc = info[@"desc"];
// 本地化价格,例如 10
NSString *price = info[@"price"];
// 本地化价格,包含货币单位,例如 $10
NSString *formatPrice = info[@"format_price"];
// 本地化货币代号,例如 CNY
NSString *currencyCode = info[@"currency_code"];
}
} else {
// TODO: 获取本地化商品信息回调失败,请展示原始的商品信息
// 失败原因
NSString *message = response.message;
}
}
// 绑定回调
// 当用户触发账号绑定时,如果绑定成功,则回调成功;如果取消绑定或者绑定失败,则返回绑定失败
// 绑定成功可以到服务端查询用户的绑定信息,具体请看「服务端接入文档」的「登录校验接口」https://help.737.com/archives/docs/detail/channel_combine/server/base
- (void)fycombineBindCallBack:(NSNotification*)notify {
FYCombineResponse *resp = notify.object;
if (resp.status == FYCombineResponseSuccess) {
NSLog(@"绑定成功");
} else {
NSLog(@"绑定失败");
}
}
4.2 初始化(必接)
1.说明
- 游戏需要在刚启动游戏的时候调用。
2.调用
FYCombineInitInfo *initInfo = [[FYCombineInitInfo alloc] init];
initInfo.gameVersion = @"1.0.0";
[[FYCombine sharedInstance] doInit:initInfo];
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
gameVersion | 游戏版本号 | 是 |
4.回调
- 初始化回调
fycombineInitCallBack
4.3 登录(必接)
1.说明
-
启动完游戏显示首页时调用。
-
玩家点击游戏界面的「进入游戏」时,需要判断是否有登录成功,如有则可以进入游戏;否则再次调用登录接口,让玩家重新登录,直到登录成功。
-
母包测试账号:需要到星云开放平台创建母包测试账号以便做母包的登录测试,创建路径:星云开放平台->对接中心->母包管理->母包测试账号
2.调用
[[FYCombine sharedInstance] doLogin];
3.参数
无
4.回调
- 登录回调
fycombineLoginCallBack
4.4 切换账号(必接)
1.说明
-
在需要切换用户时调用,该接口会弹出登录窗口,让用户重新登录。
-
与「用户登录」接口不同的是,登录接口非首次登录会自动登录,而此接口必定会弹出登录窗口。
-
调用此接口前,需先调用「账号退出」接口,并在接收到「登出回调」后,再调用此接口,以确保切换成功
2.调用
[[FYCombine sharedInstance] doSwitchAccount];
3.参数
无
4.回调
- 登录回调
fycombineLoginCallBack
4.5 支付(选接)
1.说明
-
调用此接口将拉起支付界面
-
建议游戏制定的商品标识格式为:com.feiyu.app_id.xxxx,以保证商品 id 的唯一性
-
打开"星云平台->对接中心->SDK对接->SDK列表->基础接入参数->游戏支付回调地址",配置游戏服务端的支付回调地址,支付完成后会通过此地址回调支付结果
-
客户端的支付回调不能作为支付成功的依据,不能在此处发放道具。
判断支付是否成功要根据服务端的支付回调
。具体的服务端回调请看服务端接入文档 -
客户端的支付回调只可以用来控制游戏界面显示,例如loading框的关闭、遮罩层的关闭
2.调用
FYCombinePayInfo *payInfo = [[FYCombinePayInfo alloc] init];
payInfo.playerId = @"12015";
payInfo.playerName = @"角色1";
payInfo.playerLevel = @"7";
payInfo.serverId = @"1";
payInfo.serverName = @"游戏区服1";
payInfo.goodsId = @"com.feiyu.20001.store1";
payInfo.goodsName = @"测试产品1";
payInfo.payAmount = @"600";
payInfo.gameOrderId = @"xxx";
payInfo.notifyExt = @"xxx";
payInfo.vipLevel = @"1";
payInfo.paySignType = @"md5";
payInfo.notifyURL = @"https://www.xxxx.com/xxxx";
[[FYCombine sharedInstance] doPay:payInfo];
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
playerId | 角色id。对应服务端支付回调的player_id 参数 |
是 |
playerName | 角色名 | 是 |
playerLevel | 角色等级,数字格式 |
是 |
serverId | 区服id,数字格式 。对应服务端支付回调的server_id 参数 |
是 |
goodsId | 商品标识,规范格式:com.feiyu.app_id.xxxx,例: com.feiyu.20001.store1。对应服务端支付回调的goods_id 参数 |
是 |
goodsName | 商品名称 | 是 |
payAmount | 支付金额,单位:分 (海外游戏传美分),数字格式 。对应服务端支付回调的total_amount 参数 |
是 |
gameOrderId | 游戏订单号,由游戏生成并管理。服务端支付回调会回传,游戏需进行唯一性校验,防止重复下发商品给玩家。字符串类型,50个字符内。对应服务端支付回调的out_trade_no 参数 |
是 |
notifyExt | 额外参数,游戏的透传参数可通过此参数传递,支付完成后平台服务端会回调此参数给游戏服务端。对应服务端支付回调的notify_ext 参数 |
否 |
vipLevel | vip等级,数字格式 ,如果游戏没有vip等级则传"0" |
是 |
paySignType | 签名类型,游戏服务器接收回调通知签名方式,需要游戏传递:md5/rsa | 是 |
notifyURL | 1.通过该值能在客户端动态传递服务端支付回调地址;2.若您在客户端传递了该地址,则支付完成后会通过此地址回调支付结果;3.若您同时也在星云后台配置了支付回调地址,会优先回调客户端传递的地址;4.需要先配置支付回调可信域名,请前往"星云后台->对接中心->回调配置->支付回调可信域名"进行配置,否则无法回调成功;5.若您在客户端传递了该地址,在游戏包体发布之前,建议您仔细检查该参数是否配置正确,以防止包体发布后支付出现问题 | 否 |
- 支付回调
fycombinePayCallBack
4.6 用户中心(必接)
1.说明
-
需在游戏内的设置界面,放置一个「用户中心」按钮,点击按钮调用此接口
-
调用此接口将弹出用户中心界面
2.调用
FYCombineUserCenterInfo *info = [[FYCombineUserCenterInfo alloc] init];
info.playerId = @"1";
info.playerName = @"角色1";
info.playerLevel = @"1";
info.serverId = @"1";
info.serverName = @"xxx";
info.vipLevel = @"1";
[[FYCombine sharedInstance] doUserCenter:info];
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
playerId | 角色id | 是 |
playerName | 角色名 | 否 |
playerLevel | 角色,数字格式 |
否 |
serverId | 区服id,数字格式 |
是 |
serverName | 区服id | 否 |
vipLevel | vip等级,数字格式 ,如果游戏没有vip等级则传"0" |
否 |
4.回调
无
4.7 登出(选接)
1.说明
- 登出 SDK,并回调登出回调给游戏。
2.调用
[[FYCombine sharedInstance] doLogout];
3.参数
无
4.登出回调 fycombineLogoutCallBack
4.8 获取本地化商品信息(选接)
1.说明
-
如果后续有出"官方Apple渠道"、"海外官方Apple渠道"这2个渠道中的任意一个,请对接此接口
-
应用场景1:获取本地化商品信息。当游戏在不同国家或地区发行时,想要展示不同的商品信息,请调用此接口,在回调中接收商品信息;能获取到的什么本地化商品信息,取决于您在苹果后台的本地化商品配置,如果没有配置,则会回调失败或回调空,此时您应该使用原始的商品信息进行展示;在母包阶段,会回调测试用的商品信息用于调试,请在打出渠道包后再核实一下真实的商品信息是否展示正确;应尽量在发起支付提前久一点调用此接口,因为系统需要有一点时间(10秒内)异步去获取商品信息,并应避免重复调用此接口,正确做法:在进入游戏后调用一次此接口,并将获取到的商品信息缓存下来,在用户查看商店时,将缓存下来的商品信息用于展示
-
应用场景2:加速内购拉起。游戏拉起苹果内购比较慢,是由于首次拉起该商品内购时,系统需要时间请求该商品信息,如果想要提高内购拉起速度,请在在进入游戏后调用一次此接口,系统会进行一次内购商品信息获取并缓存下来,后续再拉起商品内购就会很快;如果只是单纯想要提高内购拉起速度,而不需要进行本地化商品展示,则不需要在回调中处理任何逻辑
2.调用
NSArray *products = @[
@"com.feiyu.xxx.product1",
@"com.feiyu.xxx.product2",
@"com.feiyu.xxx.product3",
@"com.feiyu.xxx.product4",
@"com.feiyu.xxx.product5"
];
[[FYCombine sharedInstance] queryLocalProducts:products];
3.参数
参数名 | 说明 | 是否必传 |
---|---|---|
products | 商品 id 列表 | 是 |
4.回调
- 获取本地化商品信息回调
queryLocalProductsCallback
4.9 生命周期(必接)
1.说明
-
在AppDelegate.m(Unity 为UnityAppController.mm)中的相应方法中添加接口代码,如该方法找不到则需自行重写。
-
其中
application:handleOpenURL:
、application:openURL:sourceApplication:annotation:
和application:openURL:options:annotation:
这3个方法如果没有调用,则第三方登录无法跳转回游戏。
2.调用
- application:didFinishLaunchingWithOptions:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[FYCombine sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
return YES;
}
- applicationDidEnterBackground:
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[FYCombine sharedInstance] applicationDidEnterBackground:application];
}
- applicationWillEnterForeground:
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[FYCombine sharedInstance] applicationWillEnterForeground:application];
}
- applicationDidBecomeActive:
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[FYCombine sharedInstance] applicationDidBecomeActive:application];
}
- application:openURL:options:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
[[FYCombine sharedInstance] application:app openURL:url options:options];
return YES;
}
- application:continueUserActivity:restorationHandler:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
[[FYCombine sharedInstance] application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
return YES;
}
- application:didRegisterForRemoteNotificationsWithDeviceToken:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[[FYCombine sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
3.参数
无
4.10 获取配置参数(选接)
1.说明
- 游戏有用到聚合 SDK 的一些配置参数,可以从此处获取。
2.调用
- APP ID
NSString *appId = [[FYCombine sharedInstance] getAppId];
- 获取渠道ID,如果游戏要对渠道做差异化处理时,可以使用此ID作为区分;渠道ID列表,请查看星云平台->对接中心->渠道打包->渠道配置;在母包阶段,Android获取到的渠道ID默认为10000,iOS获取到的渠道ID默认为10001
NSString *channelId = [[FYCombine sharedInstance] getChannelId];
- 设备 ID,此 ID 为 SDK 生成的标识设备的唯一 ID,不是 IDFA 或 AndroidID
NSString *deviceId = [[FYCombine sharedInstance] getDeviceId];
- IDFA,若用户关闭 IDFA 功能,有可能取不到值
NSString *idfa = [[FYCombine sharedInstance] getIDFA];
- 通行证标识,用来标明该渠道用什么通行证进行登录,所有渠道的通行证标识请看渠道版本信息
NSString *passportCode = [[FYCombine sharedInstance] getPassportCode];
- 支付标识,用来标明该渠道用什么支付方式,一般和通行证标识一致,有一些特殊的渠道登录和支付不一致,例如:苹果渠道,登录是飞鱼通行证(feiyu3),支付则是苹果支付(apple),所有渠道的支付标识请看渠道版本信息
NSString paymentCode = [[FYCombine sharedInstance] getPaymentCode];
- 渠道模板标识,用来标明该渠道使用的是哪个渠道模板(一级渠道,在“对接中心-渠道打包-渠道配置”中添加渠道时所选的渠道模板),如果游戏要对不同渠道模板做差异化处理时,可以使用此标识作为区分,例如:针对不同渠道模板进行玩家信息隔离。所有渠道的渠道模板标识请看渠道版本信息
NSString channelTemplateCode = [[FYCombine sharedInstance] getChannelTemplateCode];
5 F&Q
5.1 切换账号的流程是怎样的?
常规的流程:点击用户中心的切换账号 -> 接收到退出回调(logoutCallback) -> 退出到登录首屏 -> 调出登录窗口 -> 登录另一个账号 -> 点击进入游戏 -> 游戏中
非常规的流程:点击用户中心的切换账号 -> 弹出登录窗口 -> 登录另一个账号 -> 接收到登录回调(loginCallback) -> 检测 open_id 变了 -> 退出到登录首屏 -> 检测已有账号登录 -> 点击进入游戏 -> 游戏中
非常规的流程会出现在某些渠道(比如 4399),在游戏中没有执行退出回调,直接呼出登录窗口。那这时候就需要检查 open_id 是否改变,来让游戏重新回到登录首屏。
也就是说,以上这 2 个流程,游戏都要有。
5.2 渠道ID(channel_id)和通行证标识(passport_code)有啥区别?
-
一种通行证标识,可以对应多个渠道ID,渠道ID的颗粒度是最低的。游戏对渠道做区分,通常用渠道ID 即可,这个是最保险的方法。如果只想粗颗粒度的区分不同类型的渠道,则用通行证标识。
-
具体渠道ID的值,可以查看星云后台的 对接中心-渠道打包-渠道配置 。
-
具体通行证标识,可以查看渠道版本信息