(更新于:2019-08-01)
需要上线AppStore游戏,SDK内购集成说明(如果企业签名,可跳过此步骤)
1.登录 developer.apple.com 创建一个明确的AppID,以便有IAP(In-App Purchase)权限
2.去描述文件(Provisioning Profiles)页生成文件,开发版Dev、内测版AdHoc、发布版Dis
3.登录 ITC(itunesconnect.apple.com),在【协议、税务和银行业务】中完善收款账户信息
4.在【我的App】中创建一个应用,新建几个内购项目(注意要上传屏幕快照)。然后回到App里面,出现了【App 内购买项目】选项,将需要的内购添加进去。默认的内购项目ID为:[QFPay sharedInstance].iapProducts = @[@"Game.CNY01", @"Game.CNY06", @"Game.CNY18", @“Game.CNY88”];需要注意配置的内购项目ID与账号中配置的一致
5.游戏在AppStore审核中时,服务器设置[QFUserInfo sharedInstance].isInReview 值为YES,只显示在ITC中注册过的游戏道具;审核通过后,值为NO,并开启所有道具显示。在确保内购功能可用后,再将SDK集成到游戏
SDK介绍
- iOS SDK用于iOS游戏联运,主要提供用户系统、支付系统、游戏攻略、游戏礼包等功能
- iOS SDK适用于iOS操作系统8.0以上
注意事项
- 接口参数大小写敏感
- 编码格式均为 UTF-8
前期准备
1.SDK接入技术人员仔细阅读该对接文档
2.CP提供支付回调地址(接入 SDK 对接文档【服务端】)
3.获取平台配置参数:
字段 | 描述 |
---|---|
appId | 游戏ID |
clientId | SDK ID 标识此次对接demo的sdk |
clientKey | SDK key 此次对接demon的渠道key |
sdkVersion | SDK 此次对接使用的SDK版本号 |
接入步骤
一、iOS SDK导入 、相关配置
1.将SDKDemo中SDK中的内容拖动到项⽬目中,SDK中内容包括如图:
2.全局头文件设置:将obfuscate.h添加到pch文件中,在targets中配置好pch
3.URL Scheme设置:在targets——info——URL Types 中新增:returnapp—djsdk{QF_APP_ID},其中 {QF_APP_ID}为您申请的SDK 对应的appId,参考图:
4.Enable Bitcode设置:在targets——Build Settings——Enable Bitcode 选项设置为NO
5.WIFI权限配置:iOS12以后获取wifi名称,在Capabilites中打开WIFI权限配置
6.设置Info.plist
(1)用户长按文本框时,复制粘贴按钮显示中的文字,需增加:
7.如果编译有错误,则需要在:targets——Build Settings——Other Linker Flags 添加: -ObjC
二、接口调用
1. SDK初始化、支付组件初始化,设置QFUIDelegate代理以及注册对应函数
- UI组件初始化(在 application:didFinishLaunchingWithOptions: 中初始化UI组件)
[[QFUI sharedInstance] registerWithAppId:appId
clientId:clientId
clientKey:clientKey
delegate:self];
[[QFPay sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
- 支付组件初始化(在 application:didFinishLaunchingWithOptions: 中初始化支付组件)
[QFPay sharedInstance].iapProducts = @[@"内购产品ID1",
@"内购产品ID2",
@"内购产品ID3",
@"内购产品ID4"];
- 注册对应函数、同时实现
对应方法
//注册支付回调函数
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [[QFPay sharedInstance] application:application handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nonnull id)annotation
{
return [[QFPay sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [[QFPay sharedInstance] application:app openURL:url options:options];
}
//注册UI事件
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[QFUI sharedInstance] applicationDidEnterBackground];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[QFPay sharedInstance] applicationWillEnterForeground:application];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[QFUI sharedInstance] applicationDidBecomeActive];
}
//注册、登录结果回调函数
-(void)qfOnLoginSuccess
{
NSLog(@"==== qfOnLoginSuccess, userId=%@, userToken=%@", [QFUserInfo sharedInstance].userId, [QFUserInfo sharedInstance].userToken);
}
//支付成功回调函数
-(void)qfOnPaymentSuccess:(float)money infoDict:(NSDictionary *)infoDict
{
NSLog(@"==== qfOnPaymentSuccess:%.2f infoDict=%@", money, infoDict);
}
//支付失败回调函数
-(void)qfOnPaymentFailure:(NSInteger)failureType message:(NSString *)message infoDict:(NSDictionary *)infoDict
{
NSLog(@"==== qfOnPaymentFailure:[%d]%@ infoDict=%@", failureType, message, infoDict);
}
2. SDK登录-应用中调用显示登录面板
//调用登录面板
[[QFUI sharedInstance] showLoginPanel];
注意:1.登录成功后,会调⽤用 QFUIDelegate 的 qfOnLoginSuccess 函数
2.客户端可获取到⽤用户的信息:
[QFUserInfo sharedInstance].userId 用户ID
[QFUserInfo sharedInstance].userToken 用户Token
3. 创角/角色升级
//登录并创建角色成功后,以及角色等级升级,需要调用此API及时同步角色信息
[QFHttpRequest httpAddUserRole:@"角色ID"
roleName:@"角色名称"
roleRank:@"传角色等级"
zoneId:@"区服ID"
zoneName:@"区服名称"
success:^(NSURLSessionDataTask *task, NSDictionary *respDict) {
if ([[respDict objectForKey:@"code"] integerValue]==1) {//成功
NSLog(@"%@", respDict);
NSString *msg = [respDict objectForKey:@"msg"];
//更新角色信息成功
}else{
NSString *msg = [respDict objectForKey:@"msg"];
//SDK会话超时
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
//更新角色信息失败回调
}];
4. 游戏购买道具支付
[[QFUI sharedInstance] showPayView:money
infoDict:@{
@"server":@"测试服务器",//必需,游戏商(CP)游戏服务器信息
@"productName":@"ios专用道具",//必需,产品名字
@"productDesc":@"该道具仅能在ios下购买",//必需,产品描述
@"role":@"midfar",//必需,角色ID
@"attachString":@"20170221",//必需,CP扩展参数,建议为英文与数字,CP用于校验此订单合法性
@"orderId":@"100123450012",//可选,CP的订单号
@"productId":@"Game.CNY01"//必须,对应内购产品ID
}];
注意:1.购买成功后,会调⽤用 QFUIDelegate 的 qfOnPaymentSuccess 函数;
2.购买成功后,然后客户端查询服务器状态,成功后更更新相应的道具
3.如果购买失败,或者用户取消了购买,则会调用 qfOnPaymentFailure 函数。
三、FAQ
1.初始化提示接口校验不通过
检查初始化参数(appId、clientId、clientKey、sdkVersion)是否配置正确
2.暂无内购
检查内购产品ID是否配置正确
检查当前测试手机登录的沙箱账号是否是BundleId对应的沙箱账号
3.集成SDK后只有内购
使用本SDK集成成功后,根据上架需要制定支付方案
上架期间只有内购购买
如果需求需要测试第三方支付,双方沟通-配置对应测试账号(使用第三方支付时候屏幕上会显示浮标)
4.支付成功后道具未到账
检查服务端对应的clientKey