米洛SDK iOS SDK 对接文档
本文档用于iOS SDK对接米洛SDK平台,包含完整的接口说明、代码示例和注意事项。
2026年5月 | WANCMS开发组
开发包说明
核心库
MYWanSdk.framework - 基础库
接入流程
一般流程
获取配置参数:
mlsdk_gameId- 游戏idmlsdk_payKey- 充值回调keymlsdk_appKey- 登录和充值校验key
开发环境配置
添加Framework
将MYWanSdk.framework添加到工程中,并选择相应的target
设置Embed & Sign
设置MYWanSdk.framework的状态为 Embed && Sign
配置架构
在Build Settings中将Architectures设置为 armv7+arm64,项目本身需要支持arm64
配置屏幕方向
Device Orientation中选中游戏兼容方向,不要同时勾选横竖屏
配置HTTP访问
在info.plist中添加允许http访问
配置权限
在info.plist中添加允许获取设备码权限
初始化(必接)
获取实例
| 项目 | 说明 |
|---|---|
| 类 | MYWanSDK |
| 函数 | + (MYWanSDK *)defaultInstance |
| 功能 | 获取MYWanSDK 实例 |
初始化MYWanSDK
| 项目 | 说明 |
|---|---|
| 类 | MYWanSDK |
| 函数 | - (int)initWithConfig:(MYWanSDKInitConfig *)config application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; |
| 功能 | 使用mlsdk_gameId初始化sdk,参数由MYWan平台分配 |
参数说明
config:封装了 mlsdk_gameIdapplication: 应用的application, 调用函数的参数原封不动的传入即可launchOptions: 应用的launchOptions, 调用函数的参数原封不动的传入即可
重要说明
该接口需要在应用加载完成回调中调用,即(建议在初始化系统window之后再调用SDK初始化)
代码示例
// 获取实例
MYWanSDK *sdk = [MYWanSDK defaultInstance];
// 初始化配置
MYWanSDKInitConfig *config = [[MYWanSDKInitConfig alloc] init];
config.gameid = @"YOUR_GAME_ID";
// 初始化SDK
[sdk initWithConfig:config
application:application
didFinishLaunchingWithOptions:launchOptions];
用户接口
登录接口(必接)
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (int)login; |
| 功能 | 打开登录界面,进入用户登陆流程 |
收到登录成功通知kMYWanSDKNotiLogin后,取得返回值userInfo,取得用户username、token和logintime,也可直接使用接口获取username、token和logintime,参考demo,随带Demo中有相关实现。username是sdk提供的用户唯一标识。
注销接口
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (int)logout; |
| 功能 | 主动注销当前用户 |
注意
调用该接口将引起MYWanSDK发出一个注销通知kMYWanSDKNotiLogout,游戏开发者收到注销通知后走下一步流程,比如回到游戏登录界面,再调用登录。
用户唯一标识username
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (NSString *)username; |
| 功能 | 获取最后登录用户username,通常在收到登录通知回调中调用 |
| 返回值 | 最后登录用户的username,可能为空,在没有收到登录通知时可能已经有值,不能作为判断当前是否有用户登录游戏的依据 |
用户token
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (NSString *)token; |
| 功能 | 获取最后一次登录用户的token,用于到服务器验证用户 |
| 返回值 | 最后一次登录用户的token |
用户logintime
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (NSString *)logintime; |
| 功能 | 获取最后一次登录用户的logintime,用于到服务器验证用户 |
| 返回值 | 最后一次登录用户的logintime |
上报角色信息(必接)
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (void)updateRoleInfoWith:(MYWanSDKGameRoleInfo *)info isCreate:(BOOL)isCreate; |
| 功能 | 向MYWanSDK提交角色信息 |
参数说明:
info角色信息对象,参考类MYWanSDKGameRoleInfoisCreate表示是否为刚刚创建的角色
必填字段:
serverId- 服务器id,必填serverName- 服务器名称,必填gameRoleName- 角色名,必填gameRoleID- 角色id,必填gameUserLevel- 玩家等级,必填,没有传0fightPower- 玩家战力,必填,没有传0sign- 加密sign,必传
sign加密规则
对登录返回的用户名、角色id、服务器id、角色等级、战力、对接参数mlsdk_appKey 进行md5加密:
md5($username.'#'.$roleid.'#'.$serverid.'#'.$rolelevel.'#'.$rolepower.'#'.$appkey)
Demo有实例代码,建议在服务端加密
建议
每次登录进入游戏后先调用一次
充值接口
充值(必接)
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (int)payOrderInfo:(MYWanSDKPayOrderInfo *)orderInfo roleInfo:(MYWanSDKGameRoleInfo *)roleInfo; |
| 功能 | 订单支付 |
参数说明
orderInfo订单信息roleInfo玩家角色信息
orderInfo字段说明
| 字段 | 说明 | 必填 |
|---|---|---|
goodsId |
商品ID,IAP时为苹果开发者后台配置的商品id,没有传空字符串 | 必填 |
sign |
加密sign,sign = md5($username.'#'.$roleid.'#'.$cporderid.'#'.$amount.'#'.$mlsdk_appKey),对登录用户username,角色id,订单号,金额,mlsdk_appKey 进行md5加密,推荐在服务端加密 |
必填 |
productName |
应该为一个通用名称,不包含商品个数,如"勾玉","元宝" | 必填 |
cpOrderID |
游戏订单号 | 必填 |
count |
float 商品数量,如1 | 必填 |
amount |
float 总价(元), 如6 | 必填 |
extrasParams |
透传字段,服务器回调时原样传递 | 选填 |
重要说明
- 异步通知,用户完成充值操作后会发送充值结果通知:
kMYWanSDKNotiRecharge - sdk客户端通知的结果仅供参考,很多渠道没有客户端充值结果回调,以服务器端同步为准
- sign加密推荐在服务端进行
代码示例
// 创建订单信息
MYWanSDKPayOrderInfo *orderInfo = [[MYWanSDKPayOrderInfo alloc] init];
orderInfo.goodsId = @"product_001";
orderInfo.productName = @"元宝";
orderInfo.cpOrderID = @"ORDER_123456";
orderInfo.count = 1.0;
orderInfo.amount = 6.0;
orderInfo.extrasParams = @"";
// 生成sign(建议在服务端生成)
NSString *username = [[MYWanSDK defaultInstance] username];
NSString *roleId = @"role_123";
NSString *cpOrderId = @"ORDER_123456";
NSString *amount = @"6.0";
NSString *key = @"YOUR_APP_KEY";
NSString *signStr = [NSString stringWithFormat:@"%@#%@#%@#%@#%@", username, roleId, cpOrderId, amount, key];
orderInfo.sign = [self md5:signStr];
// 创建角色信息
MYWanSDKGameRoleInfo *roleInfo = [[MYWanSDKGameRoleInfo alloc] init];
roleInfo.roleId = @"role_123";
roleInfo.roleName = @"玩家昵称";
roleInfo.serverId = @"server_01";
// 发起支付
[[MYWanSDK defaultInstance] payOrderInfo:orderInfo roleInfo:roleInfo];
扩展接口
AppDelegate事件调用(必接)
需要在AppDelegate中转发以下事件:
- (void)applicationWillResignActive:(UIApplication *)application {
[[MYWanSDK defaultInstance] applicationWillResignActive:application];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[MYWanSDK defaultInstance] applicationDidEnterBackground:application];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[MYWanSDK defaultInstance] applicationWillEnterForeground:application];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[MYWanSDK defaultInstance] applicationDidBecomeActive:application];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[MYWanSDK defaultInstance] applicationWillTerminate:application];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
[[MYWanSDK defaultInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
[[MYWanSDK defaultInstance] application:application didFailToRegisterForRemoteNotificationsWithError:error];
}
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window{
return [[MYWanSDK defaultInstance] application:application supportedInterfaceOrientationsForWindow:window];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
[[MYWanSDK defaultInstance] openURL:url application:application];
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
[[MYWanSDK defaultInstance] openURL:url sourceApplication:sourceApplication application:application annotation:annotation];
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
[[MYWanSDK defaultInstance] openURL:url application:app options:options];
return YES;
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * restorableObjects))restorationHandler{
[[MYWanSDK defaultInstance] application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
return YES;
}
显示浮动条
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (int)showToolBar:(MYWan_SDK_TOOLBAR_PLACE)place; |
| 功能 | 显示浮动工具栏。若渠道无此对应接口,调用无效 |
案例:当用户登录成功后调用
[[MYWanSDK defaultInstance] showToolBar:MYWan_SDK_TOOLBAR_TOP_LEFT];
隐藏浮动条
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (int)hideToolBar; |
| 功能 | 隐藏浮动菜单。若渠道无此对应接口,调用无效 |
进入用户中心
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (int)enterUserCenter; |
| 功能 | 进入用户中心。若渠道无此对应接口,调用无效 |
其他接口
| 函数 | 功能 |
|---|---|
- (NSString *)channelType; |
渠道唯一标识 |
- (NSDictionary *)realNameInfo; |
获取实名信息 |
SDK通知说明
初始化通知
| 项目 | 说明 |
|---|---|
| 名称 | kMYWanSDKNotiInitDidFinished |
| 说明 | 成功调用初始化接口后,异步。收到该通知后通过错误码判断渠道SDK是否初始化成功 |
重要
登录接口需要在收到初始化成功回调后再登录,否则登录会失败
登录成功通知
| 项目 | 说明 |
|---|---|
| 名称 | kMYWanSDKNotiLogin |
| 说明 | SDK有用户登录成功时发出 |
注销通知
| 项目 | 说明 |
|---|---|
| 名称 | kMYWanSDKNotiLogout |
| 说明 | 这有2种情况:
|
充值结果通知
| 项目 | 说明 |
|---|---|
| 名称 | kMYWanSDKNotiRecharge |
| 说明 | 成功调用MYWanSDK充值接口后会收到该通知 |
通知结果的3种情况根据错误码来判断(MYWan_SDK_ERROR_NONE、MYWan_SDK_ERROR_RECHARGE_FAILED、MYWan_SDK_ERROR_RECHARGE_CANCELLED)。
注意
因为大部分渠道回调都以服务器为准,该结果仅供客户端参考,实际结果以服务器端同步为准
通知userInfo信息说明
NSDictionary *userInfo = notify.userInfo;
// 错误码
int error = [[userInfo objectForKey:kMYWanSDKKeyError] intValue];
// MYWanSDK订单号
NSString *orderID = userInfo[kMYWanSDKKeyOrderId];
// CP订单号
NSString *cpOrderID = userInfo[kMYWanSDKKeyCpOrderId];
调起渠道实名认证(选接)
| 项目 | 说明 |
|---|---|
| 类名 | MYWanSDK |
| 函数 | - (int)realAuth; |
| 功能 | 调起渠道实名认证界面 |
若渠道无此对应接口,直接调用会返回接口不支持的错误码。
实名认证结果通知
| 键 | 说明 |
|---|---|
kMYWanSDKKeyIsRealName |
是否实名认证。@"1":已认证;@"0":未认证 |
kMYWanSDKKeyRealAge |
年龄,如果渠道没有返回默认为@"-1" |
kMYWanSDKKeyRealResumeGame |
渠道实名认证失败之后是否可以继续游戏 @"1":可以;@"0":不可以;渠道没返回默认@"1" |
kMYWanSDKKeyRealOther |
预留字段,默认为空字符串 |
其他说明(必读)
接口说明
MYWanSDK初始化接口,用户接口,充值统一都支持。所有提供的接口都可以直接调用,有些可能会因为渠道不支持而调用无效