iOS海外SDK接入说明

此文档适用于使用OC接口的SDK(如发现文档错误,请及时联系我们处理)

1 接入指南

1.1 获取配置文件

接入前,需要由项目负责人完成渠道申报并在后台进行配置,从而获取到该游戏的渠道参数, 配置文件,直接加入工程(等同bundle资源).。

1.2 SDK构成

IOS SDK支持 iPhone、iPad,要求armv7、armv7s或arm64架构,操作系统要求Mac要求macOS14以上,Xcode要求15以上,iOS SDK要求11.0以上( :由于新版本Facebook/firebase仅支持iOS13及以上系统,所以SDK目前仅支持iOS13及以上)。
iOS SDK主要由以下几部分构成,如下图:

[1] MIDBaselib 封装静态库
只支持armv7、armv7s和arm64架构,固件要求iOS8.0以上
[2] Thirdilb 第三方静态库.a或Framework
静态库封装调用的第三方静态库或Framework
[3] MIDAnalytics三方统计所需的静态库文件
[4] Splash SDK提供的闪屏支持
苹果2020年4月30日后提交的APP不再支持使用LaunchImage,启动图需要使用StoryBoard来搭建;
StoryBoard介绍:http://sdk.acegames.cn/t3/241/4775/1500008855.html

1.3 搭建开发环境

1.3.1 工程配置

Xcode->Project->Build Settings工程配置
[1] 添加库的连接参数
请在工程文件Build Settings处,找到Other Linker Flags,并添加-ObjC

[2]其他配置参考下图

1.3.2 Framework添加及配置(请特别注意!)

1.打开终端

  1. cd [项目路径]

2.创建目录UnityIOS,此目录为Unity导出iOS工程目录

  1. mkdir UnityIOS

3.检查是否安装CocoaPods,显示当前版本号 如果没有,安装CocoaPods

  1. pod --version

4.初始化第三方依赖配置文件Podfile

  1. pod init

5.编辑Podfile, 并复制下面内容

  1. vim Podfile
  1. source 'https://git.acegames.cn/midsdk/podspec/WPMIDSDKPods.git'
  2. source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
  3. platform :ios, '13.0'
  4. use_frameworks!
  5. project 'UnityIOS/Unity-iPhone.xcodeproj'
  6. target 'Unity-iPhone' do |app|
  7. pod 'WPMIDBundles', '1.0.9'
  8. end
  9. target 'UnityFramework' do
  10. # Facebook登录
  11. pod 'WPMIDSDKFacebookSignIn', '1.0.8'
  12. # 谷歌登录
  13. pod 'WPMIDSDKGoogleSignIn', '1.0.8'
  14. # # 苹果登录
  15. pod 'WPMIDSDKAppleSignInApp', '1.0.4'
  16. # # 苹果GameCenter
  17. pod 'WPMIDSDKGameCenter', '1.0.7'
  18. # 全球
  19. pod 'WPMIDSDKGlobal', '1.1.5'
  20. # Base
  21. pod 'WPMIDSDKBaseSDK', '1.3.1.1'
  22. # share
  23. pod 'WPMIDSDKShare/MID_ShareBase', '1.0.6'
  24. pod 'WPMIDSDKShare/MID_ShareSystem', '1.0.6'
  25. ## #推送
  26. pod 'WPMIDSDKPush/MID_PushFirebase', '1.0.7' #选接,根据需求更新
  27. ##
  28. # #统计
  29. pod 'WPMIDSDKAnalyticsSDK/MID_AnalyticsBase', '1.2.1'
  30. pod 'WPMIDSDKAnalyticsSDK/MID_AppsFlyer', '1.2.1'
  31. pod 'WPMIDSDKAnalyticsSDK/MID_Facebook', '1.2.1'
  32. pod 'WPMIDSDKAnalyticsSDK/MID_Firebase', '1.2.1'
  33. # 激励广告
  34. pod 'WPMIDSDKAppLovin','1.0.9'
  35. # 此处为新增,与上面Unity-iPhone内需要共存,注意添加
  36. pod 'WPMIDBundles', '1.0.9'
  37. end

6.安装SDK和第三方依赖并生成Unity-iPhone.xcworkspace

  1. # 安装SDK和第三方依赖并生成Unity-iPhone.xcworkspace,
  2. pod install --repo-update

7.生成目录如下

  1. |-- Pods MIDSDK和第三方依赖
  2. |-- Podfile.lock CocoaPods版本控制文件
  3. |-- Podfile MIDSDK配置文件
  4. |-- Unity-iPhone.xcworkspace iOS工程文件
  5. |-- UnityIOS Unity导出iOS工程目录

8.打开Unity-iPhone.xcworkspace

  1. open Unity-iPhone.xcworkspace

1.3.3 iOS9、10配置(请特别注意!)

[1] 支持HTTP设置
ios9 下苹果要求 App 内访问网络必须使用 HTTPS ,现阶段不能马上改成 https。
请在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary.在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean,值设为 YES。如下图

[2] 权限设置【必加】
使用Xcode打包时,SDK使用到访问相册功能和iOS14获取idfa需要设置权限使用描述(必加),如下图

  1. <key>NSUserTrackingUsageDescription</key>
  2. <string>为了游戏能更好的提供个性化服务,请允许追踪您的广告标识权限。</string>
  3. <key>LSRequiresIPhoneOS</key>
  4. <true/>
  5. <key>NSPhotoLibraryUsageDescription</key>
  6. <string>您正在尝试访问相册,请允许访问添加照片和视频的权限。</string>
  7. <key>NSCameraUsageDescription</key>
  8. <string>Community Posting - Using image uploads will get your camera permissions</string>

[4] 去除系统冗余日志输出(非必须)
使用Xcode8及以后调试时如有无用日志输出请做以下设置,防止无用的系统日志在控制台输出,如下图

1.3.4 dSYM符号化文件配置(请特别注意!)

[1] dSYM文件
在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件。dSYM文件是iOS编译后保存16进制函数地址映射信息的文件,每次应用程序build后,都会生成对应的xxx.app, xxx.app.dSYM文件。通过此文件可以将16进制地址转换成可读的函数地址,精确定位crash位置,如下图所示:
13.4

[2] 工程配置

1.3.5 内购和苹果登录设置

开启内购和苹果登录前提需要苹果证书设置支持.之后再Xcode进行如下设置.
选择TARGETS->Unity-iPhone修改Signing & Capabilities
1.添加In-App Purchase,如不添加,内购支付无法使用。
2.添加Sign in with Apple,如不添加苹果登录无法使用。

1.3.6 工程 info.plist参数配置表(请特别注意!)

参数名称 必要性 类型 默认值 功能
MIDBase_InitOrientation 必须 String UIInterface
Orientation
Landscape
Right
游戏初始化方向
竖屏:
UIInterfaceOrientationPortrait
右横屏:
UIInterfaceOrientationLandscapeRight
左横屏:
UIInterfaceOrientationLandscapeLeft
MIDBase_Debugmodel 必须 Boolean YES 出包前请将其设置成NO。
主要用于查看控制台日志。
YES:调试模式
NO:出包模式
MIDBase_AutoOrientation 非必须 Boolean YES 设置SDK界面是否支持旋转
YES:支持
NO:关闭
MIDBase_isHiddenInitUI 非必须 Boolean NO 初始化loading图是否展示,值为false或者未添加会默认显示初始化loading图,值为true会隐藏初始化loading图(不建议使用此功能,如果影响游戏展示效果可提前或者推迟调用初始化接口的时机)
  1. <key>MIDBase_InitOrientation</key>
  2. <string>UIInterfaceOrientationLandscapeLeft</string>
  3. <key>MIDBase_AutoOrientation</key>
  4. <true/>
  5. <key>MIDBase_Debugmodel</key>
  6. <true/>
  7. <key>MIDBase_HI_AutoHidden</key>
  8. <false/>
  9. <key>MIDBase_isHiddenInitUI</key>
  10. <false/>

