iOS SDK接入文档2018-5-9
谁来阅读此文档
接入厂商的产品,技术人员,平台技术人员。
保存机制 ——— 首先根据keychian获取(首次安装的肯定没有) ,keychian中无账号数据,则 根据key遍历本地存储记录 遍历存储记录和服务器返回的, 做排同处理(相同账号只保留有密码的那一个)。 在每次登录或注册成功都会将所有用户账号密码数据写入keychian中 !
本文档新加keychian sharing 功能 sdk配置文件中appKeyChian字段为servername 一般以包名开头后加自定义字符即可
如果是上线到appstore,SDK有使用到IDFA,提交审核的时候请注意选上。
勾选详情参照http://www.jianshu.com/p/3ef714214405
本SDK不需要任何第三方支付白名单和第三方支付库依赖!都不需要添加!
为规避苹果第三方检测,第三方支付特从浏览器开启返回应用,不要按手机Home键返回应用,SDK在浏览器页面提供了返回按钮!!!
已经集成过老版本的注意
1 替换Framework文件 按照要求填写sdk中plist文件中的 apple_id ,apple_id为苹果注册APP id以前的参数废弃不用
2 删掉有关第三方支付的白名单和相关第三方支付库(删除info.plis中LSApplicationQueriesSchemes的相关第三方支付白名单)
3 删掉ThirdLibs文件夹
4需在info.plist中添加相册访问权限
不懂就把两个都加上把(特别是Xcode 9 开发的同学记得仔细看下)
加上
NSPhotoLibraryAddUsageDescription
和
NSPhotoLibraryUsageDescription
(后面一定要加上应用获取相册权限的描述) 原因如下:
相册权限选择介绍
https://stackoverflow.com/questions/46344159/whats-difference-between-nsphotolibraryaddusagedescription-and-nsphotolibraryus
NSPhotoLibraryUsageDescriptio 支持iOS8+
NSPhotoLibraryAddUsageDescription 只支持iOS11+
需要加上两个(NSPhotoLibraryUsageDescriptio,
NSPhotoLibraryAddUsageDescription)描述避免崩溃
[如:App
需要您的同意
,
才能访问相册以保存您的注册账号信息
])
5 外部跳转项目协议CP
会提供一个跳转协议的参数,直接复制粘贴
(位置在info.plist中的CFBundleURLTypes中的CFBundleURLSchemes)
以上为接入过
sdk
人员参考
本SDK支持iOS7及以上系统版本,兼容横竖版。
支持armv7 i386 x86_64 arm64
从平台处,获取以下参数,用于对接,配置到sdk的Game_InstallInfo.plist文件中
参数名 | 说明 |
apple_id | 苹果官网注册的apple_id |
isLandscape | 是否横屏,1为横屏,0为竖屏 |
Game_FrameWork.bundle:sdk所使用的资源
GameFramework.framework:sdk的静态库和头文件
Game_InstallInfo.plist:SDK的配置文件
1.将SDK拖入工程主目录下
2.TARGETS->Build Settings->other linker :-ObjC 和-lsqlite3.0
3.TARGETS->Build Settings->Enable Bitcode设置为No
4.在Preprocessor Macros 设置HAVE_CONFIG_H(在build Settings直接搜索即可)
5.TARGETS->Build phases->Link Binary With Libraries链接以下系统库
(1)libz.1.2.5
如果sdk使用了第三方登录,则还需要链接以下库
(2)ImageIO
(3)libicucore
(4)libiconv
(5)libsqlite3
(6)libstdc++删掉其他所有有关第三方支付的库
6.工程info.plist添加以下配置第三方信息需要自行申请
,
实例只供参考
- <key>NSAppTransportSecurity</key>
- <dict>
- <key>NSAllowsArbitraryLoads</key>
- <true/>
- </dict>
- 如果是有第三方登录,还需增加微信,qq,微博的配置,参数请从运营方获取
- ```xml
- <key>CFBundleURLTypes</key>
- <array>
- <dict>
- <key>CFBundleURLSchemes</key>
- <array>
- <string>h1tsdk.com11</string>(跳转协议位置)
- </array>
- </dict>
- <dict>
- <key>CFBundleTypeRole</key>
- <string>Editor</string>
- <key>CFBundleURLName</key>
- <string>weixin</string>
- <key>CFBundleURLSchemes</key>
- <array>
- <string>wx9efca7e13875a222</string>
- </array>
- </dict>
- <dict>
- <key>CFBundleTypeRole</key>
- <string>Editor</string>
- <key>CFBundleURLSchemes</key>
- <array>
- <string>tencent101379012</string>
- </array>
- </dict>
- <dict>
- <key>CFBundleTypeRole</key>
- <string>Editor</string>
- <key>CFBundleURLSchemes</key>
- <array>
- <string>wb1220169449</string>
- </array>
- </dict>
- </array>
7.SDK配置文件Game_InstallInfo.plist说明有且只有下面两个参数
,这些参数不清楚可以询问工作人员
**
注意参数类型一定要都是
String
类型
apple_id:苹果管网注册的应用id
isLandscape:是否横屏,1为横屏,0为竖屏
appKeyChian :keychian
标示一般以包名开头填写后加自定义字符即可
URLSchemes: cp会提供一个叫做跳转协议的参数一般直接复制到下图中位置
注:跳转协议
CP
会提供的,直接粘贴到下图位置
根据Game_InstallInfo.plist的参数,在应用的info.plist配置一个url schemes参数,用于应用的跳转
除上述说明的参数其他无(不修改
)
使用SDK之前,需要#import#<GameFramework/GameFramework.h>
appdelegate方法,需要在AppDelegate.m加入SDK的这个方法
如若不添加此处函数实现,那么从浏览器支付之后回到应用会收不到支付结果
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
- {
- [Game_Api Game_application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
- return YES;
- }
- //iOS10以上使用
- - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
- {
- [Game_Api Game_application:appn openURL:url sourceApplication:nil annotation:nil];
- return YES;
- }
- - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- {
- [Game_Api Game_application:application openURL:url sourceApplication:nil annotation:nil];
- return YES;
- }
只需调用以下代码即可进入SDK的登入流程,当登入成功,SDK会自动关闭SDK页面,并且回调用户信息给游戏。
- [Game_Api Game_showLoginWithCallBack:^(NSDictionary *responseDic) {
- //block激活即是SDK登录成功,这个时候游戏通过block获取用户信息
- NSString *sdk_userid = responseDic[@"userid"];//sdk的用户id
- NSString *sdk_sessionid = responseDic[@"token"];//sdk的sessionid,用于验证登录是否成功
- NSLog(@"userid = %@", sdk_userid);
- NSLog(@"token = %@", sdk_sessionid);
- useridLabel.text = [NSString stringWithFormat:@"userid=%@", sdk_userid];
- sessionLabel.text = [NSString stringWithFormat:@"token=%@", sdk_sessionid];
- }];
//SDK登录接口,只有在登录成功的时候才会激活回调,登录失败则由sdk处理
+ (void)Game_showLoginWithCallBack:(GameMainThreadCallBack)receiverBlock;
//登出接口,当用户在游戏菜单登出成功的时候请调用该方法
+ (void)Game_Logout;
//登出回调接口,有两种情况会激活该block,1.用户在游戏内进行登出,2.用户在SDK的菜单进行登出成功,假如是从SDK发起登出的,请在block激活的时候对游戏进行登出操作
+ (void)addLogoutCallBack:(HuoSDKMainThreadCallBack)receiverBlock;
登出成功之后应该调出SDK的登录窗口
//支付接口
+(void)Game_sendOrderInfo:(NSDictionary*)info failedBlock:(void(^)())failedBlock;
- NSDictionary *orderInfo = @{
- element_cpOrderid:@"testorderid",
- element_serverID:@"testserver",
- element_serverName:@"testserverName",
- element_productID:@“testproductid",
- element_productName:@"testgoods",
- element_productdesc:@"goodsdes",
- element_ext: @"testattach",
- element_productPrice:@“1.0”,
- element_roleID:@"testrole",
- element_roleName:@"testroleName",
- element_currencyName : @"123",
- };
- [Game_Api Game_sendOrderInfo:orderInfo failedBlock:^{
- NSLog(@"payfailed");//支付失败
- }];
参数名 | 说明 |
element_cpOrderid | 游戏使用的订单号 |
element_serverID | 角色所在的serverid |
element_serverName | 服务器名 |
element_productID | 商品id |
element_ext | 扩展参数,可选 |
element_productPrice | 商品金额(单位:元) 建议传入整数,可以保留两位小数 |
element_roleID | 角色id |
element_roleName | 角色名字 |
element_productName | 商品名字 |
element_productdesc | 商品描述,可选 |
element_currencyName | 货币名,如金币,元宝,钻石等。 |
调用示例
监听支付成功的回调,需要在调用支付之前调用,支付成功之后会返回平台订单号和研发的订单号。
- [Game_Api Game_sendInfoSuccessedCallBlock:^(NSDictionary *responseDic) {
- NSString *orderid = responseDic[@"orderid"];//布咕订单号
- NSString *cporderid = responseDic[@"cpi"]; //cp订单号
- }];
该接口在能获取以下信息的时候再进行设置即可,一般是登录成功之后。
参数说明
参数名 | 类型 | 说明 |
element_serverID | String | 角色所在的serverid |
element_serverName | String | 服务器名 |
element_partyName | String | 公会名字,可选 |
element_roleID | String | 角色id |
element_roleName | String | 角色名字 |
element_roleLevel | String | 角色等级,如果没有,请填@”0” |
element_roleVip | String | VIP等级,如果没有,请填@”0” |
element_roleBalence | String | 角色游戏币余额,请填@”0.0” |
element_dataType | String | 数据类型,1为进入游戏,2为创建角色,3为角色升级,4为退出 |
element_rolelevelCtime | String | 创建角色的时间 时间戳(无则填大等于1的数字) |
element_rolelevelMtime | String | 角色等级变化时间 时间戳(无则填大等于1的数字) |
//设置角色信息
+(void)Game_setRoleInfo:(NSDictionary*)roleInfo;
调用示例
- [Game_Api Game_setRoleInfo:@{element_dataType : @"1",
- element_serverID : @"s1",
- element_serverName : @"testserver",
- element_roleID : @"123",
- element_roleName : @"iOS测试账号",
- element_roleLevel : @1,
- element_roleVip : @3,
- element_roleBalence : @12.3,
- element_partyName : @"testparty",
- element_rolelevelCtime : @"1479196021",
- element_rolelevelMtime : @"1479196736",
- }];
说明:默认为不使用一键登录,如果需要此功能,如下调用
[Game_Api Game_setIsAutoLogin:YES];
[Game_Api Game_showLoginWithCallBack:^(NSDictionary *responseDic) {
NSLog(@”登录成功”);
//block激活即是SDK登录成功,这个时候游戏通过block获取用户信息
}
如出现加载登录界面出现
CPU
过大
[[NSNotificationCenter defaultCenter] postNotificationName:@”endTransFormAnimationWithNotification” object:nil];
***
注:常见错误
1错误原因: 未按照文档填入SDK配置文件参数,类型填入错误!都要填入
String
类型
崩溃日志:
2错误原因:重复导入SDK和配置文件(易接一般犯错)本身封装了布咕
sdk
,然后又在项目中导入布咕
sdk,
需要删除其中一个的关联
(
找不到两个就删掉能看到的那个
)
崩溃日志:
3错误原因:在登录成功的回调中设置了显示浮点,未设置对应的横竖屏 需要在
sdk
配置文件中设置对应的横竖屏
崩溃日志:
4错误原因:填入应用的apple_id没有在管理后台配置,需要配置获取验证参数给后台。客户端只要填入了对的
apple_id
是不会有问题了,验证问题跟客户端无关!!!
错误提示:客户端返回app_id错误