聚合渠道SDK-iOS(OC)

SDK合规指南

聚合渠道SDK合规指南

1 文档修订记录

文档版本 文档更新日期 文档更新内容
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/sdk/server
// 游戏收到此回调的「登录取消」或「登录失败」时,需向用户提供再次登录的按钮,以便用户能重新登录
// 假如在游戏中收到此回调,并且 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/sdk/server
// 此回调只可以用来控制游戏界面显示,例如 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/sdk/server
- (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];
  • 通行证标识,用来标明该渠道用什么通行证进行登录,如果游戏要对不同通行证做差异化处理时,可以使用此标识作为区分,例如:feiyu3、uc、yingyongbao,所有渠道的通行证标识请看渠道版本信息
NSString *passportCode = [[FYCombine sharedInstance] getPassportCode];
  • 支付标识,用来标明该渠道用什么支付方式,一般和通行证代号一致,有一些特殊的渠道登录和支付不一致,例如:苹果渠道,登录是飞鱼通行证(feiyu3),支付则是苹果支付(apple),所有渠道的支付标识请看渠道版本信息
NSString paymentCode = [[FYCombine sharedInstance] getPaymentCode];

5 F&Q

5.1 切换账号的流程是怎样的?

常规的流程:点击用户中心的切换账号 -> 接收到退出回调(logoutCallback) -> 退出到登录首屏 -> 调出登录窗口 -> 登录另一个账号 -> 点击进入游戏 -> 游戏中

非常规的流程:点击用户中心的切换账号 -> 弹出登录窗口 -> 登录另一个账号 -> 接收到登录回调(loginCallback) -> 检测 open_id 变了 -> 退出到登录首屏 -> 检测已有账号登录 -> 点击进入游戏 -> 游戏中

非常规的流程会出现在某些渠道(比如 4399),在游戏中没有执行退出回调,直接呼出登录窗口。那这时候就需要检查 open_id 是否改变,来让游戏重新回到登录首屏。

也就是说,以上这 2 个流程,游戏都要有。

5.2 渠道ID(channel_id)和通行证标识(passport_code)有啥区别?

  • 一种通行证标识,可以对应多个渠道ID,渠道ID的颗粒度是最低的。游戏对渠道做区分,通常用渠道ID 即可,这个是最保险的方法。如果只想粗颗粒度的区分不同类型的渠道,则用通行证标识。

  • 具体渠道ID的值,可以查看星云后台的 对接中心-渠道打包-渠道配置 。

  • 具体通行证标识,可以查看渠道版本信息