1.3.7 隐藏SDK页面电池条

除去xcode配置全局隐藏电池条外还需检查下图info.plist参数:

1.4 接入准备

服务端配置:请参考 通用接入文档—> 《SDK服务端接入说明文档》

2 初始化和生命周期【必接】

2.1 初始化接口

功能说明

1、初始化第三方SDK,同时获取SDK所需要的初始化数据
2、检查版本更新,初始化内部封装了第三方的更新接口

接口定义

  1. /// 初始化传入资源版本
  2. /// @param viewController 游戏控制器
  3. /// @param version 资源版本号
  4. - (void)MIDSDKInit:(UIViewController *_Nonnull)viewController gameResVersion:(NSString *_Nonnull)version;
  1. [[MIDGameOCSDK shareInstance] MIDSDKInit:根控制器 gameResVersion:@"版本"];

注意:
1.初始化接口在不同游戏引擎添加的位置不同,具体参看代码示例
2.因苹果机制问题,在某些系统版本的某些设备上一些苹果的权限弹框在didFinishLaunchingWithOptions中调用时出不来,可以将初始化放在applicationDidBecomeActive之后来避免这个为题,但需要注意的是不要重复初始化;
3.游戏本身的初始化最好在SDK的初始化结束并成功后开始,因为部分渠道的SDK有自动展示LOGO的功能,如果游戏的初始化先于SDK的初始化或两者并行可能会造成渠道的LOGO展示部出来或显示时间很短的BUG

重要提示

遵守MIDGameOCSDKDelegate,并实现代理

  1. @interface xxxx ()<MIDGameOCSDKDelegate>
  2. end
  3. //所有回调都基于此代理
  4. [MIDGameOCSDK shareInstance].delegate = self;

接口示例

遵守MIDGameOCSDKDelegate

  1. //初始化回调代理
  2. /// 初始化回调
  3. /// @param result 是否成功
  4. /// @param dict 返回内容
  5. - (void)InitCallBackWhitResult:(BOOL)result dict:(NSDictionary *)dict {
  6. //初始化回调结果
  7. if (result) {
  8. //初始化成功
  9. } else{
  10. //初始化失败
  11. }
  12. }

(1)对于coco2d-x引擎:
初始化接口必须放在cocos2d::CCApplication::sharedApplication()->run();之后,且需要添加代码self.window.rootViewController = viewController;

  1. - (void)applicationDidBecomeActive:(UIApplication *)application
  2. {
  3. self.window.rootViewController = viewController;
  4. [window makeKeyAndVisible];
  5. NSLog(@"MIDGameSDK LOG:游戏开始初始化!");
  6. cocos2d::CCApplication::sharedApplication()→run();
  7. NSLog(@"MIDGameSDK LOG:SDK开始初始化");
  8. [[MIDGameOCSDK shareInstance] MIDSDKInit:viewController];
  9. }

(2)对于unity3d引擎:
初始化接口必须放在OnUnityReady();之后。

  1. - (void)startUnity:(UIApplication*)application
  2. {
  3. OnUnityReady();
  4. //SDK初始化
  5. NSLog(@"MIDGameSDK LOG: SDK开始初始化");
  6. [[MIDGameOCSDK shareInstance] MIDSDKInit:unity根控制器];
  7. }

2.2 获取SDK可用接口信息

功能说明:
获取SDK接口是否可用
接口示例:

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetEnableInterface];

返回数据如下,NSDictionary格式
{
“SwitchAccount” : 1,
“Logout” : 1,
“RegisterLogin” : 1,
“EnterAppBBS” : 0,
“IsLogin” : 1,
“EnterPlatform” : 1
}
1: 表示接口可用
0: 表示接口不可用
返回数据说明:
切换账号接口 可用
注销账号接口 可用
注册登录接口 可用
进入论坛接口 不可用
登录状态接口 可用
用户中心接口 可用

2.2.1 直接获取SDK可用接口信息

功能说明:
获取SDK用户中心接口是否可用
接口示例:

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetIsEnterPlatform];

返回bool值,yes为可用No不可用;

2.2.2 直接获取SDK可用接口信息

功能说明:
获取SDK注销接口是否可用
接口示例:

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetIsLogout];

返回bool值,yes为可用No不可用;

2.2.3 直接获取SDK可用接口信息

功能说明:
获取SDK切换账号接口是否可用
接口示例:

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetIsSwitchAccount]

返回bool值,yes为可用No不可用;

2.3 获取渠道信息接口

功能说明:
获取当前SDK渠道信息

2.3.1 获取ServiceId

获取当前游戏包中的ServiceId,(游戏联运渠道ID,游戏可根据此ID区分各发行渠道)。

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetServiceId];

返回NSString字符串

2.3.2 获取渠道ID

获取当前游戏包中的ChannelId,(游戏推广渠道ID,含概CPS渠道,短链渠道等唯一标识)。

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetChannelId];

返回NSString字符串

2.3.3 获取LocaleId

获取当前游戏包中的LocaleId, (游戏发行区域ID)。

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetLocaleId];

返回NSString字符串

2.3.4 获取DeviceGroupId 机型组ID

获取当前游戏包中的DeviceGroupId, (机型组ID)。

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetDeviceGroupId];

返回NSString字符串

2.4 设置openURL

功能说明:
在调用第三方app进行支付、分享、登录时,设置该接口,在完成后回调游戏。
接口定义:

  1. - (BOOL)MIDSDKApplication:(UIApplication *)application handleOpenURL:(NSURL *)url;
  2. - (BOOL)MIDSDKApplication:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options;
  3. - (BOOL)MIDSDKApplication:(UIApplication *)application openURL:(NSURL *)url
  4. sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;

接口示例: (以下三个方法必须都添加)

  1. - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
  2. {
  3. if ([[MIDGameOCSDK shareInstance] MIDSDKApplication:application handleOpenURL:url]) {
  4. return YES;
  5. }
  6. return NO;
  7. }
  8. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  9. sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  10. {
  11. if([[MIDGameOCSDK shareInstance] MIDSDKApplication:application openURL:url sourceApplication:sourceApplication annotation:annotation]) {
  12. return YES;
  13. }
  14. return NO;
  15. }
  16. - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
  17. {
  18. if([[MIDGameOCSDK shareInstance] MIDSDKApplication:app openURL:url sourceApplication:[options valueForKey:@"UIApplicationOpenURLOptionsSourceApplicationKey"] annotation:[options valueForKey:@"UIApplicationOpenURLOptionsAnnotationKey"]]) {
  19. return YES;
  20. }
  21. return NO;
  22. }

2.5 屏幕旋转设置

功能说明:
通过从Info.plist文件中获取的MIDBase_AutoOrientation参数来设置游戏是否支持自动旋转。但还需要在appDelegate.mm中设置以下方法
接口定义:

  1. - (BOOL)MIDSDKApplicationSupportedInterfaceOrientationsForWindow;
  2. - (NSUInteger)MIDSDKApplication:(UIApplication *_Nullable)application supportedInterfaceOrientationsForWindow:(UIWindow *_Nullable)window;

接口示例

  1. - (NSUInteger)application:(UIApplication *)application
  2. supportedInterfaceOrientationsForWindow:(UIWindow *)window
  3. {
  4. if ([[MIDGameOCSDK shareInstance] MIDSDKApplicationSupportedInterfaceOrientationsForWindow]) {
  5. return [[MIDGameOCSDK shareInstance] MIDSDKApplication:application supportedInterfaceOrientationsForWindow:window];
  6. }
  7. returnUIInterfaceOrientationMaskAll;
  8. }

2.6 页面旋转接口

