iOS免越狱客户端接入
谁来阅读此文档
接入厂商的产品,技术人员,平台技术人员。
注意!!!!
如果上线到AppStore,SDK中有使用到IDFA,提审的时候请注意勾选。勾选详情参照:http://www.jianshu.com/p/3ef714214405
一.SDK集成说明
- 本SDK支持ioS9及以上系统版本
- 本SDK兼容横竖版
- 支持armv7 i386 x86_64 arm64
1.1.获取参数
从平台处,获取以下参数,用于对接,配置到SDK的config.plist文件中
参数名 | 说明 |
---|---|
app_id | 游戏ID |
app_key | 游戏加密密钥 |
client_id | SDK ID 标识此次对接demo的sdk |
client_key | SDKkey 此次对接demo的渠道key |
1.2.SDK的组成,如图所示
HuoSDK.bundle:sdk所使用的资源
huoSDK.framework:sdk的静态库和头文件
HuoSdkConfig.plist:SDK的配置文件
ThirdLibs:SDK依赖的一些第三方(导入工程使用,如果原有工程已有对应库可选择性导入,避免冲突)
1.3.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
(2)CoreGraphics
(3)QuartzCore
(4)AdSupport
(5)CoreFoundation
(6)StoreKit
(7)SystemConfiguration
(8)UIKit
(9)Security
(10)libc++
(11)CoreText
(12)CoreTelephony
(13)CFNetwork
(14)AVFoundation
(15)CoreMotion
(16)CoreLocation
(17)ImageIO
(19)libiconv
(20)libsqlite3
(21)libstdc++
SDK使用到的第三方库,全部放在ThirdLibs文件夹里面删掉其他所有有关第三方支付的库
6.工程info.plist添加以下配置以下信息供参考,详细见demo info.plist
//获取位置权限配置
<key>NSLocationAlwaysUsageDescription</key>
<string>是否允许此App永久访问你的位置?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>是否允许此App在使用期间访问你的位置?</string>
//相册相关权限配置
<key>NSPhotoLibraryAddUsageDescription</key>
<string>是否允许保存照片到相册</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>在编辑个人资料时,是否允许可从相册中选择</string>
//iOS14获取IDFA权限配置
<key>NSUserTrackingUsageDescription</key>
<string>我们需要使用您的广告追踪权限来追踪广告</string>
//网络设置
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
//白名单配置
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>alipay</string>
<string>wechat</string>
<string>safepay</string>
<string>uppaysdk</string>
<string>uppaywallet</string>
<string>uppayx1</string>
<string>uppayx2</string>
<string>uppayx3</string>
<string>mqqapi</string>
<string>alipayqr</string>
<string>alipays</string>
<string>mqq</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqconnect</string>
<string>mqqopensdkapi</string>
<string>mqqopensdkapiV2</string>
<string>mqzoneopensdk</string>
<string>wtloginmqq</string>
<string>wtloginmqq2</string>
</array>
7.SDK配置文件HuoSdkConfig.plist说明,这些参数可从小氪获得注意参数类型一定要都是String类型
appID:填写从平台获取的app_id
appKey:appid对应的key
mainURL:sdk对应服务器的域名,注意要加上/,一般不需要修改
CHANNEL_URL:域名,一般不需要修改
isLandscape:是否横屏,1为横屏,0为竖屏一定要结合接入游戏横竖屏实际配置
clientID:填写从平台获取的client_id
clientKey:填写从平台获取的client_key
agentgame:渠道名,默认为default,一般不需要修改
isShowInviteView:是否弹出邀请码的界面,默认是0。
URLSchemes: 对接SDK的时候对应参数会给到。一般为‘h’+‘域名’+‘appid’+‘clientID’如:’hbaidu.com22’,假如未申请域名,域名位置替换成ip,如上图一般直接复制到下图中位置
二.SDK接口说明
appdelegate方法,需要在AppDelegate.m加入SDK的这个方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
[HuoSDKApi huosdk_application::application openURL:url sourceApplication:sourceApplication annotation:annotation];
return YES;
}
//iOS10以上使用
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
[HuoSDKApi huosdk_application::app openURL:url sourceApplication:nil annotation:nil];
return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
[HuoSDKApi huosdk_application::application openURL:url sourceApplication:nil annotation:nil];
return YES;
}
2.1.登录
只需调用以下代码即可进入SDK的登入流程,当登入成功,SDK会自动关闭SDK页面,并且回调用户信息给游戏。
//SDK登录接口,只有在登录成功的时候才会激活回调,登录失败则由sdk处理
[HuoSDKApi 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];
//登录成功之后调用浮点按钮
[HuoSDKApi showFloatView:nil]/*@{key_isLeft : @YES,
key_centerY : @100.0
}]*/;
}];
//SDK登录接口,只有在登录成功的时候才会激活回调,登录失败则由sdk处理
+(void)showLoginWithCallBack:(HuoSDKMainThreadCallBack)receiverBlock;
//如出现加载登录界面出现CPU过大,需要在调用登录方法获取登录验证结果处发送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@”endTransFormAnimationWithNotification” object:nil];
2.2.登出
//登出接口,当用户在游戏菜单登出成功的时候请调用该方法
+ (void)logout;
//登出回调接口,有两种情况会激活该block,1.用户在游戏内进行登出,2.用户在SDK的菜单进行登出成功,假如是从SDK发起登出的,请在block激活的时候对游戏进行登出操作
+ (void)addLogoutCallBack:(HuoSDKMainThreadCallBack)receiverBlock;
登出成功之后应该调出SDK的登录窗口
2.3.浮点
浮点,在登录成功左后调用,如果是浮点已经存在,调用此方法是再次显示,参数为nil即可。
默认是在左侧中间,超出边界会默认在边上
@key_centerY;//浮点初始化的中心y轴位置
@key_isLeft;//浮点初始化在屏幕左边还是右边
+ (void)showFloatView:(NSDictionary *)floatViewInfo; 调用示例
key_centerY;//浮点初始化的中心y轴位置 key_isLeft;//浮点初始化在屏幕左边还是右边
[HuoSDKApi showFloatView:@{key_isLeft : @YES,
key_centerY : @100.0
}];
//如果在某些场景有必要隐藏浮点(例如战斗场景),可以调用这个方法。
+(void)hiddenFloat;
2.4.支付接口
//支付接口
+ (void)buy:(NSDictionary *)info failedBlock:(void (^)())failedBlock;
NSDictionary *orderInfo = @{
key_cpOrderid:@"testorderid",
key_serverID:@"testserver",
key_serverName:@"testserverName",
key_productID:@“testproductid",
key_productName:@"testgoods",
key_productdesc:@"goodsdes",
key_ext: @"testattach",
key_productPrice:@“1.0”,
key_roleID:@"testrole",
key_roleName:@"testroleName",
};
[HuoSDKApi buy:orderInfo failedBlock:^{
NSLog(@"payfailed");//支付失败
}];
参数名 | 说明 |
---|---|
key_cpOrderid | 游戏使用的订单号 |
key_serverID | 角色所在的serverid |
key_serverName | 服务器名 |
key_productID | 商品id |
key_ext | 扩展参数,可选 |
key_productPrice | 商品金额(单位:元) 建议传入整数,可以保留两位小数 |
key_roleID | 角色id |
key_roleName | 角色名字 |
key_productName | 商品名字 |
key_productdesc | 商品描述,必填 |
调用示例
监听支付成功的回调,需要在调用支付之前调用,支付成功之后会返回平台订单号和研发的订单号。
[HuoSDKApi addPaySuccessedCallback:^(NSDictionary *responseDic) {
NSString *orderid = responseDic[@"orderid"];//小氪订单号
NSString *cporderid = responseDic[@"cporderid"]; //cp订单号
}];
2.5.设置角色信息接口
该接口在能获取以下信息的时候再进行设置即可,一般是登录成功之后。
参数说明
参数名 | 类型 | 说明 |
---|---|---|
key_serverID | String | 角色所在的serverid |
key_serverName | String | 服务器名 |
key_partyName | String | 公会名字,可选 |
key_roleID | String | 角色id |
key_roleName | String | 角色名字 |
key_roleLevel | int | 角色等级,如果没有,请填0 |
key_roleVip | int | VIP等级,如果没有,请填0 |
key_roleBalence | float | 角色游戏币余额,请填0.0 |
key_dataType | String | 数据类型,1为进入游戏,2为创建角色,3为角色升级,4为退出 |
key_rolelevelCtime | String | 创建角色的时间 时间戳(无则填大等于1的数字) |
key_rolelevelMtime | String | 角色等级变化时间 时间戳(无则填大等于1的数字) |
key_currencyName | String | 货币名,如金币,元宝,钻石等。 |
//设置角色信息
+(void)setRoleInfo:(NSDictionary *)roleInfo
调用示例
[HuoSDKApi setRoleInfo:@{key_dataType : @"1",
key_serverID : @"s1",
key_serverName : @"testserver",
key_roleID : @"123",
key_roleName : @"iOS测试账号",
key_roleLevel : @1,
key_roleVip : @3,
key_roleBalence : @12.3,
key_partyName : @"testparty",
key_rolelevelCtime : @"1479196021",
key_rolelevelMtime : @"1479196736",
}];
FAQ-常见错误
1.错误原因: 未按照文档填入SDK配置文件参数,类型填入错误!都要填入String类型
崩溃日志:
2.错误原因:重复导入SDK和配置文件(易接一般犯错)本身封装了小氪sdk,然后又在项目中导入小氪sdk,需要删除其中一个的关联(找不到两个就删掉能看到的那个)
3.错误原因:在登录成功的回调中设置了显示浮点,未设置对应的横竖屏需要在sdk配置文件中设置对应的横竖屏
4.启动sdk,初始化时莫名奔溃,且定位到HBRSAHandler类的importKeyWithType方法,出现野指针的情况
解决方法:openssl.framework 函数库冲突了,项目中可能有其他库里面也包含了,直接删掉sdk的openssl.framework库
5.openudid文件报错
解决方法:
xcode->build phases 搜索openudid, 点击右边的 Compiler Flags ,添加 -fno-objc-arc
6.报错:Cannot use ‘@try’ with Object-C exceptions disabled
解决办法:
Build Settings -> 搜索 Enable Objective-C Exceptions。改为YES
7.wxsdk库报错
解决办法:
删掉wxsdk、SPaySDK、libqrencode 这几个文件夹
8.登录后奔溃,检查后排除上面第3点问题,发现登录后sessionid 为空,cp那边直接调用sessionid导致空字符串奔溃
解决办法:
登录之后取的sessionid这个key改为token