(更新于: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中内容包括如图:

add_sdk_ios

2.全局头文件设置:将obfuscate.h添加到pch文件中,在targets中配置好pch

3.URL Scheme设置:在targets——info——URL Types 中新增:returnapp—djsdk{QF_APP_ID},其中 {QF_APP_ID}为您申请的SDK 对应的appId,参考图:

url_scheme_ios

4.Enable Bitcode设置:在targets——Build Settings——Enable Bitcode 选项设置为NO

5.WIFI权限配置:iOS12以后获取wifi名称,在Capabilites中打开WIFI权限配置

6.设置Info.plist

​ (1)用户长按文本框时,复制粘贴按钮显示中的文字,需增加: ​ CFBundleLocalizations zh_CN ​ (2)支持http请求,需增加: ​ NSAppTransportSecurityNSAllowsArbitraryLoads

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

results matching ""

    No results matching ""