功能说明:
用于控制界面旋转,请添加至rootViewController中
接口示例:

  1. Objective-C
  2. - (BOOL)shouldAutorotate
  3. {
  4. return [[MIDGameOCSDK shareInstance] MIDSDKShouldAutoRotate];
  5. }
  6. Unity3D
  7. BOOL ShouldAutorotate_DefaultImpl(id self_, SEL _cmd)
  8. {
  9. return [[MIDGameOCSDK shareInstance] MIDSDKShouldAutoRotate];
  10. }

2.7 将要进入前台接口

功能说明:
在游戏进入前台时候调用,暂停页已封装入此接口,请添加至AppDelegate.mm中,U3D游戏为AppController.mm中
接口示例:

  1. - (void)applicationWillEnterForeground:(UIApplication*)application
  2. {
  3. [[MIDGameOCSDK shareInstance] MIDSDKApplicationWillEnterForeground:application];
  4. }

2.8 已经进入前台接口

功能说明
在游戏已经进入前台时候调用,请添加至AppDelegate.mm中,U3D游戏为AppController.mm中
接口示例:

  1. - (void)applicationDidBecomeActive:(UIApplication*)application
  2. {
  3. [[MIDGameOCSDK shareInstance] MIDSDKApplicationDidBecomeActive:application];
  4. }

2.9 推送相关生命周期接口

