(1) 请确保有4399运营分配的4399 GameKey用于SDK的配置和初始化
(2) 配置URL Schemes
在Xcode -> TARGETS -> [主工程Target] -> Info
-> URL Type 中点击 +
添加一个新的Item,在URL Schemes中填入OM[GameKey],其中[GameKey]为步骤(1)中获取的key。例如OM6720935971,
中间请勿加入任何分隔符。未完成本步骤,可能造成QQ/微信登录无法使用。
(3) 在 Xcode -> TARGETS -> [主工程Target]
-> Info -> Custom iOS Target Properties 中配置隐私权限提示语。
游戏中如果已经有上述隐私描述,则无需修改。未添加可能导致游戏闪退。
(4) 关闭ATS,在Xcode -> TARGETS ->
[主工程Target] -> Info -> Custom iOS Target
Properties,添加App Transport Security Settings,并为其添加子项目Allow Arbitrary Loads设置为YES
(5)
增加URLSchemes白名单,用于保障QQ登录正常运行。在Info.plist中添加LSApplicationQueriesSchemes类型Array,添加String类型的子项mqq,sso4399,gamehotspot,weixinULAPI,wechat,weixin,已有其他白名单的游戏,直接在原有基础上新增即可。
也可在Info.plist中编辑完成(2)(3)(4)(5)步
<!--URL Schemes-->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>OM62019492383</string><!--请根据实际Gamekey配置本行-->
</array>
</dict>
</array>
<!--ATS-->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<!--隐私权限说明-->
<key>NSAppleMusicUsageDescription</key>
<string>实名认证功能需要您同意,才能访问媒体库。</string>
<key>NSCameraUsageDescription</key>
<string>实名认证功能需要您同意,才能访问相机。</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>实名认证功能需要您同意,才能访问相册。</string>
<!--Schemes白名单-->
<key>LSApplicationQueriesSchemes</key>
<array>
<string>mqq</string>
<string>sso4399</string>
<string>gamehotspot</string>
<string>weixinULAPI</string>
<string>wechat</string>
<string>weixin</string>
</array>(6) 关闭Bitcode,在 Xcode -> TARGETS -> Build
Settings中,Enable Bitcode设置为No
(7) 打开Swift支持,在 Xcode -> TARGETS -> Build
Settings中,Always Embed Swift Standard Libraries设置为Yes
(8) 将下列SDK依赖文件引入工程
(9) 在 Xcode -> TARGETS -> [主工程Target]
-> General -> Framework, Libraries, and Embedded
Content中,将m4399OM.xcframework,MTDQuickLogin.xcframework的Embed选项设置为Embed & Sign
(10) 配置Apple ID 登录
Certificates, Identifiers & Profiles->Identifiers中找到游戏的Bundle
ID,进入配置。Sign In with Apple,如无特殊需求,在Configuration界面配置Enable as a primary App IDSignning & Capabilities中按+添加Sign In with Apple能力描述+ (void)preConfig:(m4399OMManagerConfig *)config gameProtocolState:(void (^)(NSInteger code))gameProtocolState lastLoginUser:(void (^)(OMUser *_Nullable user))lastLoginUser switchAccount:(void (^)(void))switchAccount;请务必在AppDelegate的
- application: didFinishLaunchingWithOptions:中调用本接口,确保配置信息正确加载。
新旧初始化接口二选一,请勿重复调用
m4399OMManagerConfig参数说明
请使用- (instancetype)initWithGamekey:(NSString *)gamekey或- (instancetype)initWithGamekey:(NSString *)gamekey customAnalysisAttributes:(NSDictionary<NSString *, NSString * _Nullable > *)customAnalysisAttributes初始化config,customAnalysisAttributes用于定制的全局分析字段,与预制字段冲突时会使用指定字段。
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| gameKey | NSString | 4399 OMSDK Key,请向运营人员索取。 | |
| printLog | Bool | false | 打印OMSDK日志 |
| debugHeartbeatInterval | Double | -1 | 强制心跳间隔,用于开发期间调试使用,切勿在线上环境修改本参数。小于0时失效。 |
gameProtocolState回调说明
游戏协议回调,code定义:0 用户同意协议;160001 协议无更新通知;
lastLoginUser回调说明
该回调会返回上一次运行时用户使用的身份信息,如果用户未手动注销,并且在本次启动时校验身份后,会调用本回调返回用户信息(可能为空)。仅会在配置接口调用后最多调用一次。
若出现网络异常、防沉迷系统异常等情况,用户信息可能为空,此时可以调用登录接口进行登录。
若网络波动,此回调可能会较慢返回。
switchAccount回调说明
用户因防沉迷踢出或主动注销账号、用户在别处登录/修改密码、切换账号等情况,会调用本回调。游戏方在接收到该回调时,应注销游戏中存储的用户信息,返回登录界面,无需再调用logout接口。此时如需弹出SDK的登录界面,可在本回调中调用login接口。本回调可能在游戏运行期间随时被调用。
+ (void)config:(m4399OMManagerConfig *)config lastLoginUser:(void (^)(OMUser *_Nullable user))lastLoginUser switchAccount:(void (^)(void))switchAccount;请务必在AppDelegate的
- application: didFinishLaunchingWithOptions:中调用本接口,确保配置信息正确加载。
m4399OMManagerConfig参数说明
请使用initWithGameKey初始化config
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| gameKey | NSString | 4399 OMSDK Key,请向运营人员索取。 | |
| printLog | Bool | false | 打印OMSDK日志 |
lastLoginUser回调说明
该回调会返回上一次运行时用户使用的身份信息,如果用户未手动注销,并且在本次启动时校验身份后,会调用本回调返回用户信息(可能为空)。仅会在配置接口调用后最多调用一次。
若出现网络异常、防沉迷系统异常等情况,用户信息可能为空,此时可以调用登录接口进行登录。
若网络波动,此回调可能会较慢返回。
switchAccount回调说明
用户因防沉迷踢出或主动注销账号、用户在别处登录/修改密码、切换账号等情况,会调用本回调。游戏方在接收到该回调时,应注销游戏中存储的用户信息,返回登录界面,无需再调用logout接口。此时如需弹出SDK的登录界面,可在本回调中调用login接口。本回调可能在游戏运行期间随时被调用。
+ (void)handlerUrl:(NSURL *)url;在AppDelegate的-application:openURL:options:方法中调用本方法,传入方法参数openURL。该方法保障QQ登录功能正常运行。
+ (void)loginWithSuccess:(void (^)(OMUser *_Nullable user))success fail:(void (^)(int code, NSString *_Nonnull msg))fail;在用户需要进行登录时调用本接口,会在应用最顶层window中弹出登录界面。
如果为应用启动时的调用,则需等待初始化接口中的lastLoginUser回调执行后,方可调用本接口,否则可能引起防沉迷系统异常。
success登录成功回调,在用户登录成功后调用,返回用户登录信息。
fail登录失败回调,在登录遇到错误时调用,返回错误码和错误信息。
+ (void)logout;在用户需要进行登出时调用本接口。
注:调用本接口时,同样会触发初始化配置接口的switchAccount回调
+ (void)userCenter:(void(^)(void))didClose;在需要启动用户中心时调用本接口,会在应用最顶层window中弹出个人中心。
仅限用户登录后使用本接口。
didClose窗口关闭回调。
+ (void)checkPhoneBindingStatus:(void(^)(BOOL isBinding))success fail:(void(^)(NSInteger code, NSString *message))fail;在需要检查用户手机绑定状态时调用本接口,会返回是否绑定手机
仅限用户登录后使用本接口。
success手机绑定状态回调。
fail手机绑定检查失败回调,返回错误码和错误信息。
+ (void)bindPhoneNumberWithSuccess:(void(^)(void))success fail:(void(^)(NSInteger code, NSString *message))fail;在需要绑定手机时调用本接口,会在应用最顶层window中弹出绑定手机页面。
仅限用户登录后使用本接口。
success手机绑定成功回调。
fail手机绑定失败回调,返回错误码和错误信息。
| Fail Code | 含义 |
|---|---|
| 201 | 用户已绑定手机号 |
| 901 | 网络错误 |
| 902 | 用户取消绑定手机 |
| 606/607/608 | 用户在其他设备登录 |
+ (void)onlineCustomerService:(void(^)(void))didClose;在需要在线客服时调用本接口,会在应用最顶层window中弹出客服界面。
+ (void)customerService:(void(^)(void))didClose;在用户需要联系客服时调用本接口,会在应用最顶层window中弹出客服界面。
didClose窗口关闭回调。
+ (void)prepayWithMoney:(int)money mark:(NSString *)mark success:(void (^)(NSString *orderId))success fail:(void (^)(int code, NSString *message))fail;在用户发起充值后,优先调用本接口获得用户充值许可,以确保用户在符合防沉迷规则的前提下进行充值行为。
仅限用户登录后使用本接口。
money 充值金额(元)最小支持1元,仅支持整数。
mark 游戏方自定义订单号,用于关联游戏方单号和4399充值中心订单号
success 允许充值回调,返回orderId用于后续服务端接口的操作。
fail 充值失败回调,返回失败code和相关信息,此时有可能会根据防沉迷系统的需要,弹出防沉迷说明弹窗。
+ (void)fetchProductWithSuccess:(void(^)(NSArray<OMProduct *> *products))success fail:(void(^)(OMPaymentError *error))fail获取IAP商品。
支持iOS12+。
使用IAP需在工程->Target->Frameworks, Libraries, and Embedded Content中引入StoreKit.framework。
success 商品获取成功回调
OMProduct参数说明
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| name | NSString | 商品名称 | |
| productID | NSString | 商品productID | |
| price | NSString | 仅用于UI展示,请勿依赖price字段校验订单,在某些情况下price可能会显示错误地区的价格。由于float存在精度问题,计算时请注意 | |
| currency | NSString | 货币,仅用于UI展示, 在某些情况下currency可能会返回错误地区的货币 | |
| currencySymbol | NSString | 货币符号,仅用于UI展示, 在某些情况下currencySymbo可能会返回错误地区的货币符号 |
fail 失败回调 OMPaymentError
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| code | NSString | 错误码 | |
| message | NSString | 错误信息 | |
| info | NSString | 错误补充信息,可为空 | |
| originalCode | NSString | 原始错误码 | |
| orderID | NSString | 订单id,可为空 |
Fail Code
| Fail Code | 含义 |
|---|---|
| 10001 | 未登录 |
| 10002 | 找不到Product |
| 10003 | 系统不支持 |
| 1001 | 失败,用户禁止应用内付费购买 |
| 1002 | 无法获取产品信息 |
| 1003 | ProductID为空, 请检查后台配置 |
| 1004 | 下单失败 |
| 1005 | 验单请求失败 |
| 1006 | 用户凭证失效 |
| 1007 | 空SKProduct实体 |
| 1100 | 产生除非消耗、自动续期Product的重复购买 |
| 1101 | 恢复购买错误 |
| 1102 | 无需恢复购买 |
| 1103 | 账单刷新错误 |
| 1104 | 账单校验失败 |
| 1105 | 用户取消或超时 |
| 1106 | 设备被Apple禁止充值 |
| 1107 | 请求变量、签名发生错误 |
| 1108 | 促销信息有误 |
| 1109 | 商品不可用,检查苹果后台 |
| 1110 | 未同意隐私Apple的协议 |
| 1111 | 需要等待批准 |
| 1112 | Apple返回未知错误 |
| 1113 | 读取Receipt错误 |
| 2001 | 防沉迷限制充值 |
| 3001 | 网络错误 |
| 4001 | 未知错误 |
+ (void)purchaseWithProductID:(NSString *)productID mark:(NSString *)mark roleInfo:(OMRoleInfoModel *_Nullable)roleInfo purchasingStatu:(void(^)(OMPurchasingStatu statu))purchasingStatu success:(void(^)(OMPurchaseResultInfo *info))success userCancel:(void(^)(OMPaymentError *error))userCancel fail:(void(^)(OMPaymentError *error))fail发起应用内购买。请在调用获取IAP商品接口,并得到商品列表后调用此接口发起内购。
支持iOS12+。
仅限用户登录后使用本接口。
productID 内购商品id,请从「获取IAP商品」接口的商品列表中获取。
mark 游戏方自定义订单号,用于关联游戏方单号和4399充值中心订单号
roleInfo 充值角色信息,可以为nil,详细字段说明参「角色创建上报」接口附带的参数说明
purchasingStatu 支付中状态回调,OMPurchasingStatuPlaceOrder 下单中、OMPurchasingStatuVerifying 验单中。
success 成功回调
OMPurchaseResultInfo参数说明
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| orderID | NSString | 订单id,可能为空 | |
| mark | NSString | 游戏方自定义订单号,用于关联游戏方单号和4399充值中心订单号 |
userCancel 用户取消
fail 失败回调,参考商品获取说明的Fail code
+ (void)leadToPlatformWithKey:(NSString *_Nonnull)key success:(void(^)(void))success fail:(void(^)(NSInteger, NSString *_Nonnull))fail根据后台配置的key跳转指定第三方平台。
需在Info.plist内,配置需要跳转的平台的scheme到LSApplicationQueriesSchemes下,详细可参考接入步骤(9)
例如
跳转微博,在后台配置key为weibo,url配置为sinaweibo://userinfo?uid=4399
sinaweiboweibo作为key调用此APIkey 对应社交平台的key。
success 成功回调。
fail 失败回调,返回失败code和相关信息。
+ (void)reviewRequestWithCommentStatuCallback:(void(^)(NSInteger code, NSString *_Nonnull msg, NSInteger level, NSString *_Nonnull comment))callback打开评分弹窗
仅限用户登录后使用本接口。
测试说明:https://note.4399doc.com/prd?sid=ffbb5d38453cbc90f54daf97#/share
callback
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| code | NSInteger | 1000,未评论;1001 已在弹窗内评论,1002 已跳转苹果评论 | |
| msg | NSString | 已评价;未评价 | |
| level | NSInteger | 1~5 | |
| comment | NSString | 评论内容,仅返回SDK弹窗评价内容 |
+ (void)reportCreateWithRoleInfo:(OMRoleInfoModel *)roleInfo
completion:(void(^)(BOOL isSuccess))completion;在完成角色创建后调用,用于上报新角色信息。
仅限用户登录后使用本接口。
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| roleInfo | OMRoleInfoModel | 角色信息模型,见下文 OMRoleInfoModel |
| completion | void(^)(BOOL isSuccess) | 完成回调,isSuccess=YES
表示上报成功 |
OMRoleInfoModel参数说明
| 字段 | 类型 | 说明 |
|---|---|---|
| roleID | NSString | 角色唯一标识,可为nil |
| roleLevel | NSString | 角色等级,建议传当前可见等级,如“1”、“15”等,可为nil |
| serverID | NSString | 区服标识,可为nil |
| extensionValues | NSDictionary<NSString *, NSString *> * | 扩展字段,若与上述字段同名将覆盖原有字段,可为空 |
-initWithRoleID:roleLevel:serverID:extensionValues:
进行初始化,允许传入 nil 的字段(SDK会做空值处理)。+ (void)reportGameEntryWithRoleInfo:(OMRoleInfoModel *)roleInfo
completion:(void(^)(BOOL isSuccess))completion;在**进入游戏(进入主城/登录成功进入服务器)**时调用,用于上报当前角色进入游戏行为。
仅限用户登录后使用本接口。
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| roleInfo | OMRoleInfoModel | 角色信息模型,见下文 OMRoleInfoModel |
| completion | void(^)(BOOL isSuccess) | 完成回调,isSuccess=YES
表示上报成功 |
+ (void)reportEventWithEventName:(NSString *)eventName
attribute:(NSDictionary<NSString *, NSString *> *)attribute
completion:(void(^)(BOOL isSuccess))completion;用于上报自定义事件,便于后续统计与分析。
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| eventName | NSString | 事件名,例如:"tutorial_finish"、"level_up" |
| attribute | NSDictionary<NSString *, NSString *> * | 事件属性键值对,键与值均为字符串(可为空或传@{}) |
| completion | void(^)(BOOL isSuccess) | 完成回调,isSuccess=YES
表示上报成功 |
打包发布时,若出现IPA processing failed提示,可以尝试回退到上一步,再重试,加载到打包流程第一个界面进行App Thinning设置时,无需等待,快速点击Next进入下一个设置界面即可顺利进入后续流程。(该现象和Xcode打包分析流程有关,如App Thinning界面原先无特殊设置,将不影响发包)
AppDelegate的
- application: didFinishLaunchingWithOptions:中调用了初始化接口。Always Embed Swift Standard Libraries 是否为
Yes。6、展示个人中心页面target -> Build Setting ->
Other Linker Flags 增加 -ld_classic项并重新打包。| 版本 | 更新说明 | 备注 |
|---|---|---|
| 1.9.8 | 更新一键登录SDK,优化游戏评论 | 请替换m4399QuickLogin.framework或m4399QuickLogin.xcframework为MTDQuickLogin.xcframework |
| 1.9.9 | 更新一键登录SDK | 务必更新EAccountOpenPageResource.bundle |
| 1.10.0 | 增加上报角色创建、进入游戏接口,优化内购稳定性 |