更新日期:2024-12-11Objective-C(iOS)接入文档
SMPCQuickSDK.framework 是基础库,QuickChannel.framework 是各个渠道的接⼊实现库
· 游戏接入SDK随带的母包库进行接口检查。
· 在QuickSDK后台添加渠道,配置参数。
· 测试完毕之后使用打包工具生成渠道包
将 SMPCQuickSDK.framework 和⺟包的 QuickChannel.framework 添加到⼯程中,并选择相应的 target,其中 QuickChannel.framework 是动态库添加的时候设置为Embed & Sign,如下图:
· 包含 UnityFramework 动态库特别说明:
.a/.framework/.h/.m等文件 TargetMembership 需要关联到 UnityFramework
.bundle/.cfg/.png等资源文件 TargetMembership 需要关联到 Unity-iPhone
.framework等动态库TargetMembership 须同时关联到关联到 UnityFramework和Unity-iPhone
基础库SMPCQuickSDK.framework为靜态库,TargetMembership只能关联到UnityFramework;
渠道库QuickChannel.framework为动态库,须同时关联到 UnityFramework和Unity-iPhone,但Unity-iPhone必须设置为Embed & Sign, UnityFramework不需要设置为Embed & Sign
· 确保工程Build Setting - Runpath Search Paths添加了@executable_path/Frameworks
· 在Build Settings中将Architectures设置为arm64,项目本身也需要支持arm64
Other Linker Flags添加-ObjC (注意字母O跟C要大写,如果包含UnityFramework 动态库,需要在unityframework里添加-ObjC)
· Device Orientation 中选中游戏兼容的方向。常见配置
· info.plist中添加,以允许http访问
· 游戏版本设置
游戏的Version(CFBundleShortVersionString)和Build(CFBundleVersion)必须保持一致,且使用x.y.z这样的点分式,比如:1.2.1
数字前面不要加0。因为每个渠道更新读取的版本号不一样,设置Version和Build一致才能保证各个渠道更新都正常,如果不愿意这样设置,可以通过生成的调试工程手动出有这样要求的渠道包,要求Version和Build一致的渠道不多,可以在审核不通过后再修改。
首先配置项目信息。
3.1.1 获取实例
类:SMPCQuickSDK
函数:+ (SMPCQuickSDK *)defaultInstance;
功能:获取QuickSDK实例
3.1.2 初始化QuickSDK
类:SMPCQuickSDK
函数:
- (int)initWithConfig:(SMPCQuickSDKInitConfigure *)configure application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
功能:使用productKey,productCode,初始化SDK, 由QuickSDK平台分配,在iOS打包工具上可以看到,打包时需要和iOS打包工具上的选择的产品参数一致。
参数:configure封装了 productKey和 productCode
application: 应用的application, 调用函数的参数原封不动的传入即可
launchOptions:应用的launchOptions, 调用函数的参数原封不动的传入即可。
说明:该接口需要在应用加载完成回调中调用,即(建议在初始化系统window之后再调用SDK初始化)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{}
案例:
//初始化 //监听初始化完成事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(smpcQpInitResult:) name:kSmpcQuickSDKNotiInitDidFinished object:nil]; - (void)smpcQpInitResult:(NSNotification *)notify { NSLog(@"%@",notify); //初始化成功,进行下一步流程 } SMPCQuickSDKInitConfigure *cfg = [[SMPCQuickSDKInitConfigure alloc] init]; cfg.productKey = @”09633196”; cfg.productCode = @”50840817638746911281319234382938”; int error = [[SMPCQuickSDK defaultInstance] initWithConfig:cfg application: application didFinishLaunchingWithOptions:launchOptions]; if (error != 0) { NSLog(@"不能启动初始化:%d",error); } //大部分渠道会处理自己内部的初始化失败,如果收到渠道初始化失败,游戏需要去处理,通常的做法让界面处于等待,等0.5s再初始化一次,如果失败就提示检查网络退出游戏
3.2.1 登录接口(必接)
类名:SMPCQuickSDK
函数:- (int)login;
功能:打开登录界面,进入用户登陆流程。
返回值:返回0说明调用接口成功,其他值参考说明。
收到登录成功通知kSmpcQuickSDKNotiLogin后,取得返回值userInfo,取得用户uid、用户昵称/用户名和user_token,也可直接使用接口获取uid,userToken,昵称,参考demo,(可选内容)使用该user_token从服务器获取用户信息。随带Demo中有相关实现。该uid是渠道sdk提供的用户唯一标识,不同渠道间的uid可能发生重叠。
案例:
5..(void)smpcQpLoginResult:(NSNotification *)notify { NSDictionary *userInfo = [notify userInfo]; int error = [userInfo objectForKey:@”error”] intValue]; if (error == 0) { NSString *uid = [[SMPCQuickSDK defaultInstance] userId]; NSString *userNick = [[SMPCQuickSDK defaultInstance] userNick]; NSString *user_token = [[SMPCQuickSDK defaultInstance] userToken]; } }
3.2.2 注销接口
类名:SMPCQuickSDK
函数: - (int)logout;
功能:主动注销当前用户。
返回值:返回0说明调用接口成功,其他值参考说明。
注意:调用该接口将引起QuickSDK发出一个注销通知kSmpcQuickSDKNotiLogout,游戏开发者收到注销通知后走下一步流程,比如回到游戏登录界面,再调用登录。
3.2.3 用户uid
类名:SMPCQuickSDK
函数:- (NSString *)userId;
功能:获取最后登录用户uid,通常在收到登录通知回调中调用,该uid是渠道sdk提供的用户唯一标识,不同渠道间的uid可能发生重叠。
返回值:最后登录用户的uid,可能为空,在没有收到登录通知时可能已经有值,不能作为判断当前是否有用户登录游戏的依据。
3.2.4 用户userToken
类名:SMPCQuickSDK
函数:- (NSString *)userToken
功能:获取最后一次登录用户的userToken,用于到服务器验证用户。
返回值:最后一次登录用户的userToken
3.2.5 用户昵称
类名:SMPCQuickSDK
函数:- (NSString *)userNick;
3.2.6 更新角色信息(必接)
类名:SMPCQuickSDK
函数:- (void)updateRoleInfoWith:(SMPCQuickSDKGameRoleInfo *)info isCreate:(BOOL)isCreate;
功能:向QuickSDK提交角色信息。
参数:info 角色信息对象,参考类SMPCQuickSDKGameRoleInfo,isCreate表示是否为刚刚创建的角色
返回值:
3.3.1 充值(必接)
类名:SMPCQuickSDK
函数:- (int)payOrderInfo:(SMPCQuickSDKPayOrderInfo *)orderInfo
roleInfo:(SMPCQuickSDKGameRoleInfo *)roleInfo;
功能:订单支付
参数:orderInfo 订单信息
roleInfo 玩家角色信息
说明:orderInfo中
goodsId //商品ID IAP时为苹果开发者后台配置的商品id,非IAP时随意,必填
productName //应该为一个通用名称,不包含商品个数,如“勾玉”,“元宝”,必填
cpOrderID //游戏订单号,必填
count //商品数量,如@"60",必填
amount //总价(元), 如@"6",必填
callbackUrl //如果后台没有配置充值回调地址,callbackUrl将作为充值回调地址。选填
extrasParams //透传字段,服务器回调时原样传递, 选填。
productDesc //商品描述,选填。若游戏未填写则默认QuickSDK使用“数量+商品名称“拼接(如果数量为1,使用商品名称),游戏传入不为空字符串则以游戏传入参数值为准
异步充值,用户完成充值操作后会发送充值结果通知。kSmpcQuickSDKNotiRecharge,sdk客户端通知的结果仅供参考,很多渠道没有客户端充值结果回调,以服务器端同步为准。
3.4.1 AppDelegate事件调用 (必接:只针对原生Objective-C)
说明:对能够使用OC接口的开发者这些回调应该比较容易添加,为了减轻大部分开发者负担,Unity3D和Cocos2d-x的游戏不用接入下面事件调用的代码,打包工具将会自动添加。打包工在Unity3d和cocos2d-x默认系统生命周期delegate文件中添加如下代码,进行并不严格的排重,如果开发者修改了默认的delegate文件将导致添加失败。
- (void)applicationWillResignActive:(UIApplication *)application { [[SMPCQuickSDK defaultInstance] applicationWillResignActive:application]; } - (void) applicationDidEnterBackground:(UIApplication *)application { [[SMPCQuickSDK defaultInstance] applicationDidEnterBackground:application]; } - (void) applicationWillEnterForeground:(UIApplication *)application { [[SMPCQuickSDK defaultInstance] applicationWillEnterForeground:application]; } - (void) applicationDidBecomeActive:(UIApplication *)application { [[SMPCQuickSDK defaultInstance] applicationDidBecomeActive:application]; } - (void) applicationWillTerminate:(UIApplication *)application { [[SMPCQuickSDK defaultInstance] applicationWillTerminate:application]; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [[SMPCQuickSDK defaultInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { [[SMPCQuickSDK defaultInstance] application:application didFailToRegisterForRemoteNotificationsWithError:error]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo{ [[SMPCQuickSDK defaultInstance] application:application didReceiveRemoteNotification:userInfo]; } -(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window { [[SMPCQuickSDK defaultInstance] application:application supportedInterfaceOrientationsForWindow:window]; return UIInterfaceOrientationMaskAll; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{ [[SMPCQuickSDK defaultInstance] openURL:url application:application]; return YES; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ [[SMPCQuickSDK defaultInstance] openURL:url sourceApplication:sourceApplication application:application annotation:annotation]; return YES; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options{ [[SMPCQuickSDK defaultInstance] openURL:url application:app options:options]; return YES; }
3.4.2 显示浮动菜单
类名:SMPCQuickSDK
函数:- (void)showToolBar:(SMPC_QUICK_SDK_TOOLBAR_PLACE)place;
功能:显示浮动工具栏。若渠道无此对应接口,调用无效。
案例:当用户登录成功后调用
[[SMPCQuickSDK defaultInstance] showToolBar:SMPC_QUICK_SDK_TOOLBAR_TOP_LEFT];
3.4.3 隐藏浮动菜单
类名:SMPCQuickSDK
函数:- (void)hideToolBar;
功能:隐藏浮动菜单。若渠道无此对应接口,调用无效。
案列:必要时隐藏。
3.4.4 进入用户中心
类名:SMPCQuickSDK
函数:- (int)enterUserCenter;
功能:进入用户中心。若渠道无此对应接口,调用无效。
3.4.5 进入客服中心
类名:SMPCQuickSDK
函数:- (int)enterCustomerCenter;
功能:进入客服中心。
若渠道无此对应接口,直接调用会返回接口不支持的错误码。
3.4.6 进入BBS
类名:SMPCQuickSDK
函数: - (int)enterBBS;
功能:进入渠道BBS。
若渠道无此对应接口,直接调用会返回接口不支持的错误码。
3.4.7 是否支持指定方法
类名:SMPCQuickSDK
函数:-(BOOL)isFunctionTypeSupported:(SMPC_QUICK_SDK_FUNC_TYPE)type;
功能:判断渠道SDK支付支持某个接口,用户中心,客服中心,BBS,暂停等接口不是每个渠道SDK都实现了,所以可以在代码里判断来执行。若渠道无此对应接口,调用无效,会返回接口不支持的错误码。
- (int)channelType; //渠道唯一标识 #pragma mark 平台基本信息 - (NSString *)getConfigValue:(NSString *)key; //获取quick后台配置的自定义参数 - (NSString *)getDeviceID; //获取设备id
名称:kSmpcQuickSDKNotiInitDidFinished
说明:成功调用初始化接口后,异步。收到该通知后通过错误码判断渠道SDK是否初始化成功。
SMPC_QUICK_SDK_ERROR_NONE、SMPC_QUICK_SDK_ERROR_INIT_FAILED。 NSDictionary *userInfo = notify.userInfo; int errorCode = [userInfo[kSmpcQuickSDKKeyError] intValue]; switch (errorCode) { case SMPC_QUICK_SDK_ERROR_NONE: { //初始化成功,进行下一步流程 } break; case SMPC_QUICK_SDK_ERROR_INIT_FAILED: default: { //初始化失败 } break; }
4.2 登录成功通知
名称:kSmpcQuickSDKNotiLogin
说明:渠道SDK有用户登录成功时发出。如果游戏已经存在正在游戏的用户,收到该通知时认为是切换账号,需要开发者注销游戏内用户,使用新用户信息进入游戏。
名称:kSmpcQuickSDKNotiLogout
说明:这有2种情况
· 用户从渠道SDK内的用户管理界面注销成功时会发出该通知。
· 游戏调用QuickSDK的用户注销接口后会收到该通知,根据错误码判断注销成功或失败,一般都认为是注销成功,不用考虑失败。
名称:kSmpcQuickSDKNotiRecharge
说明:成功调用QuickSDK充值接口后会收到该通知。
通知结果的3种情况根据错误码来判断(SMPC_QUICK_SDK_ERROR_NONE、SMPC_QUICK_SDK_ERROR_RECHARGE_FAILED、SMPC_QUICK_SDK_ERROR_RECHARGE_CANCELLED)。
因为大部分渠道回调都以服务器为准,该结果仅供客户端参考,实际结果以服务器端同步为准。
通知userInfo中信息说明:
//错误码 int error = [[userInfo objectForKey:kSmpcQuickSDKKeyError] intValue]; //QuickSDK订单号、cp下单时传入的订单号 NSString *orderID = userInfo[kSmpcQuickSDKKeyOrderId]; NSString *cpOrderID = userInfo[kSmpcQuickSDKKeyCpOrderId];
名称:kSmpcQuickSDKNotiPauseOver
说明:不用监听,某些渠道SDK暂停结束时发出通知。
类名:SMPCQuickSDK
函数:- (NSDictionary *)realNameInfo;
功能:获取渠道实名认证信息
返回值类型:字典
注:
kSmpcQuickSDKKeyRealName:是否实名认证。YES:已认证;NO:未认证
kSmpcQuickSDKKeyRealAge:年龄如果渠道没有返回默认为-1
kSmpcQuickSDKKeyRealResumeGame:渠道实名认证失败之后是否可以继续游戏。YES:可以;NO:不可以;渠道没返回默认YES
kSmpcQuickSDKKeyRealOther:预留字段默认为空字符串
类名:SMPCQuickSDK
函数:- (int)realAuth;
功能:调起渠道实名认证界面
若渠道无此对应接口,直接调用会返回接口不支持的错误码。
类名:kSmpcQuickSDKNotiRealAuth
说明:实名认证成功后会收到该通知
通知 userInfo 中信息说明:
kSmpcQuickSDKKeyRealName:是否实名认证。YES:已认证;NO:未认证
kSmpcQuickSDKKeyRealAge: 年龄如果渠道没有返回默认为-1
kSmpcQuickSDKKeyRealResumeGame: 渠道实名认证失败之后是否可以继续游戏YES:可以;NO:不可以;渠道没返回默认YES
kSmpcQuickSDKKeyRealOther:预留字段默认为空字符串
QuickSDK 初始化接口,用户接口,充值统一都支持。所有提供的接口都可以直接调用,有些可能会因为渠道不支持而调用无效。
李先生:13880511661
QQ:48157910
赵先生:15390049857
QQ:1077535763
孙女士:13551010407
QQ:1799614139
QQ群:698731538