功能说明:
所有推送相关生命周期接口都需要接入

  1. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
  2. [MIDGameOCSDK.shareInstance MIDSDKApplication:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
  3. }
  4. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
  5. {
  6. [MIDGameOCSDK.shareInstance MIDSDKApplication:application didReceiveRemoteNotification:userInfo];
  7. }
  8. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
  9. {
  10. [[MIDGameOCSDK shareInstance] MIDSDKApplication:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
  11. }
  12. - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
  13. {
  14. [MIDGameOCSDK.shareInstance MIDSDKApplication:application didFailToRegisterForRemoteNotificationsWithError:error];
  15. }

3 登录功能【必接】

3.1 登录流程


1.手机游戏客户端会调用sdk进行sdk初始化操作
2.sdk向用户中心服务器发起登录/注册的请求
3.用户中心服务器向sdk返回token、用户信息等等
4.sdk向返回游戏客户单登录结果和用户信息
5.游戏客户端上传用户信息到游戏服务器
6.服务器根据token向用户中心服务器获取用户信息
7.用户中心服务器向游戏服务器返回用户信息
8.游戏服务器向游戏客户端返回登录结果

3.2 登录接口

功能说明:
登录用户中心。游戏客户端调用登录接口,登录成功后SDK会通过代理方法回调通知给游戏客户端。

接口定义:

  1. //登录接口
  2. - (void)MIDSDKRegistLogin;

接口示例:
遵守MIDGameOCSDKDelegate

  1. 引入#import <MIDBaseFramework/MIDParamUserData.h>
  2. //回调函数
  3. - (void)RegistLoginCallBackWhitResult:(BOOL)result userData:(MIDParamUserData *)userData {
  4. if (result) {
  5. //用户登录成功,进入创建角色界面
  6. self.userData = userData;
  7. NSString *message = [NSString stringWithFormat:@"userName :\n%@\nuserID :\n%@\ntoken :\n%@\nloginType :\n%@\nnickName :\n%@\nuserServiceCode:\n%@", self.userData.username, self.userData.uid, self.userData.token, self.userData.logintype, self.userData.nickname,self.userData.userServiceCode];
  8. }
  9. else{
  10. //用户登录失败
  11. }
  12. }

返回的用户数据说明:
登录成功时
uid:平台分配的用户唯一id,区分大小写;
returnJson:第三方SDK平台返回的数据,一般情况下游戏无需关心;
token:分配的tokenId;
logintype:当前用户类型 speedy=快登用户、common=普通用户名密码用户、phone=手机号注册用户、email: 邮箱用户、thirdHidden=第三方隐性用户 、accessToken:token登录;
username:平台中的用户名;
userServiceCode: 用于服务端打点使用;

登录失败时
不返回用户数据

注意:

  1. 返回失败时,SDK不会弹出提示框,需要游戏自行处理失败问题!对于请求超时(状态码为101),也不会弹出提示框,游戏可自动重新连接或自己添加提示框。
  2. 用户区分大小写,相同字母和数字、大小写不同的用户ID代表的是两个不同的用户账号。因此,游戏在使用和存储用户ID时,务必要严格区分大小写,以免造成游戏内账号和角色的混乱等问题。
  3. 如果游戏有自己的用户ID,必须和用户中心的用户ID一一对应,不得出现一对多或者多对一的情况。也不得根据其他条件,组合生成新的用户ID,否则将会出现账号丢失的情况。

3.3 设置角色信息

功能说明:
成功登录并进入游戏后,游戏客户端必须调用此接口设置用户的角色信息,角色信息在其他功能接口中需要用到,如未调用则无法使用支付功能。用户首次创建或注册角色并登录时,需要调用一次注册设置和一次登录设置;用户使用老角色登录,则只需要调用一次登录设置。

注意:
1.游戏内没有角色注册行为的,在游戏自动给用户创建角色的时候,即认为注册。
2.用户首次创建或注册角色并登录时,需先调用注册设置,再调用登录设置。
3.研发需要在本地做基础判断,一些特殊符号不允许出现在角色名、公会名、队伍名、联盟名等名称中,具体符号_(, | { } “ ‘ \ / @ $ # & ! - + ( ) . ? ~ )^ *

接口定义:

  1. - (void)MIDSDKSetGameLoginInfo:(MIDParamOC *)gameInfo gameType:(int)gameType;

参数说明:

参数名称 重要性 类型 说明
GameInfo 必须 MIDGameInfo 设置游戏账号信息
GameType 必须 MIDGameType 用户标识游戏角色注册登录状态,注册:kOCGameRegister; 登录:kOCGameLogin; 角色升级:kOCGameRoleUpgrade

MIDParam参数说明:

参数名称 重要性 类型 说明
RoleName 必须 NSString 游戏角色名称(不支持富文本)
RoleId 必须 NSString 游戏角色 id
ServerId 必须 NSString 游戏服务器id
ServerName 必须 NSString 游戏服务器名称
RoleLevel 必须 NSString 游戏角色等级
RoleVipLevel 必须 NSString 游戏角色vip等级

接口示例:

  1. MIDParamOC *roleInfo = MIDParamOC.sharedInstance;
  2. roleInfo.RoleId = @"123456"; //游戏角色id
  3. roleInfo.RoleName = @"Jack"; //游戏角色名称
  4. roleInfo.ServerId = @"123"; //游戏服务器id
  5. roleInfo.ServerName = @"test"; //游戏服务器名称
  6. roleInfo.RoleLevel = @"1"; //游戏角色等级
  7. roleInfo.RoleVipLevel = @"1"; //游戏角色vip等级
  8. //游戏角色注册成功时调用
  9. [[MIDGameOCSDK shareInstance] MIDSDKSetGameLoginInfo:roleInfo gameType:kOCGameRegister];
  10. //游戏角色登录成功时调用
  11. [[MIDGameOCSDK shareInstance] MIDSDKSetGameLoginInfo:roleInfo gameType:kOCGameLogin];

3.4 注销接口

功能说明:
注销当前登陆账号。注销成功后,SDK会通过代理方法回调通知给游戏客户端。

接口定义:

  1. - (void)MIDSDKLogOut;

接口示例:
遵守MIDGameOCSDKDelegate

  1. //回调函数
  2. - (void)LogOutCallBackWhitResult:(BOOL)result dict:(NSDictionary *)dict {
  3. //返回的字典数据格式说明
  4. 调用登出接口,登出成功时
  5. {"Type":"Logout"}
  6. 调用切换账号,登出成功时
  7. {"Type":"SwitchAccount"}
  8. }
  9. //注销接口
  10. [MIDGameOCSDK.shareInstance MIDSDKLogOut];

3.5 切换账号

功能说明
游戏内切换账号功能,调用接口SDK会先拉起切换页面,用户切换完成后会通过切换账号回调返回用户信息.

接口定义

  1. - (void)MIDSDKSwitchAccount;

接口示例

  1. //回调函数
  2. - (void)SwitchAccountCallBackWhitResult:(BOOL)result userData:(MIDParamUserData * _Nullable)userData{
  3. NSLog(@"*********OC SwitchAccountCallBackWhitResult ******** ");
  4. if(result)
  5. {
  6. //进入登录页面
  7. NSLog(@" 切换账号成功,进入登录页面 ");
  8. self.userData = userData;
  9. NSString *message = [NSString stringWithFormat:@"userName :\n%@\nuserID :\n%@\ntoken :\n%@\nloginType :\n%@\nnickName :\n%@\nuserServiceCode:\n%@", self.userData.username, self.userData.uid, self.userData.token, self.userData.logintype, self.userData.nickname,self.userData.userServiceCode];
  10. NSLog(@"SwitchAccount message = %@",message);
  11. }
  12. else
  13. {
  14. NSLog(@" 切换账号失败 ");
  15. }
  16. }
  17. //切换账号接口
  18. [MIDGameOCSDK.shareInstance MIDSDKSwitchAccount];

3.6绑定账号

功能说明(支持2.1.5及以后版本)
游戏内绑定账号功能,调用接口SDK会先拉起绑定页面,用户绑定完成后会通过绑定账号回调返回用户绑定信息.
注意:
当前渠道带有切换账号功能时,游戏需要实现此接口逻辑进行游戏登录。切换账号分2种情况:
一是调用SDK的切换账号接口实现账号的切换,此类型的切换账号按钮是由游戏去实现,建议放到登录界面,切换账号成功后,登录数据会在此接口返回,游戏可执行游戏的登录流程,类似登录成功接口的回调。
二是渠道SDK的悬浮框或者用户中心页面带有切换账号功能,如用户点击切换账号并登录成功后,登录数据会在此接口返回,但如果当前游戏场景处于游戏中,游戏正常应该先返回到登录界面,然后再通过SDK切换账号成功返回的数据执行游戏的登录流程。

接口定义

  1. - (void)MIDSDKBindAccount;

接口示例

  1. /// 绑定回调
  2. /// @param result 绑定结果
  3. /// @param type 绑定三方类型
  4. /// @param dict 返回内容
  5. - (void)BindAccountCallBackWithResult:(BOOL)result thirdType:(NSString *)type userData:(MIDParamUserData *)userData{
  6. /*
  7. type:三方类型(海外)
  8. "GoogleLogin"
  9. "FBLogin"
  10. "appleLogin"
  11. "TwitterLogin"
  12. "GameCenterLogin"
  13. */
  14. self.userData = userData;
  15. NSString *message = [NSString stringWithFormat:@"userName :\n%@\nuserID :\n%@\ntoken :\n%@\nloginType :\n%@\nnickName :\n%@\nuserServiceCode:\n%@", self.userData.username, self.userData.uid, self.userData.token, self.userData.logintype, self.userData.nickname,self.userData.userServiceCode];
  16. NSLog(@"SwitchAccount message = %@",message);
  17. }

4 支付功能【必接,CB期间根据运营需求接入】

4.1 支付流程


1.sdk向计费服务器发起支付请求
2.计费服务器生成订单号,并向sdk返回支付结果
3.计费服务器通知游戏服务器发货
4.游戏服务器发送虚拟物品至玩家手机游戏客户端
5.游戏服务器向计费服务器返回发货结果

4.2 支付接口

功能说明
游戏客户端通过调用计费接口,实现游戏中的道具购买。游戏客户端调用计费接口,计费成功后,SDK会通过代理方法通知游戏客户端。
接口定义:

  1. - (void)MIDSDKChargeWithParams:(MIDPurchaseParamOC *)params;

参数说明

参数名称 重要性 类型 说明
price 必填 NSString 商品价格,单位详见基础码表(货币编码http://sdk.acegames.cn/t3/241/4774/1500009172.html)货币类型及对应ID
currencyType 必填 NSString 货币类型,详见基础码表(货币编码http://sdk.acegames.cn/t3/241/4774/1500009172.html)货币类型及对应ID
propName 必填 NSString 商品名称,不含数字
propId 必填 NSString 游戏自定义的商品ID,必传。
propNum 必填 NSString 商品数量,只能是数字
propDescribe 非必填 NSString 商品描述
deleverUrl 非必填 NSString 游戏发放道具服务器地址,用户支付成功后计费中心会回调此地址告知游戏进行道具发放。 可以配置到SDK后台。没有请填空字符串@””
extendParams 非必填 NSString 游戏自定义扩展参数
gameRoleLevel 非必填 NSString 游戏角色等级
gameRoleVipLevel 非必填 NSString 游戏角色VIP等级

回调说明

参数名称 类型 说明
result BOOL 是否成功(true:成功,false:失败)
ssId NSString 订单号,失败时可能为空
propId NSString 商品ID,失败时可能为空
code NSString 状态码(附录9.1)
msg NSString 描述信息

接口示例:
遵守MIDGameOCSDKDelegate

  1. - (void)purchase:(UIButton *)btn
  2. {
  3. MIDPurchaseParamOC *params = MIDPurchaseParamOC.sharedInstance;
  4. params.price =@"1";//商品价格,以分为单位(必填)
  5. params.propId = @"1004";//商品id(必填)boringcat.diamond.1
  6. params.currencyType = @"1";//货币类型,人民币为1(必填)
  7. params.propName = @"10元宝";//商品名称,不含数字(必填)
  8. params.propNum = @"1";//商品数量
  9. params.propDescribe = @"";//商品描述(可选)
  10. params.deleverUrl = @"";//发货地址(可选)
  11. params.extendParams = @"";//扩展参数(可选)
  12. [MIDGameOCSDK.shareInstance MIDSDKChargeWithParams:params];//购买接口
  13. }
  14. //代理方法
  15. - (void)OnPurchaseResultWithResult:(BOOL)result ssId:(NSString *)ssId propId:(NSString *)propId code:(NSString *)code msg:(NSString *)msg {
  16. NSString *des = [NSString stringWithFormat:@"result = %@ \n ssid = %@ \n propid = %@ \n code = %@ \n msg = %@" ,result ? @"yes" : @"no" , ssId, propId, code, msg];
  17. if (result) {
  18. NSLog(@" Onurchascallback success = %@",des);
  19. }
  20. else{
  21. NSLog(@" Onurchascallback failed = %@",des);
  22. }
  23. }

4.3礼包码接口

游戏客户端通过调用礼包码接口,实现游戏中的礼包兑换。游戏客户端调用礼包码接口前,需要设置代理,兑换成功后,SDK会通过代理方法通知游戏客户端。
接口定义

  1. /// 礼包码接口
  2. /// @param gameCode 礼包码
  3. /// @param deliverUrl URL
  4. /// @param extendParams 透传参数
  5. - (void)MIDSDKExchangeGameCode:(NSString *)gameCode deliverUrl:(NSString *)deliverUrl extendParams:(NSString *)extendParams;
参数名称 重要性 类型 说明
gameCode 必填 NSString 后台配置的礼包码
deliverUrl 可选 NSString 回调地址,没有需要填@””空字符串
extendParams 必填 NSString 拓展参数

接口示例

  1. //调用
  2. [[MIDGameOCSDK shareInstance] MIDSDKExchangeGameCode:_customPayPrice.text deliverUrl:@"http://pay.acegames.cn/Paycall" extendParams:@""];
  3. //回调方法
  4. - (void)OnGamecodeResultWithResult:(BOOL)result code:(NSString *)code msg:(NSString *)msg {
  5. NSString *des = [NSString stringWithFormat:@"result = %@ \n code = %@ \n msg = %@" ,result ? @"yes" : @"no" , code, msg];
  6. if (result) {
  7. NSLog(@" OnGamecodeResult success = %@",des);
  8. }
  9. else{
  10. NSLog(@" OnGamecodeResult failed = %@",des);
  11. }
  12. }

5 其他功能

5.1 进入用户中心接口【必接】

功能说明:
进入用户中心界面。根据接口MIDSDKGetEnableInterface来判断当前渠道是否支持该接口。
接口示例:

  1. [[MIDGameOCSDK shareInstance] MIDSDKEnterPaltform];

5.2 打开webview【选接】

功能说明
调用native的webview显示页面,带有刷新、前进、后退、关闭的功能

  1. 调用时传入URL即可
  2. [MIDGameOCSDK.shareInstance MIDSDKOpenWebviewWithNavbarWithUrl:url];

5.3 游戏进度上报【必接】

研发上报游戏现在的进度,用于SDK标记游戏现在所处进度,并进行相关操作。
以悬浮层按钮开关为例:
SDK会在进入服务器列表时打开SDK悬浮功能条,
SDK会在离开服务器选择时关闭SDK悬浮功能条,
请研发上报事件时尽量准确。

  1. /**
  2. * 游戏内事件,悬浮按钮定义
  3. */
  4. typedef NS_ENUM(NSUInteger, MIDOCGameProcessEventType) {
  5. GAMEOC_PROCESS_EVENT_TYPE_IN_SELECT_SERVERLIST, /**< 进入到选择服务器列表页面。 */
  6. GAMEOC_PROCESS_EVENT_TYPE_OUT_SELECT_SERVERLIST, /**<离开选择服务器列表页面 */
  7. };

研发主动调用,传入不同的事件用于标记游戏现在所处进度

  1. [[MIDGameOCSDK shareInstance] MIDSDKBaseSendGameProcessEventType:GAMEOC_PROCESS_EVENT_TYPE_IN_SELECT_SERVERLIST];

5.4 客服中心接口【必接】

功能说明:
调用接口打开客服页面,根据接口MIDSDKGetIsEnterPlatform来判断当前渠道是否支持该接口。

  1. [[MIDGameOCSDK shareInstance] MIDSDKUserFeedback];

5.5 获取ServiceCode接口【必接】

功能说明:
登录完成或者切换账号完成以后在登录数据内返回serviceCode;
MIDParamUserData 对象内调用.userServiceCode。

5.6 获取CDN接口【必接】

功能说明:
调用获取CDN列表接口

  1. [MIDGameOCSDK.shareInstance MIDSDKGetCdnPathList];

遵守MIDGameOCSDKDelegate
最后在回调里拿到CDN列表信息

  1. /// cdn回调
  2. /// @param result 是否成功
  3. /// @param dict 返回内容
  4. - (void)UpdateCDNPathListenerWithResult:(BOOL)result dict:(NSDictionary *)dict {
  5. if (result) {
  6. NSLog(@"UpdateCDNPathListener = %@",dict);
  7. [self showMessage:[NSString stringWithFormat:@"%@",[dict objectForKey:@"domainList"]]];
  8. }
  9. else{
  10. NSLog(@"UpdateCDNPathListener = failed");
  11. [self showMessage:@"获取cdn失败"];
  12. }
  13. }

5.7 第三方广告平台打点接口【必接】

接口说明

  1. /// 第三方广告接口
  2. /// @param event_key 事件
  3. /// @param dict 内容
  4. - (void)MIDSDKLogEvent:(NSString *)event_key dictionary:(NSDictionary *)dict;

接口示例

  1. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  2. [dict setObject:[[MIDGameOCSDK shareInstance] MIDSDKGetUserId] forKey:@"userId"];
  3. [dict setObject:@"123456" forKey:@"roleId"];
  4. [[MIDGameOCSDK shareInstance] MIDSDKLogEvent:@"registration" dictionary:dict];

5.8 显示协议页面【必接】

显示隐私协议页面

  1. [[MIDGameOCSDK shareInstance] MIDSDKShowPrivacyView];

5.9 苹果商店评价接口【选接】

必看事项:
调用契机
1,仅在用户展示与您的应用程序的互动后才能要求评级。
2,不要中断用户,特别是当他们执行时间敏感或压力很大的任务时。例如一个购物 App 在用户正在下单的过程中弹出一个请求评分
3,不要像瘟疫。这是个比喻,意思为不要频繁请求评分,烦不胜烦!
4,不要使用按钮和其他控件来请求。因为这个 API 的响应机制受限于 App Store 策略,不受我们把控,谁都不希望点击按钮/控件之后无响应出现,搞得用户莫名其妙!

5.10 评价功能【选接】

5.10.1 应用内评价

必看事项:
该接口在系统10.3及以上的设备中的同一个应用(线上)一年(365天)内只可以展示3次,是否展示由苹果自行处理不受我们控制(该接口需联网);10.3以下设备为跳转商店方式(同下接口),可多次调用,不受一年三次限制,但都受上面调用契机的限制,否则被苹果审核时发现可能会被打回拒审.

示例:

  1. [[MIDGameOCSDK shareInstance] MIDSDKOpenStoreReview];

5.10.2 跳转到苹果商店评价

必看事项:
跳转商店方式(同下接口),可多次调用,不受一年三次限制,系统版本不限,但都受上面调用契机的限制,否则被苹果审核时发现可能会被打回拒审.

示例:

  1. [[MIDGameOCSDK shareInstance] MIDSDKSkipStoreReview];

5.11 获取客户端真实IP【选接】

获取客户端真实IP , 登录成功以后获取。

  1. [[MIDGameOCSDK shareInstance] getClientIP];

5.12 设置语言(海外地区接口)【选接】

注:仅限海外多语言地区使用
如果研发有多语言需求,需要在启动后先设置语言,避免SDK展示语言和游戏展示语言不一致情况。

  1. typedef NS_ENUM(NSUInteger, MIDOCLanguageType){
  2. kOCDefault=0,//默认英文
  3. kOCChinese,//简体
  4. kOCEnglish,//英语
  5. kOCKorean,//韩语
  6. kOCTaiwan,//繁体
  7. kOCGermany,//德语
  8. kOCRussia,//俄语
  9. kOCFrance,//法语
  10. kOCThailand,//泰语
  11. kOCSpain,//西班牙语
  12. kOCItaly,//意大利语
  13. kOCIndonesia,//印度尼西亚语
  14. kOCPortugal,//葡萄牙语
  15. kOCJapanese,//日语
  16. kOCTurkish,//土耳其
  17. kOCVietnam,//越南
  18. kOCNederlands,//荷兰
  19. kOCPolish,//波兰
  20. kOCNorwegian,//挪威
  21. kOCSwedish,//瑞典
  22. };
  23. [[MIDGameOCSDK shareInstance] MIDSDKSetLanguage:kOCDefault];

5.13 获取币种接口【选接】

功能说明:
获取用户当前登录苹果账号充值币种,在需要时调用此接口,在回调里返回具体币种(需要游戏研发和运营确定好计费点,并通知技术支持在gsc后台配置后才能获取).

列表内每一项说明:

key 类型 说明
gscProductId String 商品编码
price String 商品价格。 列如:港币8块钱 此项为: 8.00
title String 商品名
productId String 商品在苹果后台的商品id
currency String 当前货币符号,列如: 港币 此项为:HKD
currencySymbol String 当前货币符号。列如:”$”,
  1. //接口
  2. [[MIDGameOCSDK shareInstance] MIDSDKGetCurrency];
  3. /****************************************************************************************/
  4. 遵守MIDGameOCSDKDelegate
  5. 最后在回调里拿到币种信息
  6. - (void)CurrencyCallBackWithCurrency:(NSDictionary *)dict {
  7. NSLog(@"当前币种 = %@",dict);
  8. NSArray *array = [dict objectForKey:@"array"];
  9. NSInteger count = [array count];
  10. for (int i = 0; i < count; i++) {
  11. NSDictionary *info = array[i];
  12. NSLog(@"info%d = %@",i,info);
  13. }
  14. dispatch_async(dispatch_get_main_queue(), ^{
  15. UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"demo提示"
  16. message:[NSString stringWithFormat:@"%@",dict]
  17. preferredStyle:UIAlertControllerStyleAlert];
  18. UIAlertAction *enter = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
  19. [alert addAction:enter];
  20. [self presentViewController:alert animated:YES completion:nil];
  21. });
  22. }

5.14 隐私设置回调【选接】

接口说明:获取当前隐私设置

  1. /// 隐私协议结果监听
  2. - (void)MIDSDKGetGDPRPrivacy:(PrivacyfuncCallBack _Nullable )privacyCallBack;

调用方法:
SDK通过此回调返回给研发隐私协议选择状态。
在初始化的时候同时设置隐私协议回调。
SDK在首次安装 弹出隐私协议后返回。用户同意协议后每次启动SDK不在弹出隐私协议,但是SDK会返回同意状态。

  1. [MIDGameOCSDK.shareInstance MIDSDKGetGDPRPrivacy:^(BOOL isAgreePrivacy, NSDictionary *result) {
  2. NSLog(@"用户%@了协议",isAgreePrivacy ? @"同意" : @"拒绝");
  3. }];

回调说明:
针对适应GDPR法案协议参数解释。其他地区只需要关心(isAgreePrivacy)是否同意即可。

参数 参数说明
isAgreePrivacy 是否同意了协议
result 同意详情。具体选择了那种模式 ,NSDictionary格式,GDPR专用,不适应GDPR法案的协议为null
personalizedDiscounts [result objectForKey:@”personalizedDiscounts”]第一选项: 0:不同意;1:同意
marketingPurposes [result objectForKey:@”marketingPurposes”]第二选项:0:不同意;1:同意

5.15 问卷调查打开【选接】

需要和技术支持协商使用,
问卷调查ID需要在平台配置。
(透传参数数量不能超过10个)
接口说明:

  1. /**
  2. * 打开问卷调查
  3. * @param QuestionId 问卷id
  4. * @param roleLv 角色等级
  5. * @param roleVipLv 角色vip等级
  6. * @param customParams 透传参数 研发自定义 可以为null,(透传参数数量不能超过10个)
  7. */
  8. - (void)MIDSDKOpenQuestionnaireWithQuestionId:(NSString *_Nonnull)QuestionId roleLv:(NSString *_Nonnull)roleLv roleVipLv:(NSString *_Nonnull)roleVipLv customParams:(NSDictionary *_Nullable)customParams;

调用方法:

  1. NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
  2. [dict setValue:@"value1" forKey:@"key1"];
  3. [dict setValue:@"value2" forKey:@"key2"];
  4. [[MIDGameOCSDK shareInstance] MIDSDKOpenQuestionnaireWithQuestionId:@"1" roleLv:@"44" roleVipLv:@"9" customParams:dict];

5.16 清除当前角色信息【选接】

接口说明:角色登出时清除当前登录的角色信息

  1. /// 角色登出
  2. - (void)MIDSDKClearRoleData;

调用方法:

  1. /// 角色登出
  2. [[MIDGameOCSDK shareInstance] MIDSDKClearRoleData];

5.17 获取客户端国家【选接】

接口说明:

  1. - (NSString *)MIDSDKGetClientLocationCountry; // 获取客户端国家

调用方法:

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetClientLocationCountry];

5.18 获取客户端省份【选接】

接口说明:

  1. - (NSString *)MIDSDKGetClientLocationProvince; // 获取客户端省份

调用方法:

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetClientLocationProvince];

5.19 服务器公告【选接】

接口说明:当前仅支持登录公告样式,其他公告调用会出现异常.

  1. //公告带服务器ID
  2. - (void)MIDSDKGetNoticeWithType:(int)noticeType serverid:(NSString *)serverid;

调用方法:

  1. [[MIDGameOCSDK shareInstance] MIDSDKGetNoticeWithType:kOCNoticeLogin serverid:@"服务器ID"];

5.20 社区接口【选接】

5.20.1 直接打开社区页面接口

接口说明:调用展示社区页面(需要在后台提前配置社区页面).

  1. //论坛 默认颜色(#edededff)
  2. - (void)MIDSDKShowForumView;

调用方法:

  1. [[MIDGameOCSDK shareInstance] MIDSDKShowForumView];

5.20.2 透传参数到社区接口

接口说明:调用展示社区页面(需要在后台提前配置社区页面).

  1. //论坛 默认颜色(#edededff)
  2. /// - customparas: 透传参数,json格式字符串,可传空字符串
  3. - (void)MIDSDKShowForumView:(NSString *_Nullable)customparas;

调用方法:

  1. //NSString *customparas = @"{"function":"topicId","data":"帖子ID"}";
  2. NSMutableDictionary *mDict = [[NSMutableDictionary alloc] init];
  3. [mDict setObject:@"topicId" forKey:@"function"];
  4. [mDict setObject:@"帖子ID" forKey:@"data"];
  5. NSString *customparas = [self convertToJsonData:mDict];//字典转字符串
  6. [[MIDGameOCSDK shareInstance] MIDSDKShowForumView:customparas];

customparas 介绍

字段 类型 介绍
function string 功能标识;请参考下面function介绍
data string 根据不同的function传递不同的数据

function介绍

function固定值 类型 介绍
topicId string 标识打开指定帖子,此时data中应该传帖子ID;
subjectId string 标识打开话题主页,此时data 中应该传话题id;
encyclopedia string 标识打开百科页面; data可以指定百科的URL地址; data没有值默认打开百科首页
gift-bag string 标识打开礼包中心;
userCenter string 标识打开个人中心; 如果不填写该值,默认跳转到社区首页;

5.20.3 透传参数到社区并设置社区背景颜色接口

接口说明:调用展示社区页面(需要在后台提前配置社区页面).

  1. /// 社区设置背景颜色并透传参数
  2. /// - Parameters:
  3. /// - customparas: 透传参数,json格式字符串,可传空字符串
  4. /// - colorHex: 16进制颜色码例如:(0xff0000为红色),使用默认颜色(#edededff)可传空字符串
  5. - (void)MIDSDKShowForumView:(NSString *_Nullable)customparas colorHex:(NSString *_Nullable)colorHex;

调用方法:

  1. NSMutableDictionary *mDict = [[NSMutableDictionary alloc] init];
  2. [mDict setObject:@"topicId" forKey:@"function"];
  3. [mDict setObject:@"帖子ID" forKey:@"data"];
  4. NSString *customparas = [self convertToJsonData:mDict];//字典转字符串
  5. [[MIDGameOCSDK shareInstance] MIDSDKShowForumView:customparas colorHex:@"0xff0000"];

customparas 介绍

字段 类型 介绍
function string 功能标识;请参考下面function介绍
data string 根据不同的function传递不同的数据

function介绍

function固定值 类型 介绍
topicId string 标识打开指定帖子,此时data中应该传帖子ID;
subjectId string 标识打开话题主页,此时data 中应该传话题id;
encyclopedia string 标识打开百科页面; data可以指定百科的URL地址; data没有值默认打开百科首页
gift-bag string 标识打开礼包中心;
userCenter string 标识打开个人中心; 如果不填写该值,默认跳转到社区首页;

5.20.4 社区打开/关闭回调接口

功能说明:
调用打开社区接口

遵守MIDGameOCSDKDelegate
最后在回调里拿到社区开关信息

  1. - (void)GetOpenForumViewCallBack:(BOOL)isOpen{
  2. //isOpen=true为打开,=false为关闭
  3. // NSString *open = [NSString stringWithFormat:@"社区%@", isOpen ? @"打开" : @"关闭"];
  4. NSLog(@"*********GetOpenForumViewCallBack********\n%@",isOpen ? @"open" : @"close");
  5. }

5.21 客服开关【选接】

接口说明:用来判断当前客服接口是否可用.

  1. /// 客服开关,返回yes时表示客服可用
  2. - (BOOL)MIDSDKCustomerServiceSwitch;

调用方法:

  1. BOOL isOK = [[MIDGameOCSDK shareInstance] MIDSDKCustomerServiceSwitch];

5.22 当前登录是否为游客【选接】

接口说明:用来判断当前登录是否为游客.

  1. /// 当前登录是否为游客,=yes为游客
  2. - (BOOL)MIDSDKIsSpeedyUser;

调用方法:

  1. BOOL isOK = [[MIDGameOCSDK shareInstance] MIDSDKIsSpeedyUser];

5.23 将字符串复制到剪切板【选接】

接口说明:将传入的字符串复制到剪切板

  1. /// 将字符串复制到剪切板
  2. /// - Parameter string: 需要剪切的字符串
  3. - (void)MIDSDKCopyStringtoPasteboard:(NSString *_Nonnull)string;

调用方法:

  1. [[MIDGameOCSDK shareInstance] MIDSDKCopyStringtoPasteboard:@"需要复制的内容"];

5.24 是否是刘海屏【选接】

接口说明:用来判断当前设备是否是刘海屏.

  1. /// 客服开关,返回yes时表示客服可用
  2. - (BOOL)MIDSDKIsNotchScreen;

调用方法:

  1. BOOL isOK = [[MIDGameOCSDK shareInstance] MIDSDKIsNotchScreen];

5.25 获取屏幕除安全区域坐标【选接】

接口说明:用来获取屏幕除安全区域坐标.

  1. /// 获取屏幕除安全区域坐标
  2. - (CGRect)MIDSDKGetScreenSafeArea;

调用方法:

  1. CGRect safeRect = [[MIDGameOCSDK shareInstance] MIDSDKGetScreenSafeArea];
  2. float x = safeRect.origin.x;
  3. float y = safeRect.origin.y;
  4. float w = safeRect.size.width;
  5. float h = safeRect.size.height;

5.26 设备ID【选接】

接口说明:用来获取当前设备ID.

  1. /// 设备ID
  2. - (NSString *_Nullable)MIDSDKGetDeviceId;

调用方法:

  1. NSString *deviceId = [[MIDGameOCSDK shareInstance] MIDSDKGetDeviceId];

5.27 设备内存【选接】

接口说明:用来获取当前设备内存大小.

  1. /// 设备内存
  2. - (NSString *_Nullable)MIDSDKGetPhysicalMemory;

调用方法:

  1. NSString *deviceMemory = [[MIDGameOCSDK shareInstance] MIDSDKGetPhysicalMemory];

5.28 当前语言【选接】

接口说明:用来获取当前语言.

  1. /// 当前语言
  2. - (NSString *_Nullable)MIDSDKGetPreferredLanguage;

调用方法:

  1. NSString *language = [[MIDGameOCSDK shareInstance] MIDSDKGetPreferredLanguage];

5.29 游戏异常文件上报【选接】

接口说明:
用于游戏自己生成的异常文件上报,
异常文件需要小于10兆。

  1. /// 发送log文件日志
  2. /// - Parameters:
  3. /// - file: 文件路径
  4. /// - message: 透传信息
  5. - (void)MIDSDKSendLogWithFile:(NSString *_Nonnull)file message:(NSString *_Nonnull)message;

调用方法:

  1. [[MIDGameOCSDK shareInstance] MIDSDKSendLogWithFile:文件路径 message:@"透传"];

5.30 设置游戏资源版本号【选接】

接口说明:
用于同步给SDK当前游戏资源版本。

  1. /// 设置游戏资源版本号
  2. /// - Parameter gameResVersion: 版本
  3. - (void)MIDSDKSetGameResVersion:(NSString *_Nonnull)gameResVersion;

调用方法:

  1. [[MIDGameOCSDK shareInstance] MIDSDKSetGameResVersion:@"版本号"];

5.31 隐私协议开关状态【选接】

接口说明:
用于获取隐私协议开关状态。

  1. /// 隐私协议开关
  2. - (BOOL)MIDSDKGetIsAgreement;

调用方法:

  1. BOOL switch = [MIDGameOCSDK.shareInstance MIDSDKGetIsAgreement];

5.32 推送功能【选接】

点击跳转推送补充文档

5.33 分享邀请链接和归因功能【选接】

接口说明:
用于向用户分享邀请链接。
注意:
1.该功能需要先在appsflyer后台配置深链接功能并添加对应链接;
2.需将深链接根据文档第8.3条说明点击加号额外配置到Xcode工程的通用链接里。
3.该功能需要同步接入文档第7条分享功能。

5.33.1 分享邀请深链接

  1. /// 分享邀请深链接
  2. /// 与分享接口(MIDSDKShareThirdPlatformView/MIDSDKShareThirdPlatformWithChannel)共用一个回调(ShareThirdPlatformCallBackWithShareType)<参考文档7.3>
  3. /// - Parameter templateId: 模板 ID(appsflyer后台提供)
  4. /// - Parameter inviteMsg: 分享描述文字内容
  5. - (void)MIDBaseSDKShareInvite:(NSString *_Nonnull)templateId inviteMsg:(NSString *_Nonnull)inviteMsg;

调用方法:

  1. [[MIDGameOCSDK shareInstance] MIDBaseSDKShareInvite:模板ID inviteMsg:文字描述];

以上接口会通过文档7.3条分享回调获取链接分享结果

5.34 获取appsflyer归因数据【选接】

注意:BaseSDK3.2.2版本启用
接口说明:
用于获取af返回的归因数据。
appsflyer文档地址:https://zh.dev.appsflyer.com/hc/docs/dl_ios_ocds_ddl#implementation

  1. /// 获取af归因数据
  2. /// - Parameter key: 数据参数对应key(af_adset/af_status/campaign)
  3. - (NSString *_Nullable)getAFConversionData:(NSString *_Nonnull)key;

调用方法:

  1. NSString *tmp = [MIDGameOCSDK.shareInstance MIDSDKGetAFConversionData:key];

6 三方登录接入说明【选接】

6.1 Facebook登录接入(同分享配置)

6.1.1 URLtype配置

需要在info.plist的URLtype中填写Facebook参数,id处填入”FacebookAppID”,红线处填入”fb+facebookid”格式,所需参数由运营提供

(图为谷歌和Facebook配置)

6.1.2 info.plist单独配置

红线处填入FacebookID和name和token,参数由运营提供

  1. <key>FacebookAppID</key>
  2. <string>FacebookID</string>
  3. <key>FacebookDisplayName</key>
  4. <string>facebookname</string>
  5. <key>FacebookClientToken</key>
  6. <string>新增token</string>

6.1.3 info.plist白名单配置

  1. <key>LSApplicationQueriesSchemes</key>
  2. <array>
  3. <string>fbshareextension</string>
  4. <string>fb-messenger-api</string>
  5. <string>fbapi</string>
  6. <string>fbauth2</string>
  7. <string>fbapi20130214</string>
  8. <string>fbapi20130410</string>
  9. <string>fbapi20130702</string>
  10. <string>fbapi20131010</string>
  11. <string>fbapi20131219</string>
  12. <string>fbapi20140410</string>
  13. <string>fbapi20140116</string>
  14. <string>fbapi20150313</string>
  15. <string>fbapi20150629</string>
  16. <string>fbapi20160328</string>
  17. <string>fbauth</string>
  18. <string>fb-messenger-share-api</string>
  19. <string>fbshareextension</string>
  20. </array>

6.1.4 引入FacebookSDK

完成前置的[1.3.2]通过pod引入所需库。

新版Facebook9.0.0以上版本需支持swift桥接,步骤如下图:
打开xcode-file-new-file…

选择Swift File - Next

选择自己的项目工程打钩-点击create

点击create bridging header

6.2 谷歌登录接入

6.2.1 URLtype配置

同6.1.1Facebook接入图
需要在info.plist的URLtype中填写Google参数,id处填入”GoogleID”,红线处填入”com.googleusercontent.apps. + id”格式,所需参数由运营提供

6.2.2 info.plist单独配置

GIDClientID配置和URLtype相反”id + .apps.googleusercontent.com”.

  1. <key>GIDClientID</key>
  2. <string>"googleid".apps.googleusercontent.com</string>

6.2.3 引入GoogleSDK

完成前置的[1.3.2]通过pod引入所需库。

7 分享【选接】

目前仅支持”系统分享”的图片和链接分享功能

7.1 分享参数

7.1.1.分享图片

参数名 类型 重要性 说明
OPSParam_ShareType NSString (必填) OPShareImage
OPSParam_ImagePath NSString (必填) 本地图片路径

7.1.2.分享链接

参数名 类型 重要性 说明
OPSParam_ShareType NSString (必填) OPShareLink
OPSParam_ImagePath NSString (必填) 本地图片路径
OPSParam_Text NSString (必填) 文本内容
OPSParam_LinkTitle NSString (必填) 链接标题
OPSParam_LinkDesc NSString (必填) 链接描述
OPSParam_LinkUrl NSString (必填) 链接地址

7.1.3.分享参数宏定义

需引入头文件

  1. #import <MIDBaseFramework/MIDSDKEnum.h>
  1. //***************分享场景*******************
  2. #define SceneWeChat @"WeChat" //微信好友
  3. #define SceneWeChatLine @"WeChatLine" //微信朋友圈
  4. #define SceneQQ @"QQ" //QQ好友
  5. #define SceneQzone @"Qzone" //QQ空间
  6. #define SceneSinaWeibo @"SinaWeibo" //新浪微博
  7. #define SceneFacebook @"Facebook" //Facebook
  8. #define SceneTwitter @"Twitter" //Twitter
  9. #define SceneSystem @"System" //系统
  10. //***************分享参数********************
  11. #define OPSParam_ShareType @"ShareType" //分享类型标识
  12. #define OPShareText @"ShareText" //分享文本
  13. #define OPShareImage @"ShareImage" //分享图片
  14. #define OPShareLink @"ShareLink" //分享链接
  15. #define OPSParam_Text @"Text" //文本
  16. #define OPSParam_ImagePath @"ImagePath" //图片本地地址
  17. #define OPSParam_LinkTitle @"LinkTitle" //链接标题
  18. #define OPSParam_LinkDesc @"LinkDesc" //链接描述
  19. #define OPSParam_LinkUrl @"LinkUrl" //链接地址
  20. #define OPSParam_NOAPPID @"NOAPPID" //特殊参数,暂时无用

7.2 分享接口

接口定义:

  1. //第三方分享
  2. - (void)MIDSDKShareThirdPlatformView:(NSDictionary *_Nonnull)dict;

接口示例

  1. //分享图片
  2. NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
  3. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"localPic" ofType:@"png"];
  4. [dic setObject:OPShareImage forKey:OPSParam_ShareType];
  5. [dic setObject:filePath forKey:OPSParam_ImagePath];
  6. [[MIDGameOCSDK shareInstance] MIDSDKShareThirdPlatformView:dic];
  7. ==========================================================================
  8. //分享链接
  9. NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
  10. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"localPic" ofType:@"jpg"];
  11. [dic setObject:OPShareLink forKey:OPSParam_ShareType];
  12. [dic setObject:@"testTitle" forKey:OPSParam_LinkTitle];
  13. [dic setObject:@"http://sdk.acegames.cn/" forKey:OPSParam_LinkUrl];
  14. [dic setObject:@"testDesc" forKey:OPSParam_LinkDesc];
  15. [dic setObject:filePath forKey:OPSParam_ImagePath]; //多媒体内容中缩略图大小不能大于32K
  16. [[MIDGameOCSDK shareInstance] MIDSDKShareThirdPlatformView:dic];

