提交 1abafc85 作者: 陈晨

ios Documentation

上级 671c2acb
No preview for this file type
## ZYouSDK V1.0.0文档接入使用
## ZYouSDK V1.0.0文档接入使用
[目录](#sec1)
    1 [对接说明](#sec1)
    2 [参数说明](#sec2)
    3 [对接SDK](#sec3)
    4 [初始化SDK](#se4)
    5 [登录](#sec5)
               [接口参数](#sec5.1)
               [登录调用示例](#sec5.2)
    6 [调起支付页面](#sec6)
               [参数说明](#sec6.1)
               [调用示例](#sec6.2)
               [下单支付字段说明](#sec6.2)
    7 [支付回调通知](#sec7)
    8 [角色上报](#sec8)
               [参数说明](#sec8.1)
               [调用示例](#sec8.2)
    9 [退出登录](#sec9)
               [调用示例](#sec9.1)
    10 [服务端登录验证接口](#sec10)
#### 1、对接说明 <a name="sec1"></a>
&nbsp;&nbsp; 1.1、此sdk只支持iOS9.0以上版本
&nbsp;&nbsp; 1.2、此sdk支持横竖屏
&nbsp;&nbsp; 1.3、所有SDK功能在ZYouManager类中,可通过初始化获取改类对象,后续所有更新功能都调用这个类中方法完成
&nbsp;&nbsp; 1.4、此sdk适用于需上架到App Store的应用
### 2、参数说明<a name="sec2"></a>
> **参数说明**:
| 参数名 | 说明 |
|:--------| -------------:|
| game_id | 游戏唯一标识,由平台方提供 |
|game_secret|服务端对接时会用到,由平台方提供|
> **内购说明**:
支持内购cp方需要提供内购的商品列表
cp测试内购需使用平台方提供的Bundle Identifier
### 3、对接SDK<a name="sec3"></a>
&nbsp;&nbsp; 3.1、从平台处获取对接SDK
&nbsp;&nbsp; 3.2、手动集成
&nbsp;&nbsp;&nbsp;&nbsp; 3.2.1 将ZYouSDKFramework-iOS文件夹直接添加进工程,ZYouSDKFramework-iOS 文件夹中包含ZYouSDK,ZYSDKConfig,ZYouBundle,zyLocalizable.strings,ZYGoogleLogin.h 和ZYGoogleLogin.m
&nbsp;&nbsp;&nbsp;&nbsp; 3.2.2 此sdk依赖GoogleSignIn、Facebook、APPsFlyerLib,通过 project - package dependencies 添加
&nbsp;&nbsp;&nbsp;&nbsp; 3.2.3 添加 GoogleSignIn 搜索 https://github.com/google/GoogleSignIn-iOS 进行添加
![ios_overseas1.png](https://zyapk.zwnet.cn/ios_overseas/ios_overseas1.png)
&nbsp;&nbsp;&nbsp;&nbsp; 3.2.4 添加 Facebook 搜索 https://github.com/facebook/facebook-ios-sdk 进行添加
![ios_overseas2.png](https://zyapk.zwnet.cn/ios_overseas/ios_overseas2.png)
&nbsp;&nbsp;&nbsp;&nbsp; 3.2.5 添加 APPsFlyerLib 搜索 https://github.com/AppsFlyerSDK/AppsFlyerFramework 进行添加
![ios_overseas3.png](https://zyapk.zwnet.cn/ios_overseas/ios_overseas3.png)
&nbsp;&nbsp; 3.3、添加依赖 TARGETS -> Build Phases -> Link Binary With Libraries 下添加 libsqlite3.tbd
&nbsp;&nbsp; 3.4 TARGETS点击项目名称,点击 Info 选项卡,添加NSUserTrackingUsageDescription权限 配置文案如(是否允许xx使用您的IDFA信息,以此来优化您的使用体验)
&nbsp;&nbsp; 3.5、添加IAP
&nbsp;&nbsp; 在TARGETS - Signing & Capabilities 下添加In-App Purchase
&nbsp;&nbsp; 3.6、Xcode开启https请求
&nbsp;&nbsp; 在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary
&nbsp;&nbsp; 在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean ,值设为 YES
&nbsp;&nbsp; 3.7、Xcode添加白名单
&nbsp;&nbsp; 在 Info.plist 中添加 LSApplicationQueriesSchemes 类型 Array
&nbsp;&nbsp; 在LSApplicationQueriesSchemes下添加以下白名单
```
fbapi
fb-messenger-share-api
```
![ios_overseas4.png](https://zyapk.zwnet.cn/ios_overseas/ios_overseas4.png)
&nbsp;&nbsp; 3.8、在Build Settings - Other Linker Flags里面加入-ObjC参数
![example3.png](https://zhangsheng-1300623068.cos.ap-guangzhou.myqcloud.com/example3.png)
&nbsp;&nbsp; 3.9、根据提供的参数在 info.plist 配置 URL types 和 GIDClientID 如图
![ios_overseas5.png](https://zyapk.zwnet.cn/ios_overseas/ios_overseas5.png)
![ios_overseas6.png](https://zyapk.zwnet.cn/ios_overseas/ios_overseas6.png)
### 4、初始化SDK<a name="sec4"></a>
app启动时调用注册sdk
```
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//此注册方法需要在游戏初始化之前调用
[[ZYouManager shareInstance]zy_registerGameWithApplication:application options:launchOptions];
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
return [[ZYouManager shareInstance]zy_application:app openURL:url options:options];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[ZYouManager shareInstance]zy_applicationDidBecomeActive:application];
}
```
### 5、登录<a name="sec5"></a>
登录方法<a name="sec6.1"></a>
```
- (void)zy_loginViewSuccessBlock:(void(^)(id responseObject))successBlock failureBlock:(void(^)(NSString *error))failureBlock;
```
- 说明:调出登录页面登录成功返回token
- 需游戏服务端调用登录验证之后,才能进入游戏参照(SDK对接说明 2.2)
> **登录成功返回参数**:
| 参数 | 类型 | 说明 |
| :-------- | -------------: | -------------: |
| status_code | int| 状态码 |
| data| object | 返回数据 |
| msg| String| 描述信息 |
| data| object | 返回数据 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data | object | 用户数据 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; player_id | String | 玩家ID |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; avatar | String | 用户头像 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; has_identify | boolean | 是否实名 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user_token | strng | token |
> **登录失败返回参数**:
| 参数 | 类型 | 说明 |
| :-------- | -------------: | -------------: |
| msg| String| 描述信息 |
### 参数说明<a name="sec5.1"></a>
| 参数 | 说明 |
|:----|-----:|
|successBlock|成功回调|
|failureBlock|失败回调|
#### 登录调用示例<a name="sec5.2"></a>
引入 #import "ZYGoogleLogin.h" 文件
```
//监听同意协议后调用登录方法
[[ZYouManager shareInstance]zy_loginViewSuccessBlock:^(id _Nonnull responseObject) {
//登录成功返回信息
} failureBlock:^(NSString * _Nonnull error) {
}];
//谷歌登录
[[ZYouManager shareInstance]zy_googleLoginBlock:^{
[ZYGoogleLogin gooleLogin];
}];
```
### 6、调起支付页面<a name="sec6"></a>
调起支付页面方法<a name="sec7.1"></a>
```
- (void)zy_payWithOrder:(NSDictionary *)order role:(NSDictionary *)role roleId:(NSString *)roleId successBlock:(void(^)(id responseObject))successBlock failureBlock:(void(^)(NSString *error))failureBlock;
```
### 参数说明<a name="sec6.1"></a>
| 参数 | 说明 |
|:----|-----:|
|ZYPayInfoModel|支付参数|
|successBlock|成功回调|
|failureBlock|失败回调|
#### 调用示例<a name="sec6.2"></a>
```
NSDictionary *order = @{
@"cp_order_id":@"1531691516911368192_16006_9690822_425", //CP订单ID
@"amount":@"1", //商品总价(单位:分)
@"product_price":@"1", //商品价格(单价,单位:分)
@"product_id":@"16006", //商品ID
@"product_cnt":@"1", //商品数量
@"product_name":@"周三直购", //商品名称
@"product_desc":@"0.1元惊喜包", //商品描述
@"ext":@"1531691514967582720", //订单额外信息用(json)
};
NSDictionary *role = @{
@"event":@"create", // 事件类型,online: 角色登录, create: 创建角色,level_up: 提升等级,offline: 角色退出,other: 其他,delete: 删除角色,main_city_upgrade:官邸升级事件,chapter_complete:章节完成事件
@"server_id":@"100001", //区服ID
@"server_name":@"主宰服", //区服名称
@"cp_role_id":@"1314900", //CP角色ID
@"role_name":@"test_name", //角色名称
@"role_level":@"100", //角色等级
@"role_vip":@"7" //角色VIP等级
};
//roleId 角色ID
[[ZYouManager shareInstance] zy_payWithOrder:order role:role roleId:@"1314900" successBlock:^(id _Nonnull responseObject) {
} failureBlock:^(NSString * _Nonnull error) {
}];
```
#### 下单支付字段说明<a name="sec6.3"></a>
| 名称 | 类型 | 是否必须 | 默认值|说明 |
|:--------------|-------:|-----:|-----:|-----------------:|
| cp_order_id | string | 必须 || CP订单ID |
| amount | number | 必须 | |商品总价(单位:分 |
| product_price | number | 必须 | |商品价格(整数,后台自动换算分) |
| product_id | String | 非必须 |0| 商品ID |
| product_cnt | number | 必须 | |商品数量 |
| product_name | string | 必须 |""| 商品名称 |
| product_desc | string | 非必须 |""| 商品描述 |
| ext | string | 必须 |""| 订 调用方定义 单额外信息用(json)|
| event | string | 必须 |""| 事件|
| server_id | string | 必须 |0| 区服id |
| server_name | string | 必须 |""| 区服名称|
| cp_role_id | string | 必须 | cp角色id |
| role_name | string | 必须 | ""|角色名称 |
| role_level | string | 必须 |0| 角色等级 |
| role_vip | string | 必须 | 0|角色vip等级 |
| role_id | string | 必须 |0| 角色ID |
### 7、支付回调通知<a name="sec7"></a>
1.1
1.1、支付回调通知请参考对接文档H5 SDK 对接文档-v1.0、服务端接入
### 8、角色上报<a name="sec8"></a>
角色上报方法
```
//角色上报
- (void)zy_reportRoleInfoWithRole:(NSDictionary*)role successBlock:(void(^)(id responseObject))successBlock failureBlock:(void(^)(NSString *error))failureBlock;
```
### 参数说明<a name="sec8.1"></a>
| 参数 | 说明 |
|:----|-----:|
|ZYReportInfoModel|上报信息|
|successBlock|成功回调|
|failureBlock|失败回调|
#### 调用示例<a name="sec8.2"></a>
```
NSDictionary *dic = @{
@"event":@"create", // 事件类型,online: 角色登录, create: 创建角色,level_up: 提升等级,offline: 角色退出,other: 其他,delete: 删除角色,main_city_upgrade:官邸升级事件,chapter_complete:章节完成事件
@"server_id":@"100001", //区服ID
@"server_name":@"主宰服", //区服名称
@"cp_role_id":@"1314900", //CP角色ID
@"role_name":@"test_name", //角色名称
@"role_level":@"100", //角色等级
@"role_vip":@"7", //角色VIP等级
@"cp_account":@"7", //cp账号
@"combat_num":@"1000", //角色战力
@"online_time":@"10", //本次在线时长
@"attack":@"2000", //攻击力
@"profession":@"", //职业
@"gang_name":@"", //帮会(行会)名称
@"trans_level":@"", //转生等级
@"sponsor_level":@"", //赞助等级/会员等级
@"reiki_num":@"", //灵符值 默认0
@"power":@"", //国家
@"main_city_level":@"", //官邸等级
@"chapter_index":@"" // 章节等级
};
[[ZYouManager shareInstance]zy_reportRoleInfoWithRole:dic successBlock:^(id _Nonnull responseObject) {
NSLog(@"上报成功");
} failureBlock:^(NSString * _Nonnull error) {
}];
```
#### 参数字段说明<a name="sec8.3"></a>
| 参数 | 必选 | 类型 | 默认值 | 说明 |
| :----------------------------------------------------------- | :---- | :----- | :----- | :---------------- |
| role | true | Object | - | 角色信息 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event | true | String | other | 事件类型 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_id | true | String | - | 区服ID |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name | true | String | - | 区服名称 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp_role_id | true | String | - | 游戏方角色ID |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role_name | true | String | - | 游戏角色名称 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role_level | true | Int | - | 角色等级 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp_account | false | String | - | cp账号 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role_vip | false | Int | 0 | 角色VIP等级 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;combat_num | false | String | "0" | 角色战力 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reiki_num | false | Int | 0 | 角色灵符值 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;online_time | false | Int | 0 | 本次在线时长 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attack | false | Int | 0 | 攻击力 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;profession | false | String | - | 职业 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gang_name | false | String | - | 帮会(行会)名称 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trans_level | false | Int | 0 | 转生等级 |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sponsor_level | false | Int | 0 | 赞助等级/会员等级 |
事件类型event
| EVENT | 说明 |
| -------- | -------- |
| create | 创建角色 |
| online | 角色上线 |
| offline | 角色下线 |
| level_up | 角色升级 |
| delete | 删除角色 |
| recharge | 角色充值 |
| other | 其他 |
### 9、退出登录<a name="sec9"></a>
```
//退出登录
//带有二次确定退出
- (void)zy_loginoutAlertSuccessBlock:(void(^)(void))successBlock failureBlock:(void(^)(NSString *error))failureBlock
```
#### 调用示例<a name="sec9.1"></a>
```
[[ZYouManager shareInstance]zy_loginoutAlertSuccessBlock:^(id _Nonnull responseObject) {
} failureBlock:^(NSString * _Nonnull error) {
}];
```
- 说明:退出游戏时需要cp端主动调用退出页面
#### 服务端登录验证接口<a name="sec10"></a>
## 服务端接口 调用方直接使用http 调用接口:
### 接口地址
> 【POST】 /ios_sdk/auth/checkLogin
##### 请求参数
> **Headers**:
>
> | 参数 | 必选 | 参数值 | 说明 |
> | ------------ | ---- | ---------------- | ----------------------------------- |
> | Content-Type | true | application/json | |
> | User-Token | true | | 登录后由 SDK 返回的user_token |
> **Body**:
>
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | --------- | ---- | ------ | ------ | ---------------------------------- |
> | game_id | true | Int | - | 游戏接入时分配的游戏ID(建议从user_token中取,#后面的数字即为game_id)|
> | player_id | true | Int | - | 小游戏登录后由 SDK 返回的player_id |
> | sign | true | String | - | 参数签名 |
##### 返回参数
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | ----------- | ----- | ------ | ------ | -------------- |
> | status_code | true | Int | - | 状态码 1 正常在线,否则不允许登录|
> | msg | true | STRING | - | 返回信息 |
> | data | false | OBJECT | [] | 返回数据(空) |
>
##### 接口说明
调用方检测当前用户是否登录过,在线状态; 如果返回参数不是正常登录则不允许登录游戏。
##### 请求示例
```php
<php?
public function checkLogin(){
$host = 'https://zyou.wozhangwan.com/api';
$checkLoginUrl = '/ios_sdk/auth/checkLogin';
$url = $host.$checkLoginUrl;
$gameSecret = "game_secret";
$body = ["player_id" => 1245, "game_id" => 14];
$userToken = "user_token";
$body["sign"] = makeSign($body, $gameSecret);
$headers = ["Content-Type:application/json","User-Token:".$userToken];
$response = curl_post($url, $body, $hearders);
}
public function makeSign($params,$gameSecret){
$signStr = '';
ksort($params, SORT_REGULAR);
foreach ($params as $key => $val) {
if (is_array($val)) {
ksort($val, SORT_REGULAR);
$val = json_encode($val, JSON_UNESCAPED_UNICODE);
}
$signStr .= $key . '=' . $val . '&';
}
$signStr .= 'game_secret=' . $gameSecret;
return md5($signStr);
}
public function curl_post($url, $body, $headers){
//初始化
$curl = curl_init ( );
//设置抓取的url
curl_setopt ( $curl, CURLOPT_URL , $url);
//设置头文件的信息作为数据流输出
curl_setopt ( $curl, CURLOPT_HEADER , 1 );
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER , 1 );
//设置post方式提交
curl_setopt ( $curl, CURLOPT_POST , 1 );
//设置post参数
curl_setopt ( $curl, CURLOPT_POSTFIELDS , json_encode($body) );
//设置请求头
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//执行命令
$data = curl_exec ( $curl );
//关闭URL请求
curl_close ( $curl );
//显示获得的数据
return json_decode($data, true);
}
```
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论