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的组成,如图所示

ios-sdk-content

HuoSDK.bundle:sdk所使用的资源

huoSDK.framework:sdk的静态库和头文件

HuoSdkConfig.plist:SDK的配置文件

ThirdLibs:SDK依赖的一些第三方(导入工程使用,如果原有工程已有对应库可选择性导入,避免冲突)

1.3.SDK集成和配置说明

1.将SDK拖入工程主目录下

ios-sdk-add

2.TARGETS->Build Settings->other linker :-ObjC 和-lsqlite3.0

ios-sdk-otherlinker

3.TARGETS->Build Settings->Enable Bitcode设置为No

4.在Preprocessor Macros 设置HAVE_CONFIG_H(在build Settings直接搜索即可)

ios-sdk-haveconfig

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类型

ios-sdk-param-config

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,如上图一般直接复制到下图中位置

ios-sdk-schemes-com

二.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类型

崩溃日志:

ios-sdk-fqa1

2.错误原因:重复导入SDK和配置文件(易接一般犯错)本身封装了小氪sdk,然后又在项目中导入小氪sdk,需要删除其中一个的关联(找不到两个就删掉能看到的那个)

ios-sdk-fqa2

3.错误原因:在登录成功的回调中设置了显示浮点,未设置对应的横竖屏需要在sdk配置文件中设置对应的横竖屏

ios-sdk-fqa3

4.启动sdk,初始化时莫名奔溃,且定位到HBRSAHandler类的importKeyWithType方法,出现野指针的情况

ios-sdk-fqa4

解决方法:openssl.framework 函数库冲突了,项目中可能有其他库里面也包含了,直接删掉sdk的openssl.framework库

5.openudid文件报错

ios-sdk-fqa5

解决方法:

xcode->build phases 搜索openudid, 点击右边的 Compiler Flags ,添加 -fno-objc-arc

ios-sdk-fqa5-solution

6.报错:Cannot use ‘@try’ with Object-C exceptions disabled

ios-sdk-fqa6

解决办法:

Build Settings -> 搜索 Enable Objective-C Exceptions。改为YES

7.wxsdk库报错

ios-sdk-fqa7.1

ios-sdk-fqa7.2

解决办法:

删掉wxsdk、SPaySDK、libqrencode 这几个文件夹

8.登录后奔溃,检查后排除上面第3点问题,发现登录后sessionid 为空,cp那边直接调用sessionid导致空字符串奔溃

ios-sdk-fqa8

解决办法:

登录之后取的sessionid这个key改为token

ios-sdk-fqa8-solution

results matching ""

    No results matching ""