7.3 分享回调

接口定义:

  1. /// 第三方分享回调
  2. /// @param shareType 分享类型
  3. /// @param errCode 错误码
  4. /// @param dict 返回内容
  5. - (void)ShareThirdPlatformCallBackWithShareType:(NSString *_Nonnull)shareType errCode:(int)errCode dict:(NSDictionary *_Nonnull)dict;

接口示例:

  1. - (void)ShareThirdPlatformCallBackWithShareType:(NSString *)shareType errCode:(int)errCode dict:(NSDictionary *)dict {
  2. if (errCode == 1) {
  3. [self showMessage:[NSString stringWithFormat:@"%@分享成功",shareType]];
  4. }else if (errCode == 0){
  5. [self showMessage:[NSString stringWithFormat:@"%@分享取消",shareType]];
  6. } else {
  7. [self showMessage:[NSString stringWithFormat:@"%@分享失败",shareType]];
  8. }
  9. }

7.4 三方登录和分享生命周期方法

新版三方登录和分享支持URLlink,需增加实现生命周期方法接入

  1. - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
  2. if ([[MIDGameOCSDK shareInstance] MIDSDKApplication:application continueUserActivity:userActivity restorationHandler:restorationHandler]) {
  3. return YES;
  4. }
  5. return NO;
  6. }

