提交 1943f4f1 作者: 赵隆杰

Merge branch 'ios_zlj' of http://git.wozhangwan.com/zwwl/zw_game_sdk into release

No preview for this file type
## ZYouSDK V1.0.0文档接入使用
## ZYouSDK V1.0.0文档接入使用
......@@ -149,6 +149,10 @@ app启动时调用注册sdk ----在AppDelegate 中调用以下方法
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[ZYouManager shareInstance]zy_applicationDidBecomeActive:application];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
return [[ZYouManager shareInstance]zy_application:app openURL:url];
......
## ZYouSDK V1.0.0文档接入使用(unity桥接)
## ZYouSDK V1.0.0文档接入使用(unity桥接)
[目录](#sec1)
&nbsp;&nbsp;&nbsp;&nbsp;1 [对接说明](#sec1)
&nbsp;&nbsp;&nbsp;&nbsp;2 [参数说明](#sec2)
&nbsp;&nbsp;&nbsp;&nbsp;3 [对接SDK](#sec3)
&nbsp;&nbsp;&nbsp;&nbsp;4 [初始化SDK](#se4)
&nbsp;&nbsp;&nbsp;&nbsp;5 [其他方法对接](#sec5)
#### 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的应用
&nbsp;&nbsp; 1.5、给到的sdk可能是混淆过的 具体对照调用参考demo
### 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; 将ZYouSDK文件直接添加进工程,具体包含ZYouSDK,ZYSDKConfig,ZYouBundle三个文件和ToponSdk文件夹
&nbsp;&nbsp; 3.3、文件导入形式
&nbsp;&nbsp;&nbsp;&nbsp; 因广告包含的sdk文件较多,导入的文件需要逐一核验,选中文件查看右边的Target Membership,具体如下:
ZYouSDK.framework UnityFramework
ZYSDKConfig.plist Unity-iPhone
ZYouBundle.bundle Unity-iPhone
AnyThinkBaiduAdapter.framework UnityFramework
baidumobadsdk.bundle Unity-iPhone
BaiduMobAdSDK.framework UnityFramework
AnyThinkBanner.framework UnityFramework
AnyThinkInterstitial.framework UnityFramework
AnyThinkMediaVideo.framework UnityFramework
AnyThinkNative.framework UnityFramework
AnyThinkRewardedVideo.framework UnityFramework
AnyThinkSDK.bundle Unity-iPhone
AnyThinkSDK.framework UnityFramework
AnyThinkSplash.framework UnityFramework
AnyThinkGDTAdapter.framework UnityFramework
GDTMobSDK.framework Unity-iPhone
Tquic.framework Unity-iPhone
AnyThinkGromoreAdapter.framework UnityFramework
AnyThinkKuaiShouAdapter.framework UnityFramework
KSAdSDK.framework Unity-iPhone
AnyThinkTTAdapter_Mix.framework UnityFramework
BUAdSDK.framework UnityFramework
CSJAdSDK.bundle Unity-iPhone
CSJMediation.framework UnityFramework
&nbsp;&nbsp; 3.4、添加依赖
UnityFramework的target添加以下依赖
TARGETS -> Build Phases -> Link Binary With Libraries 下添加
AVFoundation.framework
AdSupport.framework
CoreHaptics.framework
CoreLocation.framework
CoreML.framework
CoreMedia.framework
CoreMotion.framework
CoreTelephony.framework
DeviceCheck.framework
JavaScriptCore.framework
MessageUI.framework
MediaPlayer.framework
SafariServices.framework
StoreKit.framework
SystemConfiguration.framework
WebKit.framework
libbz2.tbd
libc++.tbd
libresolv.9.tbd
libsqlite3.tbd
libxml2.tbd
&nbsp;&nbsp; 3.5、
Unity-iPhone和Unity-iPhone的target,都添加
找到Build Settings - ,找到Runpath Search Paths,添加@executable_path/Frameworks
&nbsp;&nbsp; 3.6、
Unity-iPhone的target,找到General -> Framework,Libraries,and Embedded Conent,找到KSAdSDK.framework,GDTMobSDK.framework,Tquic.framework,将后面的Embed值修改为Embed & Sign
&nbsp;&nbsp; 3.7、
UnityFramework的target,找到Build Settings - Other Linker Flags,增加参数-ObjC、 -all_load
Unity-iPhone的target,找到Build Settings - Other Linker Flags,增加参数-ObjC、 -l"c++"、 -l"c++abi" 、-l"sqlite3"、-l"z"
&nbsp;&nbsp; 3.8 ZYSDKConfig配置文件中,game_id为平台方提供;server_host为账号主体域名,由平台方提供。其他配置参数请勿修改
&nbsp;&nbsp; 3.9 TARGETS点击项目名称,点击 Info 选项卡,添加NSUserTrackingUsageDescription权限 配置文案如(是否允许xx使用您的IDFA信息,以此来优化您的使用体验)
&nbsp;&nbsp; 3.10 TARGETS点击项目名称,点击 Info 选项卡,在 URL Types 选项中,点击 +,在 URL Schemes 中输入 ZYSDKConfig文件中zyscheme的值
&nbsp;&nbsp; 3.11、添加IAP
&nbsp;&nbsp; 在TARGETS - Signing & Capabilities 下添加In-App Purchase
&nbsp;&nbsp; 3.12、Xcode开启https请求
&nbsp;&nbsp; 在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary
&nbsp;&nbsp; 在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean ,值设为 YES
&nbsp;&nbsp; 3.13、Xcode添加白名单
&nbsp;&nbsp; 在 Info.plist 中添加 LSApplicationQueriesSchemes 类型 Array
&nbsp;&nbsp; 在LSApplicationQueriesSchemes下添加以下白名单
```
weixin
wechat
mqq
mqqapi
alipay
```
![example2.png](https://zhangsheng-1300623068.cos.ap-guangzhou.myqcloud.com/example2.png)
&nbsp;&nbsp; 3.13、在Build Settings - Other Linker Flags里面加入-ObjC参数
![example3.png](https://zhangsheng-1300623068.cos.ap-guangzhou.myqcloud.com/example3.png)
&nbsp;&nbsp; 3.14、添加Associated Domains(需要更新bundle identifier支持)
在 Signing & Capabilities 中打开 +Capability ,然后选择 Associated Domains
得到如下设置,添加applinks:zmgameios.wozhangwan.com
![example3.png](https://zyouapk.zwnet.cn/zhangsheng/staging/ios/img/DfGY4wTy46i8jb6d1750837551901.png)
&nbsp;&nbsp; 3.15、Info.plist切换为Source Code模式
&nbsp;&nbsp; 3.15.1、 将LSApplicationQueriesSchemes的键值对复制到Info.plist
如果项目本身存在LSApplicationQueriesSchemes的key,只需复制下面的value值到LSApplicationQueriesSchemes即可
没有LSApplicationQueriesSchemes的key,则完整复制
```
<key>LSApplicationQueriesSchemes</key>
<array>
<string>taobao</string>
<string>pinduoduo</string>
<string>openapp.jdmobile</string>
<string>imeituan</string>
<string>iosamap</string>
<string>alipay</string>
<string>baiduboxapp</string>
<string>vipshop</string>
<string>tmall</string>
<string>meituanwaimai</string>
<string>kwai</string>
<string>eleme</string>
<string>xhsdiscover</string>
<string>ksnebula</string>
<string>sinaweibo</string>
<string>fleamarket</string>
<string>bilibili</string>
<string>quark</string>
<string>com.sy.dldllhsj</string>
<string>com.yunkai.xianyu</string>
<string>com.netease.nshm</string>
<string>com.lilithgames.solarland.ios.cnnew</string>
<string>com.netease.yyslscn</string>
<string>infinitynikkicn</string>
<string>mdd</string>
<string>moyi</string>
<string>com.wlwz.gbnq</string>
<string>glg136c4b5fbccab</string>
<string>guazi</string>
<string>momochat</string>
<string>comdzhongfhjc</string>
<string>hmjc</string>
<string>com.aio.fasting</string>
<string>com.pwrd.zhuxian2.zs</string>
<string>com.khorgas.hsdj</string>
<string>com.gof.china</string>
<string>openjdjrapp</string>
<string>xtlqabroad</string>
<string>com.netease.stzb</string>
<string>com.gf.cxswz</string>
<string>SilverandBlood</string>
<string>com.qyfsl.gmsg</string>
<string>stbnt</string>
<string>baiduboxlite</string>
<string>wireless1688</string>
<string>iqiyi</string>
<string>weixin</string>
<string>taobaotravel</string>
<string>alipays</string>
<string>youku</string>
</array>
```
&nbsp;&nbsp; 3.15.2、 将SKAdNetworkItems的键值对复制到Info.plist
```
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mls7yz5dvl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4pfyvq9l8r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cg4yq2srnc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>737z793b9f.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6xzpu9s2p8.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ludvb6z3bs.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mlmmfzh3r3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wg4vff78zm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>523jb4fst2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ggvn48r87g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3sh42y64q3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>24t9a8vw3c.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>prcb7njmu6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>m8dbw4sv7c.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9nlqeag3gk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cj5566h2ga.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>w9q455wk68.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>k674qkevps.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5lm9lj6jb7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9rd848q2bz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7rz58n8ntl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4w7y6s5ca2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>feyaarzu9v.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ejvt5qm6ak.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n9x2a789qt.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>44jx6755aq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zmvfpc5aq8.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>tl55sbb4fm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>glqzh8vgby.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>av6w8kgt66.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dzg6xy7pwj.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>y45688jllp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hdw39hrw9y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>424m5254lk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5l3tpt7t6e.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4dzt52r2t5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mtkv5xtk9e.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta9lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5tjdwbrq8w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3rd42ekr43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>g28c52eehv.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>su67r6k2v3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>rx5hdcabgc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2fnua5tdw4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>32z4fx6l9h.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>xy9t38ct57.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>54nzkqm89y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9b89h5y424.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pwa73g5rt2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>79pbpufp6p.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbmxgpxpgc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>275upjj5gd.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>rvh3l7un93.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>qqp299437r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>294l99pt4k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>74b6s63p6l.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>44n7hlldy6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6p4ks3rnbw.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f73kdq92p3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>97r2b46745.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qcr597p9d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>b9bk5wbcq9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>84993kbrcf.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>24zw6aqk47.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pwdxu55a5a.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cs644xg564.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6964rsfnh4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9vvzujtq5s.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a7xqa6mtl2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>r45fhb6rf7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c3frkrj4fj.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6g9af3uyq4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>u679fj5vs4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>g2y4y55b64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zq492l623r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a8cz6cu7e5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dbu4b84rxf.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mj797d8u6f.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ns5j362hk7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mqn7fxpca7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f7s53z58qe.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>r3y5dwb26t.skadnetwork</string>
</dict>
</array>
```
### 4、初始化SDK<a name="sec4"></a>
app启动时调用注册sdk ----在UnityAppController 中调用以下方法
```
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// 掌玩sdk初始化
NSString *launchOptionsStr = nil;
if (launchOptions) {
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:launchOptions options:0 error:nil];
if (jsonData) {
launchOptionsStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}
launchOptionsStr = launchOptionsStr ?: @"";
[[ZYouManager shareInstance] zy_sdkBridgeWithType:@"zy_registerGameWithApplication" data:launchOptionsStr];
//广告初始化
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setValue:@"a6911ace71f10b" forKey:@"takuAppID"];
[dic setValue:@"a82c177f8a35d09d453487ed9b9980b24" forKey:@"takuAppKey"];
NSString *dicStr = nil;
NSData *dic_jsonData = [NSJSONSerialization dataWithJSONObject:dic options:0 error:nil];
if (dic_jsonData) {
dicStr = [[NSString alloc] initWithData:dic_jsonData encoding:NSUTF8StringEncoding];
}
[[ZYouManager shareInstance] zy_sdkBridgeWithType:@"zy_ad_init" data:dicStr];
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
NSString *optionsStr = nil;
if (options) {
// 字典转 JSON 数据
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:options options:0 error:nil];
// JSON 数据转字符串
if (jsonData) {
optionsStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}
// 若转换失败,用空字符串替代(避免 nil)
optionsStr = optionsStr ?: @"";
// 调用 SDK 方法,此时 data 参数类型匹配
[[ZYouManager shareInstance] zy_sdkBridgeWithType:@"zy_openURL" data:optionsStr];
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[ZYouManager shareInstance] zy_sdkBridgeWithType:@"zy_applicationDidBecomeActive" data:@""];
}
//注意! 竖屏游戏请调用此方法 横屏游戏忽略
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return [[ZYouManager shareInstance]zy_supportedInterfaceOrientationsType];
}
```
### 5、其他方法对接请按照桥接SDK要求步骤完成
## ZYouSDK V1.0.0文档接入使用
## ZYouSDK V1.0.0文档接入使用
[目录](#sec1)
&nbsp;&nbsp;&nbsp;&nbsp;1 [对接说明](#sec1)
&nbsp;&nbsp;&nbsp;&nbsp;2 [参数说明](#sec2)
&nbsp;&nbsp;&nbsp;&nbsp;3 [对接SDK](#sec3)
&nbsp;&nbsp;&nbsp;&nbsp;4 [初始化SDK](#se4)
&nbsp;&nbsp;&nbsp;&nbsp;5 [登录](#sec5)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[接口参数](#sec5.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[登录调用示例](#sec5.2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[悬浮球显示](#sec5.3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[悬浮球隐藏](#sec5.4)
&nbsp;&nbsp;&nbsp;&nbsp;6 [调起支付页面](#sec6)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [参数说明](#sec6.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[调用示例](#sec6.2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[下单支付字段说明](#sec6.2)
&nbsp;&nbsp;&nbsp;&nbsp;7 [支付回调通知](#sec7)
&nbsp;&nbsp;&nbsp;&nbsp;8 [角色上报](#sec8)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [参数说明](#sec8.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[调用示例](#sec8.2)
&nbsp;&nbsp;&nbsp;&nbsp;9 [退出登录](#sec9)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[调用示例](#sec9.1)
&nbsp;&nbsp;&nbsp;&nbsp;10 [分享](#sec10)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [参数说明](#sec10.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[调用示例](#sec10.2)
&nbsp;&nbsp;&nbsp;&nbsp;11 [社群](#sec11)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [参数说明](#sec11.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[调用示例](#sec11.2)
## 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的应用
&nbsp;&nbsp; 1.5、集成分享服务需要提前配置universal link(重要,必须)
&nbsp;&nbsp; 1.6、给到的sdk可能是混淆过的 具体对照调用参考demo
## 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、pod集成
&nbsp;&nbsp;&nbsp;&nbsp; 将Demo中的Podfile复制到项目根目录,将target改为实际项目target,执行pod install --repo-update,后续打开项目找.xcworkspace
&nbsp;&nbsp; 3.2、手动集成
&nbsp;&nbsp;&nbsp;&nbsp; 打开项目后,将ZYouSDKFramework文件夹直接添加进工程,ZYouSDKFramework 文件夹中包含ZYouSDK,ZYSDKConfig,ZYouBundle三个文件,及QQ分享的SDK:TencentOpenAPI.framework
&nbsp;&nbsp; 3.3、添加依赖 TARGETS -> Build Phases -> Link Binary With Libraries 下添加
```
libsqlite3.tbd
Security.framework
libiconv.dylib
SystemConfiguration.framework
CoreGraphics.Framework
libsqlite3.dylib
CoreTelephony.framework
libstdc++.dylib
libz.dylib
WebKit.framework
QuartzCore.framework
ImageIO.framework
CoreText.framework
libz.1.tbd
libc++.tbd
Network.framework
CoreData
QuartzCore
```
&nbsp;&nbsp; 3.4 ZYSDKConfig配置文件中,game_id为平台方提供;server_host为账号主体域名,由平台方提供。其他配置参数请勿修改
&nbsp;&nbsp; 3.5 TARGETS点击项目名称,点击 Info 选项卡,添加
> NSUserTrackingUsageDescription权限 配置文案如(是否允许xx使用您的IDFA信息,以此来优化您的使用体验)
> Privacy - Photo Library Usage Description相册权限
&nbsp;&nbsp; 3.6 TARGETS点击项目名称,点击 Info 选项卡,在 URL Types 选项中,点击 +,在 URL Schemes 中添加
> ZYSDKConfig文件中zyscheme的值
// 用于分享的 Url Scheme
> QQ: tencent + QQ开放平台的appid eg:tencent222222
> Wechat: 微信开放平台的appid eg:wx222222
> Weibo: wb + 微博开放平台的appKey eg:wb222222
> Douyin: 抖音开放平台的ClientKey eg:222222
&nbsp;&nbsp; 3.7、添加IAP
&nbsp;&nbsp; 在TARGETS - Signing & Capabilities 下添加In-App Purchase
&nbsp;&nbsp; 3.8、Xcode开启https请求
&nbsp;&nbsp; 在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary
&nbsp;&nbsp; 在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean ,值设为 YES
&nbsp;&nbsp; 3.9、Xcode添加白名单
&nbsp;&nbsp; 在 Info.plist 中添加 LSApplicationQueriesSchemes 类型 Array
&nbsp;&nbsp; 在LSApplicationQueriesSchemes下添加以下白名单。具体参考demo,可从demo中复制过来
&nbsp;&nbsp; 需要注意的是 目前苹果最多支持50个 超过的部分可能会不起作用
```
alipay
// QQ
mqq
mqqapi
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqqopensdkapiV4
mqqopensdkgrouptribeshare
// 微信
weixin
wechat
weixinULAPI
weixinURLParamsAPI
// 微博
sinaweibo 
weibosdk 
weibosdk2.5 
weibosdk3.3
// 抖音
douyinopensdk
douyinliteopensdk
douyinsharesdk
snssdk1128
```
![example2.png](https://zhangsheng-1300623068.cos.ap-guangzhou.myqcloud.com/example2.png)
&nbsp;&nbsp; 在 Info.plist 中添加 SKAdNetworkItems,具体参考demo,可从demo中复制过来
&nbsp;&nbsp; 3.10、在Build Settings - Other Linker Flags里面加入
```
-ObjC
-fobjc-arc
-all_load
```
![example3.png](https://zhangsheng-1300623068.cos.ap-guangzhou.myqcloud.com/example3.png)
&nbsp;&nbsp; 3.11、添加Associated Domains(需要更新bundle identifier支持)在 Signing & Capabilities 中打开 +Capability ,然后选择 Associated Domains
得到如下设置,添加applinks:zmgameios.wozhangwan.com
![example3.png](https://zyouapk.zwnet.cn/zhangsheng/staging/ios/img/DfGY4wTy46i8jb6d1750837551901.png)
支持分享需要配置universal link [官方文档](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html)
universal link生效可能需要版本更新时,苹果才会向服务器请求校验。所以最好确认universal link生效之后再接入分享服务。
## 4、初始化SDK<a name="sec4"></a>
app启动时调用注册sdk ----在AppDelegate 中调用以下方法
```
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//此注册方法需要在游戏初始化之前调用
[[ZYouManager shareInstance]zy_registerGameWithApplication:application options:launchOptions];
// 开启分享服务
[[ZYouManager shareInstance] registerShareUniversalLink:@"https://zmgameios.wozhangwan.com/deepseagarden/share/];
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
return [[ZYouManager shareInstance]zy_application:app openURL:url];
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
[[ZYouManager shareInstance] zy_application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
return true;
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[ZYouManager shareInstance]zy_applicationDidBecomeActive:application];
}
//注意! 竖屏游戏请调用此方法 横屏游戏忽略
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return [[ZYouManager shareInstance]zy_supportedInterfaceOrientationsType];
}
```
## 5、登录<a name="sec5"></a>
### 登录方法<a name="sec6.1"></a>
```
- (void)zy_privacyAgreementSuccessBlock:(void(^)(void))successBlock;
- (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>
```
//监听同意协议后调用登录方法
[[ZYouManager shareInstance]zy_privacyAgreementSuccessBlock:^{
[[ZYouManager shareInstance]zy_loginViewSuccessBlock:^(id _Nonnull responseObject) {
} failureBlock:^(NSString * _Nonnull error) {
}];
}];
```
## 悬浮球显示<a name="sec5.3"></a>
```
//显示悬浮球
[[ZYouManager shareInstance]zy_showSuspensionBallCancleBlock:^{
//退出个人中心页面
}];
```
## 悬浮球隐藏<a name="sec5.4"></a>
```
[[ZYouManager shareInstance]zy_hideSuspensionBall];
```
## 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>
### 接口说明
> 需要游戏服务端完成该接口,接收平台充值成功的信息。
### 接口地址
> 【POST】充值结果通知地址,由 CP 方提供
### 通知参数
> **Headers**:
>
> | 参数 | 必选 | 参数值 | 说明 |
> | ------------ | ---- | ---------------- | ---- |
> | Content-Type | true | application/json | |
> | User-Token | | | |
> **Body:**
>
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | :------------------------------------------------------------ | :--- | :----- | :----- | :------------------------------------------------------------------------------------------------------- |
> | order | true | Object | - | 订单相关 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order_id | true | String | - | 平台订单 ID |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp_order_id | true | String | - | 游戏传入的外部订单号,服务器会根据这个订单号生成对应的平台订单号,<br>请保证每笔订单传入的订单号的唯一性 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product_price | true | String | - | 商品单价(分) |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amount | true | String | | 商品总价(分) |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product_id | true | String | - | 商品 ID |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product_cnt | true | String | - | 商品数量 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pay_time | true | String | - | 支付时间(时间戳,到秒) |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext | true | String | - | CP 自定义参数,透传信息 |
> | game_id | true | String | - | 游戏接入时分配的游戏 ID 【子级唯一】 |
> | player_id | true | String | - | 游戏接入登录返回的用户唯一标识 |
> | sign | true | String | - | 签名(签名规则参照 2.1 签名规则,签名的 key 由 SDK 提供) |
### 返回参数
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | ----------- | ---- | ------ | ------ | -------- |
> | status_code | true | Int | - | 状态码 |
> | msg | true | STRING | - | 返回信息 |
> | data | | | | |
### 注意
> 通知使用的参数格式均为字符串(String) 返回status_code = 1 为成功, 否则会重复通知三次
### 请求示例
```php
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);
}
function curl_post($url, $body, $headers){
//初始化
$curl = curl_init ( );
//设置抓取的url
curl_setopt ( $curl, CURLOPT_URL , $url);
//设置头文件的信息作为数据流输出
curl_setopt ( $curl, CURLOPT_HEADER , 0 );
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER , 1 );
//设置post方式提交
curl_setopt ( $curl, CURLOPT_POST , 1 );
//设置post参数
curl_setopt ( $curl, CURLOPT_POSTFIELDS , json_encode($body) );
//设置请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
//执行命令
$data = curl_exec ( $curl );
//关闭URL请求
curl_close ( $curl );
//显示获得的数据
return json_decode($data, true);
}
function payNotify(){
$payNotifyUrl = 'CP 方充值成功回调地址';
$gameSecret = "#替换为SDK方参数game_secret#";
$body = [
"player_id" => 990218,
"game_id" => 138,
"order"=>["amount"=>"800",
"cp_order_id"=>"1333066913427335168_101_990218_1",
"ext"=>"1333066913424879617",
"order_id"=>"g1641507637-CA7714D0-064D-D4BA",
"pay_time"=>"1641507647",
"product_cnt"=>"1",
"product_id"=>"101",
"product_price"=>"800"
]
];
$body["sign"] = makeSign($body, $gameSecret);
$headers = ["Content-Type:application/json"];
$response = curl_post($payNotifyUrl, $body, $headers);
print_r($response);
}
payNotify();
```
## 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_loginoutSuccessBlock:(void(^)(id responseObject))successBlock failureBlock:(void(^)(NSString *error))failureBlock;
```
### 调用示例<a name="sec9.1"></a>
```
[[ZYouManager shareInstance]zy_loginoutSuccessBlock:^(id _Nonnull responseObject) {
} failureBlock:^(NSString * _Nonnull error) {
}];
```
- 说明:在需要退出登陆时可调用此方法,注意此方法为退出,并不会调出登陆界面
### 9.2 监听个人中心退出登录方法 sdk从个人中心退出后
```
//监听从个人中心退出和检查登录退出
- (void)zy_loginoutSuccessBlock:(void(^)(void))successBlock;
```
### 调用示例
```
//监听从个人中心退出操作
[[ZYouManager shareInstance]zy_loginoutSuccessBlock:^{
NSLog(@"退出登录");
}];
```
- 说明:此方法会监听sdk从个人中心退出 如游戏需要退出可以在此回调方法中操作
## 10、分享<a name="sec10"></a>
### 分享方法
```
/// 分享事件 bizScene是运营给出的场景id
/// - Parameters:
/// - platform: 分享的平台
/// - bizScene: 业务场景
/// - resultHandle: 回调
- (void)sharePlatform:(SharePlatform)platform
bizScene:(NSInteger)bizScene
resultHandle:(ShareEventHandle)resultHandle;
```
### 参数说明<a name="sec10.1"></a>
| 参数 | 说明 |
|:----|-----:|
|platform|分享的平台|
|bizScene|业务场景|
|resultHandle|回调|
### 调用示例<a name="sec10.2"></a>
```
/// 分享【场景id】为1的内容到【微信聊天】
[[ZYouManager shareInstance] sharePlatform:SharePlatformWechatIM bizScene:1 resultHandle:^(ShareEventResult result, NSString *message) {
}];
```
## 11、社群<a name="sec11"></a>
### 打开社群
```
/// 打开社群
/// - Parameters:
/// - platform: 社群平台
/// - resultHandle: 回调
- (void)openCommunity:(CommunityPlatform)platform resultHandle:(OpenCommunityEventHandle)resultHandle;
```
### 参数说明<a name="sec11.1"></a>
| 参数 | 说明 |
|:----|-----:|
|platform|社群平台|
|resultHandle|回调|
### 调用示例<a name="sec11.2"></a>
```
/// 打开【微博社群】
[[ZYouManager shareInstance] openCommunity:CommunityPlatformWeibo resultHandle:^(ZYResult result, NSString *message) {
}];
```
## 12、广告<a name="sec11"></a>
### 12.1 广告初始化
```
/// 初始化广告
/// - Parameters:
/// - takuAppID: 在后台的应用ID
/// - takuAppKey: 在后台的应用维度AppKey,或者是账号维度AppKey
- (void)zy_ad_initWithTakuAppID:(NSString *)takuAppID takuAppKey:(NSString *)takuAppKey;
```
### 调用示例<a name="sec11.2"></a>
```
// 研发在广告初始化时调用,可放在游戏加载完成后
[[ZYouManager shareInstance] zy_ad_initWithTakuAppID:@"a6923c90cd8857" takuAppKey:@"a0a8d0c86be83555b7e7ea20e327323f5"];
```
### 12.2 全自动加载所有激励广告
```
- (void)autoLoadAllRewardedAd;
```
### 调用示例<a name="sec11.2"></a>
```
// 广告全自动加载所有,研发调用
[[ZYouManager shareInstance] autoLoadAllRewardedAd];
```
### 12.3 全自动加载多组场景的激励广告
```
/// 全自动加载多组场景的激励广告
/// - Parameters:
/// - RewardedSceneIDs: 场景ID组
- (void)autoLoadRewardedAdRewardedSceneIDs:(NSArray *)RewardedSceneIDs;
```
### 调用示例<a name="sec11.2"></a>
```
// 广告全自动加载多组场景,研发调用
[[ZYouManager shareInstance] autoLoadRewardedAdRewardedSceneIDs:@[@"b1s8", @"b1s9"]];
```
### 12.4 加载激励广告
```
/// 加载激励广告
/// - Parameters:
/// - RewardedPlacementID: 广告位ID
/// - RewardedSceneID: 场景ID,可选,可在后台生成。没有可传入空字符串
/// - extra: 额外信息字典,适用于广告平台的服务端激励验证,将被透传
- (void)loadRewardedAd:(NSString *)RewardedPlacementID RewardedSceneID:(NSString *)RewardedSceneID extra:(NSDictionary *)extra;
```
### 调用示例<a name="sec11.2"></a>
```
// 广告加载,研发调用,第一次广告加载可放在游戏初始化完成后,第二次加载可放在第一次广告显示之后,依次类推
[[ZYouManager shareInstance] loadRewardedAd:@"b1gumhqnlglb24" RewardedSceneID:@"" extra:loadConfigDict];
```
### 12.5 显示激励广告
```
- (void)showRewardedAd;
```
### 调用示例<a name="sec11.2"></a>
```
// 广告显示,在研发需要进行广告显示的按钮或图标点击事件中调用
[[ZYouManager shareInstance] showRewardedAd];
```
### 12.6 激励广告回调
```
/// 广告位加载完成
/// - Parameter placementID: 广告位ID
- (void)didFinishLoadingADBlock:(void(^)(NSString *placementID))block;
```
```
/// 广告位加载失败
/// - Parameters:
/// - placementID: 广告位ID
/// - error: 错误信息
- (void)didFailToLoadADBlock:(void(^)(NSString *placementID, NSError *error))block;
```
```
/// 获得展示收益
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)didRevenueBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
```
/// 激励成功
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)rewardedVideoDidRewardSuccessBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
```
/// 激励广告视频开始播放
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)rewardedVideoDidStartPlayingBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
```
/// 激励广告视频播放完毕
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)rewardedVideoDidEndPlayingBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
```
/// 激励广告视频播放失败
/// - Parameters:
/// - placementID: 广告位ID
/// - error: 错误信息
/// - extra: 额外信息字典
- (void)rewardedVideoDidFailToPlayBlock:(void(^)(NSString *placementID, NSError *error, NSDictionary *extra))block;
```
```
/// 激励广告已关闭
/// - Parameters:
/// - placementID: 广告位ID
/// - rewarded: 是否已经激励成功,YES表示已经回调了激励成功
/// - extra: 额外信息字典
- (void)rewardedVideoDidCloseBlock:(void(^)(NSString *placementID, BOOL rewarded, NSDictionary *extra))block;
```
```
/// 激励广告已点击
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)rewardedVideoDidClickBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
```
/// 激励广告已打开或跳转深链接页面
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 广告位ID
/// - success: 是否成功
- (void)rewardedVideoDidDeepLinkOrJumpBlock:(void(^)(NSString *placementID, NSDictionary *extra, BOOL result))block;
```
```
/// 激励广告再看一个激励成功
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)rewardedVideoAgainDidRewardSuccessBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
```
/// 激励广告再看一个视频已开始播放
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)rewardedVideoAgainDidStartPlayingBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
```
/// 激励广告再看一个视频播放完毕
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)rewardedVideoAgainDidEndPlayingBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
```
/// 激励广告再看一个视频播放失败
/// - Parameters:
/// - placementID: 广告位ID
/// - error: 错误信息
/// - extra: 额外信息字典
- (void)rewardedVideoAgainDidFailToPlayBlock:(void(^)(NSString *placementID, NSError *error, NSDictionary *extra))block;
```
```
/// 激励广告再看一个已点击
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
- (void)rewardedVideoAgainDidClickBlock:(void(^)(NSString *placementID, NSDictionary *extra))block;
```
### 调用示例<a name="sec11.2"></a>
```
/// 广告位加载完成
/// - Parameter placementID: 广告位ID
[[ZYouManager shareInstance] didFinishLoadingADBlock:^(NSString * _Nonnull placementID) {
NSString *msg = [NSString stringWithFormat:@"广告位%@加载完成", placementID];
[self toastView:msg];
}];
```
```
/// 广告位加载失败
/// - Parameters:
/// - placementID: 广告位ID
/// - error: 错误信息
[[ZYouManager shareInstance] didFailToLoadADBlock:^(NSString * _Nonnull placementID, NSError * _Nonnull error) {
NSString *msg = [NSString stringWithFormat:@"广告位%@加载失败%@", placementID, error.domain];
[self toastView:msg];
}];
```
```
/// 获得展示收益
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] didRevenueBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@获得展示收益", placementID];
[self toastView:msg];
}];
```
```
/// 激励成功
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoDidRewardSuccessBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励成功", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告视频开始播放
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoDidStartPlayingBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告视频开始播放", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告视频播放完毕
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoDidEndPlayingBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告视频播放完毕", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告视频播放失败
/// - Parameters:
/// - placementID: 广告位ID
/// - error: 错误信息
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoDidFailToPlayBlock:^(NSString * _Nonnull placementID, NSError * _Nonnull error, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告视频播放失败%@", placementID, error.domain];
[self toastView:msg];
}];
```
```
/// 激励广告已关闭
/// - Parameters:
/// - placementID: 广告位ID
/// - rewarded: 是否已经激励成功,YES表示已经回调了激励成功
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoDidCloseBlock:^(NSString * _Nonnull placementID, BOOL rewarded, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告已关闭", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告已点击
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoDidClickBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告已点击", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告已打开或跳转深链接页面
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 广告位ID
/// - success: 是否成功
[[ZYouManager shareInstance] rewardedVideoDidDeepLinkOrJumpBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra, BOOL result) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告已打开或跳转深链接页面", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告再看一个激励成功
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoAgainDidRewardSuccessBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告再看一个激励成功", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告再看一个视频已开始播放
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoAgainDidStartPlayingBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告再看一个视频已开始播放", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告再看一个视频播放完毕
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoAgainDidEndPlayingBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告再看一个视频播放完毕", placementID];
[self toastView:msg];
}];
```
```
/// 激励广告再看一个视频播放失败
/// - Parameters:
/// - placementID: 广告位ID
/// - error: 错误信息
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoAgainDidFailToPlayBlock:^(NSString * _Nonnull placementID, NSError * _Nonnull error, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告再看一个视频播放失败%@", placementID, error.domain];
[self toastView:msg];
}];
```
```
/// 激励广告再看一个已点击
/// - Parameters:
/// - placementID: 广告位ID
/// - extra: 额外信息字典
[[ZYouManager shareInstance] rewardedVideoAgainDidClickBlock:^(NSString * _Nonnull placementID, NSDictionary * _Nonnull extra) {
NSString *msg = [NSString stringWithFormat:@"广告位%@激励广告再看一个已点击", placementID];
[self toastView:msg];
}];
```
## 13、透传功能<a name="sec11"></a>
### 透传触发事件
```
/*
研发透传触发事件扩展
event 事件类型
data为NSDictionary 参数以key-value格式添加到data
finishBlock 事件完成回调
*/
- (void)zy_openSdkEvent:(NSString *)event data:(NSDictionary *)data finishBlock:(void(^)(void))finishBlock;
```
### 调用示例<a name="sec11.2"></a>
&nbsp;&nbsp; 获取种花链接
```
NSDictionary *data = @{
@"prop_id": @"123456"//道具id
};
[[ZYouManager shareInstance] zy_openSdkEvent:@"flower_jump" data:data finishBlock:^{
}];
```
### 调用示例<a name="sec11.2"></a>
&nbsp;&nbsp; 上报种花道具
```
NSTimeInterval timestamp = [NSDate date].timeIntervalSince1970;
NSString *cp_role_id = @"123456";
NSString *role_name = @"role_name";
NSDictionary *data = @{
@"cp_role_id": cp_role_id,//cp角色id
@"role_name": role_name,//角色名称
@"expire_time": @(timestamp) ?: @0,//过期时间 秒级时间戳
@"prop_id": @"123456"//道具id
};
[[ZYouManager shareInstance] zy_openSdkEvent:@"flower_report" data:data finishBlock:^{
[self toastView:@"上报成功"];
}];
```
## 服务端接口 调用方直接使用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://zyouapi.wozhangwan.com';
$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);
}
```
No preview for this file type
No preview for this file type
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论