7.5 特别提示

1.在通过系统分享拉起Twitter分享链接时,如果带缩略图则自动变成图片分享,无法正常分享链接;
2.在通过系统分享拉起Facebook分享链接时,无论带不带缩略图都不会显示缩略图;
3.建议海外版本在使用系统分享链接时不传缩略图.

8 其他文档

8.1 APPLOVIN广告 【选接】

整合了APPLOVINSDK,包含加载激励广告,打开激励广告等功能。点击链接查看详情
文档地址:http://sdk.acegames.cn/t3/241/4775/1500009574.html

8.2 firebase崩溃收集

在Xcode15及以上版本可以配置脚本,以在构建阶段自动上传符号表文件(已上传苹果后台的无法生效,只针对构建阶段上传),配置方式详见firebase文档(https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=ios&authuser=0&hl=zh-cn);

8.3 通用链接配置

需根据文档配置到unity导出的工程内
https://sdk.acegames.cn/t3/241/4775/1500010117.html

8.4 推送功能【选接】

整合了firebase推送和苹果原生推送,包含远程推送、本地推送、移除推送等。点击链接查看详情
文档地址:https://sdk.acegames.cn/t3/241/4775/1500010198.html

9 附录

9.1 客户端错误码

状态码 说明
101 连接超时
102 网络异常,请检查网络
103 数据异常
104 SDK初始化参数错误
105 SDK语言配置文件错误
106 midgame.cfg配置文件错误
107 SDK未初始化成功
108 SDK未设置登录回调
109 未设置服务器id
110 未设置价格
111 未设置货币类型
112 未设置商品名称
113 未设置商品id
114 未设置虚拟货币单位
115 未设置虚拟货币数量
116 未设置发货地址
117 未设虚拟货币单位
118 未设商品数量
119 用户取消支付
120 支付失败
121 支付页面加载失败
122 登录状态有问题
123 订单不合法
129 未知错误,请重试
130 当前Apple ID无法购买商品,请联系Apple客服
131 用户取消购买
132 商品ID无效
133 此设备无法购买商品,请在[通用]-[访问权限]-[APP内购买]中开启
134 当前商品配置未生效
135 返回信息超时,请等待3-5分钟,查询是否充值成功
136 特殊错误,请重试
137 货币信息异常 被刷
138 货币码不实时
139 无效的商品列表
140 商品信息获取失败,请稍后再试
141 下单操作过于频繁
200 支付成功
201 下单成功

9.2 货币类型及对应ID

货币ID 货币名称 货币单位
1 人民币
2 美元 美分
3 日元
4 港币
5 英镑 便士
6 新加坡币
7 越南盾
8 台币
9 韩元
10 泰铢 萨当