iOS 常见问题

常见问题

AppStore上线注意事项

由于线上2.2.5版本的框架可能导致AppStore审核不过,我们准备了一套专门用于上架AppStore用的替换框架,和部分涉及到的修改版SDK插件,用于AppStore过审。该版本框架和对应插件仅用于AppStore渠道上架,其他越狱渠道还是继续使用之前线上的2.2.5版本框架和线上SDK。不管是否用到AppStore支付,如需上线AppStore,至少需要替换成该框架版本,具体请参考文档。 参考文档链接: https://pan.baidu.com/s/1nwg6z3b 密码: 8qrv

iOS 静态库为什么这么大?会导致打出来的包体积大很多吗?

.a 文件的体积(46.8 M) = 真机用的 .a (28.1M) + 模拟器用的 .a (18.7 M),当然每个 .a 文件还支持了不同架构:arm64 armv7 armv7s i386 x86_64。.a 的部分都只包含了代码的部分,静态库是在编译时链接二进制代码,对产生的二进制文件的大小并不会有太大的影响,目前 iOS 的 Sample 引入 AnySDK Framework 产生的大小也只有 1 M。

更新 Xcode7 后的各种问题

编译时报错/xxxx/libPluginProtocol.a(Util.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target.或者clang: error: -fembed-bitcode is not supported on versions of iOS prior to 6.0

Xcode7 开始加入的 bitcode 是被编译程序的一种中间形式的代码,在 Xcode 7 中,我们新建一个 iOS 程序时,bitcode 选项默认是设置为YES的。我们可以在”Build Settings”->”Enable Bitcode”选项中看到这个设置,并且关掉它

bitcode

编译时报错 All interface orientations must be supported unless the app requires full screen.

看到这句提示,就是说 App 默认是有开启了多任务功能,而多任务功能是需要 App 支持所有方向,如果我们 App 是有需要支持多任务,则需要开启 App 对各个方向(上、下、左、右)的支持;如果 App 不需要开启多任务,则只需要将如下示意图的 requires full screen 勾选上就 ok

xcode7-2

应用内网络无法连接

在 App 的Info.plist里面加入如下信息,或者按图中方法添加

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

xcode7-3

UrlSchemes跳转返回失败

在 iOS 9 中,如果使用 URL scheme 必须在Info.plist中将你要在外部调用的 URL scheme 列为白名单,否则不能使用。
Key为 LSApplicationQueriesSchemes ,键值内容是 LSApplicationQueriesSchemes urlscheme urlscheme2 urlscheme3 urlscheme4
目前已知可能需要添加的值:
微信:wechat weixin
QQ:mqq mqqapi mqqapiwallet
支付宝:alipay alipayshare safepay

下图仅供参考

xcode7-3

找不到 libsqlite3 动态库

更新2.1.0版本打包工具可以解决

不更新工具可以删除原先工程中的 libsqlite3.dylib ,在Build Phase->Link Binary With Libraries中添加相应的 libsqlite3.tbd 如果还报错,删掉 libsqlite3.tbd,在build setting的other linker flags增加 -lsqlite3,其他 dylib 也可以类似处理

Info.plist 中出现了 NSApplicationMain nib file base name 这两项原先没有的项

这两项是 Mac 的 Info.plist 拷贝过来的,请删除 Mac 的 Target 和相关文件夹。如果该 Target 需要留着,请参考各语言的快速集成指南,按规则拷贝一份.xcodeproj用于 AnySDK 打包。

如果原工程的配置有改动的话可能需要重新拷贝这份.xcodeproj

iOS9下使用了- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options方法导致 SDK 方法未被调用

iOS9 后引入了该方法。若工程的 Delegate 中有该方法,且设备为 iOS9 以上,则走该方法,否则走原先的- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 方法

若遇到相关问题,可将- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options方法删掉试试。如果应用必须使用该方法,则可将 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 处 AnySDK 添加的代码移到该方法下。

编译时框架与第三方库冲突

如果编译出现,请替换解决冲突后的框架库,该库为兼容性修改,可以直接替换原先框架。根据不同的 C++ Standard Library 下载不同版本替换 若替换后还存在冲突,请联系开发者

Framework 链接: http://pan.baidu.com/s/1jGkz70M 密码: hdt9

为何 Info.plist 有正确的 ASC_ChannelID,但是调用 getChannelID() 却读出 999999

iOS 需要一定的步骤来初始化,getChannelID()调用的是[[NSBundle mainBundle]objectForInfoDictionaryKey:@"ASC_ChannelID"];,如果在 iOS 初始化之前调用,则取不到正确的值。

编译时有些设备报错,但不连接设备可以正常 Build

一些 SDK 只支持部分指令集,打包时会修改 Target 的 Valid Architectures。而默认工程的 Run 模式是 Debug,Build Active Architectures Only这个选项下 Debug 的默认值是Yes。比如某个只支持 armv7 的 SDK,可能在调试 arm64 的包时,就会碰到一些跟指令集相关的编译报错。

解决方法是将 Scheme 的 Run 模式改为 Release,或者将 Build Active Architecture Only 的 Debug 子项值改为 No.

关于指令集的问题可以参考:http://www.cocoachina.com/industry/20140527/8566.html http://www.cocoachina.com/ios/20140915/9620.html

arch1 arch2 arch3

编译时各种 std 报错

若在编译时碰到如下问题,请确认 Build Setting 中的 C++ Standard Library 和你使用的框架的 libc++/libstdc++ 相对应

stderror

stderror2

渠道要求启动图片要显示 3 秒以上

在入口文件中 AppDelegate/AppController/UnityAppController 添加以下代码,已有该方法的话就将 [NSThread sleepForTimeInterval:3.0]; 添加到函数最前面。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [NSThread sleepForTimeInterval:3.0];//设置启动页面时间
    return YES;
}

银联要求添加竖屏支持导致的游戏需要在代码中设置横屏的问题

AppDelegate.mm/AppController.mm/UnityController.mm中添加以下代码 若无效的话在主视图( RootViewController 等)中试试

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscape;
}
- (BOOL)shouldAutorotate {
    return YES;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if(UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
        return YES;
        } else {
        return NO;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeLeft;
}

要兼容 iOS8 还需要在AppDelegate.mm/AppController.mm/UnityController.mm中加入以下代码

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    NSString* strSubClass = [NSString stringWithUTF8String:object_getClassName(window.rootViewController.presentedViewController)];
    if ([@"ImgTakeViewController" isEqualToString:strSubClass]) {
        return UIInterfaceOrientationMaskAll;
    }
    return [application supportedInterfaceOrientationsForWindow:window];
}

如果该渠道不需要勾选银联竖屏的话,只需要前两个方法,而 shouldAutorotate 设置 No 即可。

Unity 下读不到 ChannelID

使用 IL2CPP 的情况下,若读不到 ChannelID,可以以如下方式修改 il2cpp

安卓下能初始化,iOS 初始化失败,渠道包登录时弹的母包界面

iOS 必须先 init 初始化再调用 loadAllPlugins,调换一下顺序即可

2.1.0 版本打包后 icon 分辨率不全,图标模糊

升级到 2.1.1 可以解决

添加 arm64 后,在真机编译出现大量SDK库自身的duplicate symbols for architecture arm64错误,如下图

duplicate

升级 Xcode 到 6.3 及以上版本可以解决

需要安装不低于 6.0 版本的 Xcode

我已经安装了 Xcode,但是在 iOS 打包处还是提示这个错误 iOS 的处理流程需要命令行下有 Xcode 环境,目前设定版本为 6.0 以上,通过 xcodebuild -version 检测版本号。若已经安装了 6.0 以上版本,还是报该错误的话

  1. 在终端输入命令 xcodebuild -version,若能显示版本号且为 6.0 以上,并且重启后无效,请联系技术支持

  2. 若 xcodebuild 报错,可能是因为之前安装的 Xcode 环境变量没有修改,或者 Xcode 程序被改名,需要配置 Xcode 所在路径。命令为 sudo xcode-select -s (Xcode.app所在路径)/Contents/Developer,例如 Xcode 安装在应用程序下,则输入sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

ps:sudo 权限需要输入密码,且密码不为空

渠道类 SDK

百度91

建议先咨询渠道方是否能使用百度游戏 SDK,91 被百度并购后基本没有更新,最后更新于 14 年 3 月,最后更新是添加了 iOS7 的适配。

参数名 参数说明 备注
AppID 应用 ID 百度 91 开发者后台进行申请
AppKey 登录或支付时验证 百度 91 开发者后台进行申请
Orientation 百度 91 界面的方向 根据游戏界面的方向设置或随意设置,Xcode6/7 下可能有对应不上方向的问题
CheckUpdate 是否强制升级,强制升级就是当升级失败退出游戏 强制升级,没有进行升级或升级失败就会退出游戏。注:自测检测失败是正常。
测试模式 是否为测试模式 测试模式在支付时可以使用后台配置的支付信息。
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

91

上线注意事项

后台配置服务器 IP 地址为:211.151.20.127

关于横竖屏的解决方案:

百度 91 版本过老,在新版本 Xcode 下,可能出现 SDK 方向与打包工具中设置的方向不符的情况,竖屏可能可以匹配,而横屏情况下若尝试配置各种旋转方向不能解决:

  1. 下载Xcode5用于编译
  2. iOS 的百度 91 渠道,使用最新 Xcode 编译出来界面横竖屏可能会出现问题,是因为百度 91 的 SDK 不支持 iOS8 SDK 编译,若出现问题可通过下面的方法解决:
    • a.下载文件http://yun.baidu.com/share/link?shareid=2845942060&uk=3138331658,其中 iPhoneOS7.1.sdk.tar.gz 解压后是 iOS7.1 SDK,Metal.framework.zip 解压后是一个 Metal.framework 库;
    • b.将解压后的 iPhoneOS7.1.sdk 放到路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs下;
    • c.通过 AnySDK 打包工具打包生成百度 91 渠道的 Xcode 项目,打开他,然后修改对应的 Target 中的 Base SDK 设置为 7.1;
    • d.编译项目,如果报“framework not found Metal …”,则把刚才下载的 Metal.framework 加入到连接库中,出现这个的原因是因为用 iOS8 SDK 编译的一些库会强制连接该库,但是实际并没有用到这个库的内容,这里的 Metal.framework 实际也是一个空的库;
    • e.再次编译项目;

AppStore

  1. 如需上线,请使用AppStore专用框架,参考文档链接: https://pan.baidu.com/s/1slc5fAl 密码: ktxk
  2. 新版本请到通用版后台的游戏管理->游戏列表->管理商品 界面映射 PayForProduct 方法中调用的 Product_Id 与苹果后台的 Product ID,价格(单位人民币,统计使用)等之间的关系。
  3. 当前框架 2.2.5 以上和 AppStore 插件均已支持 HTTPS,并且在打包时会关闭 ATS 选项。但用户需要将 游戏管理订单获取地址 以及 SDK参数登陆验证地址(如果有选择用户插件) 和 渠道通知地址 都改成 HTTPS 地址(例如 订单获取地址 改为 https://pay.anysdk.com/v5/Order/getOrderId/,如果别的渠道包不需要 HTTPS 需把地址改回来再打包),并且给自己的游服添加 HTTPS 证书和添加修改相应的 HTTPS 接口。另外需要注意其他打包进去的 SDK 是否也已经支持 HTTPS。

上线注意事项

  1. 接入苹果 AppStore IAP,需要保证自己工程的 Bundle identifier 与后台的 Bundle identifier 是一致的。注意尽量不要填写包名后缀,如果填写,也请修改后台的包名,添加后缀。
  2. 要用真机调试,不能用越狱机,Sandbox 测试时记得先在通用->设置里登出本机 AppStore 账号
  3. 新账号需要先处理 iTunesConnect 的协议、税务和银行业务信息
  4. 如果使用商品 ID 支付方式,则在 payForProduct 时传入后台填写的商品的 ProductID
  5. 以上几条如果有问题,会报错 Invalid Item Error
  6. 本机账号没有登出,或者苹果的协议更新没有通过,可能导致显示错误:无法连接到 iTunes Store
  7. 服务端收到支付成功通知后,请务必再核对通知中 ProductID 是否正确,可能碰到用其他已经支付过的回执来通过苹果认证的情况。最好再验证一下通知中的时间是否在生成订单时间之前
  8. 专题介绍 In-App Purchase

AppStore-IAP:

AppStore

项目里面的 Bundle identifier,或者直接选取 Info.plist 文件修改:

AppStore

心动(非越狱)

参数名 参数说明 备注
AppID 心动应用 ID 开发者在心动申请到的参数,目前会有两个:appid和secret。
appid对应这里的AppId
AppKey 心动应用 Key 开发者在心动申请到的参数,目前会有两个:appid和secret。
secret对应这里的AppKey
AppSecret 心动 AppSecret 心动 SDK 的保留值,目前还没有使用,可以随意填写。
IsPortrait SDK 是否选择竖屏方向 最好根据游戏的方向
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

Xcode7下需要手动添加 libicucore.tbd,否则可能会报各种找不到 _ure 开头方法的错误。

PP助手

参数名 参数说明 备注
AppID 应用 ID
AppKey 应用 Key
PublicKey 公钥
PPZoneID PP 后台分区,后台的自定义编号。没设置分区则为 0。
是否新游戏 APP ID > 4263(不含 4263)的游戏为新游戏 新旧游戏的登陆验证地址和格式不一样,需要区分
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 关于插件版本号,请更新到最新插件后,将鼠标移至参数管理->版本号上查看,S=静态库,D=动态库,PP两者都有用到

PP1

  1. 不能在模拟器下运行,只能在真机下运行。
  2. 打包 ipa 时,请不要使用 Xcode 的 archive 功能打包,要用 iTunes 导出 ipa 包的方式打包(否则检测更新时会出错,提示“检测更新失败,服务器呵呵了”)。安装 ipa 时请用 iTunes 同步方式,第三方工具可能无法安装,但提交后不会出现问题
  3. 若没有越狱机器测试,需要对 bundle 重新签名,否则启动时报资源错误 下载工具和说明文档
  4. PP 助手 SDK 在余额不足时,需要充值购买,在打开充值界面的时候 SDK 有一个回调,AnySDK 返回的是支付成功的回调,因为PP助手SDK在充值完成后是不会有回调的。
  5. Info.plist 的两处版本号要一致,可以在上下两图任意位置修改 PP1

重签名步骤

  1. GeneralHashCode 需要可执行权限,如果下载解压后,文件的可执行权限没有了,在终端中 cd 到下载文件夹,使用'chmod 755 GeneralHashCode'命令
  2. 按文档说明,在终端中使用 'which codesign' 命令查看 codesign 位置,如果不是默认的`/usr/bin/codesign1,请在 Packer.php 中修改
  3. 将 PPAppPlatformKit.bundle 文件拷贝到工具下载同级目录
  4. 重新签名的证书一定要是可用的证书,且跟项目所用证书一致;钥匙串中如果存在多个相同的证书,要清除掉多余的证书,拷贝该证书的名字
  5. 使用命令"php -f Packer.php '证书名称'"若无报错信息,则重签名成功
  6. 将重签名成功的 PPAppPlatformKit.bundle 覆盖回原先的插件目录,然后重新打包
  7. 必须使用和签名证书匹配的调试证书(Build Settings->Code Signing->Provisioning Profile,在 Apple Developer 后台生成下载)
  8. 如果之前有对应的旧版的PP渠道应用,必须删除,否则还会报资源问题 PP1 PP1

爱思

参数名 参数说明 备注
AppID 应用 ID
AppKey 应用 Key
PublicKey 公钥
LogData 是否显示log
CloseRecharge 是否关闭充值
关闭充值提示语 关闭充值提示语
LongComet 是否使用长连接
分区 id 需要和开发者后台的分区编号对应,如果没有分区则传入 0
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 爱思 SDK 本身在微信支付完成后就无法跳转回游戏;
  2. iOS10 需在 Info.plist 加入以下权限选项
<key>NSCameraUsageDescription</key>
<string>爱思助手</string> 
<key>NSPhotoLibraryUsageDescription</key>
<string>爱思助手</string>

同步推

参数名 参数说明 备注
AppID 应用 ID
AppKey 应用 Key
Orientation 设置 SDK 界面方向
IsAutoRotation 是否开启自动旋转
IsUseOldPlace 是否使用上次悬浮条位置
IsCleanUserInfo 是否清空用户自动登录信息
IsForceUpdate 是否强制用户更新息
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 记得配置 IsAutoRotation,默认值是 True,但大部分游戏不会做旋转处理
  2. 渠道支付通知的 paydes 是客户端支付时传入的 Product_Name,不能为中文,不能带有 &“‘ (单双引号) % 空格以及其它会被url转义的字符,可为空。
  3. 默认不显示悬浮窗,需要调用 showToolBar 方法
  4. Xcode7 下可能会导致打包时银联要求的竖屏不被添加,横屏游戏请手动在Targets->Deployment Info->Device Orientation勾上 Portrait 竖屏选项,并在代码中处理横竖屏问题

iTools

参数名 参数说明 备注
AppID 应用 ID
AppKey 应用 Key
Orientation 设置 SDK 界面方向
CloseLoginPage 设置 SDK 登录界面是否可关闭
AutoLogin 设置 SDK 是否自动登录
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. sdk并没有支付成功的回调,有个支付视图关闭的回调,AnySDK将该回调返回成支付成功的回调。收到该回调后去游服轮询结果,支付是否成功以服务端为准
  2. 若游戏中出现电池状态栏,请在 info.plist 中添加 View controller-based status bar appearance, 设置为 No

快用苹果助手

参数名 参数说明 备注
GameID payID 查询网址:http://payquery.bppstore.com/
AppKey 应用Key 将 bundle identifier(加 ky 标志)和接收 appkey 的邮箱发在讨论组,@快用-技术支持进行注册并通过邮箱发给 CP
AppSecret 签名密钥 查询网址:http://payquery.bppstore.com/
RSA 公钥 RSA 公钥 查询网址:http://payquery.bppstore.com/
FastLogin 是否使用快速登录
UseVerifycdKey 是否需要输入邀请码
是否仅支持 iPhone 如果游戏当前接入的版本并未对 iPad 进行适配(当在 iPad 上运行时,居中显示,四周是黑框的情况)请选 true,否则选 false。
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 支付是否成功以服务端通知为准,本地收到成功回调后需要去游服轮询订单结果
  2. 点击用户中心的注销会弹出登陆界面,实际上相当于切换账号的功能,所以该注销回调 AnySDK 并没有返回,登陆后会有切换账号成功的回调。
  3. 不能在模拟器下运行,只能在真机下运行。
  4. 用户反映快用 3.0.3 版本在 iOS9.3.2 下初始化崩溃,若碰到可换低版本iOS设备试试
  5. 若碰到支付闪退,可以在 Delegate 文件(AppController.mm/UnityAppController.mm 等)添加以下方法试试
-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskAll;
}

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    [[QuickUnifyPlatform getInstance] qupHandleWithapplication:application openURL:url sourceApplication:nil annotation:nil];
    return YES;
}

#ifdef __IPHONE_9_0
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
    [[QuickUnifyPlatform getInstance] qupHandleWithapplication:app openURL:url sourceApplication:[options valueForKey:@"UIApplicationOpenURLOptionsSourceApplicationKey"] annotation:[options valueForKey:@"UIApplicationOpenURLOptionsAnnotationKey"]];

    return YES;
}
#endif

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    [[QuickUnifyPlatform getInstance] qupHandleWithapplication:application openURL:url sourceApplication:sourceApplication annotation:annotation];
    return YES;
}

爱贝支付

参数名 参数说明 备注
AppID 应用 ID
ChannelID 渠道号
PrivateKey 应用私钥
PublicKey 平台公钥
IsShowLog 是否显示日志
TestMode 测试模式
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

海马

参数名 参数说明 备注
AppID 应用 ID
AppKey 应用私钥
IsShowLog 是否显示日志
TestMode 是否为测试更新模式 开启后会一直提示有更新,只要能提示并跳转就表示测试更新成功,最后打包发布时务必改为 false
CheckType 因网络原因检查更新失败时是否可以越过强制更新 0 表示网络出错时不提示检查失败,用户可直接进入游戏。
1 表示网络出错时提示失败,只能再次检查更新,直到检查成功。
2 表示网络出错时提示失败,用户可以选择跳过检查并进入游戏。
IsLogout 切换账号是否注销当前用户
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

1.海马后台配置登录验证服务器 IP 地址为:211.151.20.126|211.151.20.127|117.121.57.82 2.AppId填写错误或者BundleID与后台不一致将会出现“应用被禁止”提示 3.需要添加白名单 LSApplicationQueriesSchemes,渠道需要 alipay, safepay,添加方法参考上面 Xcode7 注意事项部分

编译错误和解决方法

  1. 可能碰到如下编译错误,原因是 IOKit.framework 没有被加入 Build Phases 中 海马1
  2. 解决方法如下,在 Build Phases 中手动查找添加 IOKit.framework

可在 Xcode.app 上右键选择显示包内容后,`/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks1目录下找到,然后拖进工程 海马2 海马3

XY助手

参数名 参数说明 备注
AppID 应用 ID
AppKey 应用私钥
PayKey 支付用密钥
打印 Log 是否显示日志
测试环境 是否显示日志
可忽略更新 是否是测试模式,XY 提供 Debug 模式,需要找技术人员申请白名单账号功能
使用上次悬浮窗位置 是否使用上次显示悬浮窗位置
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. xy渠道下的BundleID需要以.xy结尾,Url Schemes需要以.xy.alipay结尾,尽量不要去修改BundleID后缀的配置。
  2. 请在 Targets->Build Setting->Code Signing Resource Rules Path 选项中设置 $(SDKROOT)/ResourceRules.plist, 避免上传到 XY Dev 后台在部分 IOS 系统设置中不能正常安装
  3. 若游戏为横屏游戏,需要在AppController.mm下方法返回UIInterfaceOrientationMaskAll。见下图:[[文件:XYOrient.png]]
  4. 目前点开浮球中的礼包按钮会导致游戏崩溃,这个功能是需要在游戏上线后,渠道后台配置的。SDK可能对空值的容错不够导致崩溃。在后台配置礼包后就不会崩溃了。
  5. XY审核的时候需要.framework库不能放在“Framework”文件夹下,可以先试试将AnySDK/Frameworks/组内的文件提取到工程根节点。如果还是不行,请将要提交的ipa文件改后缀为.zip解压,看下是否存在该文件夹,如果有的话,把文件提取到根目录,并删除Frameworks文件夹后重新压缩。
  6. XY的测试环境和正式环境在渠道配置的setDebugMode设置。
  7. 如果碰到初始化崩溃'NSInvalidArgumentException', reason: '*** -[NSPlaceholderString initWithString:]: nil argument',并且代码层报错在+[XYPlatform sdkVersion],可以尝试Other linker flags中添加-all_load解决(用户反馈)

果盘

参数名 参数说明 备注
AppID 应用 ID
ClientKey 客户端私钥
ServerKey 服务端密钥
是否保存 Log 文件 是否保存 Log 文件
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 由于 SDK 资源文件名含有中文,会导致目前版本下载后资源文件夹出现问题,请到 链接: 链接: https://pan.baidu.com/s/1pKCErP5 密码: e27n 下载。解压后替换插件目录下的/Resources文件夹中相应的 bundle 文件((在/文稿/AnySDKFiles/config/sdk/iOS_guopan/Resources/ 文件夹中),然后重新打包
  2. Unity 4.x 的游戏,C++Standard Library是 libstdc++ 的情况下编译会报错,添加libc++.dylib/.tbd动态库即可。下个版本将放到插件里自动添加
  3. 需要添加的白名单LSApplicationQueriesSchemes:cydia, xxassistant, xxassistantsdk, alipay, weixin, wechat
  4. 如果项目工程里面已经有 protobuf,用 sdk 的 libprotobuf_64.a 代替

触控

参数名 参数说明 备注
CocosAppId 应用 ID
CocosAppSecret 应用密钥
CocosChannel 应用渠道号
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

触控 SDK 要求添加Other Linker Flags "-all_load",该方法会导致所有类的方法被载入。容易造成库中类的冲突,如果碰到类的冲突可以删除此 Flag 试试

SohaGame

参数名 参数说明 备注
Soha_AppId Soha_AppId
Soha_AppSecret Soha_AppSecret
Facebook_AppId Facebook APPID
Facebook_DisplayName Facebook 显示名称
Soha_PayMode Payment with AppStore Or SohaGame
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

iOS9 相关配置请参考 https://developer.shg.vn/article/view?id=117&lang=ch,Soha 的 ATS 写法比较复杂,需要参考文档手动添加。

i 苹果

参数名 参数说明 备注
gamekey 游戏 gamekey
游戏channelId 游戏channelId
IsPortrait 是否竖屏
IsShowToolBar 是否显示悬浮按钮
cuKey 游戏 cuKey,也就是 secretKey
IsRepeatPay 是否重复支付
IsLastXcode6 Xcode 版本是否大于等于 6
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 如果游戏工程没有使用 mm 文件,需要在 TARGET 的 Build Settings 中,找到Apple LLVM 的Compile Sources As,设置为Objective-C++

富嘉

参数名 参数说明 备注
AppId 应用 ID
AppKey 应用key
Orientation 初始化界面方向
IsLogout 切换账号是否注销当前用户
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 富嘉后台配置登录验证服务器 IP 地址为:211.151.20.126|211.151.20.127|117.121.57.82
  2. SDK 有个 BUG 就是支付的时候在未登录状态情况下,我们会先登录,再去支付。在该流程操作之后,调用登出可能界面没有响应
  3. SDK 提供了旋转解决方案,根据游戏实际情况添加,仅供参考
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    //横屏这样设置
    return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
    //竖屏这样设置
    return UIInterfaceOrientationIsPortrait(toInterfaceOrientation);
}

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger) supportedInterfaceOrientations{
    //横屏这样设置
    return UIInterfaceOrientationMaskLandscape;
    //竖屏这样设置
    return UIInterfaceOrientationMaskPortrait;
 }

当乐

参数名 参数说明 备注
AppId 应用 ID
AppKey 应用key
MerchantID 当乐后台 MerchantID
ServerID 当乐后台 ServerID
PaymentKey 当乐后台 PaymentKey
AssistivePosition 浮标在屏幕上的位置
ScreenOrientation 支持的屏幕方向
AssistiveHide 是否隐藏浮标
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 如果编译出现如下 SDK 的库与 AnySDK 库冲突问题,请替换相应版本的 AnySDK 库 http://pan.baidu.com/s/1jGkz70M 密码: hdt9 ![个推](ios-sdk-params/dangle-ios-log.png]]
  2. 只支持真机调试,不支持模拟器
  3. 没有浮标:把 AssistiveHide 改为 No,下个版本考虑修改默认选项

百度游戏

参数名 参数说明 备注
setDebugMode(渠道参数) false 为 release 模式,true 为 debug 模式 调试模式下,百度后台设置的支付通知地址无效,渠道会通知到 AnySDK 客户端配置的【渠道通知地址】
AppId 应用 ID
AppKey 应用key
SecretKey 应用密钥
是否兼容 91 用户 是否兼容 91 用户 新游戏必须选择不兼容 91 用户
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 新游戏必须选择不兼容 91 用户
  2. 后台配置服务器 IP 地址为:211.151.20.127

Facebook

参数名 参数说明 备注
AppID AppID 从开发者后台获取
DisplayName DisplayName 从开发者后台获取
URLScheme URLScheme 从开发者后台获取
是否使用登录验证 是否使用登录验证
true:SDK 登陆成功后请求游服进行登陆验证,收到游服结果后返回回调。
false:SDK 登陆成功后就返回回调,不请求游服进行登陆验证。
验证 token 有效性 是否需要去 Facebook 服务器验证 token 有效性
false:AnySDK服务端直接返回成功。
true:AnySDK 服务端向 Facebook 服务端请求登陆验证。
由于 AnysDK 服务器在国内,无法访问 Facebook,通用版用户请设为 false。
企业版用户需要把 AnySDK 服务器架设到海外,确保能访问 Facebook,才可设置为 true。
AppSecret AppSecret 从开发者后台获取 不验证 token 有效性可不填

上线主要事项

  1. 由于 AnySDK 服务器在国内,无法访问 Facebook 服务器,所以无法进行登陆验证,如需使用 AnySDK 服务端的登陆验证功能,可购买企业版,将 AnySDK 服务端架设到海外服务器上。

9377助手

参数名 参数说明 备注
9377ChannelID 9377 提供的渠道号
9377Signkey 支付密钥,由双方决定
9377GameID 9377 提供的 gameID
服务区号 服务区号,在 9377 那边配置
游戏名字拼音 9377 提供的游戏别名
是否越狱平台 是否越狱平台
服务区号类型 CSGAME_SERVER_TYPE_CS :9377服务区号
CSGAME_SERVER_TYPE_DEV : 开发商服务区号
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

9377 的服务区号(服务器 ID),如果没在 payForProduct 里传递,就默认使用打包工具上的配置

魔品

参数名 参数说明 备注
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时
  1. 本渠道参数由渠道方填写在 .cfc 配置文件里,BundleID 需要与渠道提供的 cfc 文件 @ 号之前部分一致
  2. 需要手动添加 Model.xcdatamodeld 文件,请到链接: http://pan.baidu.com/s/1o8tQfOI 密码: sd23 下载解压
  3. .cfc 文件和 Model.xcdatamodeId 文件需要在打包后的工程中右键 -> Add File to ...直接将该文件拖进工程会导致初始化失败 mopote

探娱互动

参数名 参数说明 备注
channelId 渠道号
clientId 游戏 ID
游戏 token 游戏用的 token

游戏调用支付的时候,传递的参数需要增加一个 Server_Name 字段

39游戏

参数名 参数说明 备注
AppID AppID
AppKey AppKey
AppSecret AppSecret
AppPrivateKey md5(app_key + # + app_secret)
channel 标识渠道,通常是default
应用名称拼音 应用名称拼音
是否横屏 是否横屏
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

有四个必须接入的扩展接口
  1. 统计账号登录游戏,收到登录游戏成功回调后调用 submitActive
  2. 统计角色登录游戏,角色进入游戏之后调用 submitLogin
  3. 统计创建角色,创建角色之后调用 submitCreate
以上 3 个接口一个参数,为服务器 ID,字符串类型。代码可以参考相应语言的用户系统的显示悬浮工具栏接口

ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
if(!_pUser || !_pUser->isFunctionSupported("submitActive")) return;
PluginParam serverId("1");
_pUser->callFuncWithParam("submitActive",&serverId ,NULL);

  4. 统计角色升级,角色升级之后调用 submitLevel
一个参数,为字典类型,需要传递2个键值对,第一个为 level,字符串型,传角色等级。第二个为 gateway,字符串型,传服务器 ID。可参考提交游戏数据接口

爱应用

参数名 参数说明 备注
AppID AppID
AppKey AppKey
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 爱应用后台配置登录验证服务器 IP 地址为:211.151.20.126,211.151.20.127,117.121.57.82

MyCard

参数名 参数说明 备注
FacserviceID FacserviceID
SecretKey SecretKey
ReturnURL 支付成功跳转地址
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 交易回传地址为 http://pay.anysdk.com/v5/MycardPayNotice/payNotice/ (iOS 和 Android 地址一样)
  2. 补储信息通知地址为 http://pay.anysdk.com/v5/MycardPayNotice/supplyPayNotice/ (iOS 和 Android 地址一样)
  3. 发起支付直接返回支付成功的回调,支付结果以服务端通知为准。
  4. 支付时需传入货币代码 Currency_Code,可传入 TWD、HKD 或 USD。

Nextmv

参数名 参数说明 备注
ApiKey ApiKey
FacebookAppID FacebookAppID
FacebookDisplayName FacebookDisplayName
GoogleClientID GoogleClientID
GoogleUrlSchemes GoogleUrlSchemes
NaverCafeID NaverCafeID
NaverOauthClientID NaverOauthClientID
NaverOauthClientSecret NaverOauthClientSecret
NaverOauthUrlsSchemes NaverOauthUrlsSchemes
KAKAO_APP_KEY KAKAO_APP_KEY
IGAW_APP_ID IGAW_APP_ID
IGAW_HASH_KEY IGAW_HASH_KEY
PARTYTRACK_APP_ID PARTYTRACK_APP_ID
PARTYTRACK_APP_KEY PARTYTRACK_APP_KEY
是否开发环境 是否开发环境
apns 是否为启用apns
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 支付时需要在 Nextmv 后台配置商品信息,并把商品编号通过 Product_Id 传入插件(或者使用 AnySDK 后台的 管理商品 来映射渠道商品 ID)。
  2. 部分取消登录没有回调。

MOL

参数名 参数说明 备注
Application Code Application Code
Secret Key Secret Key
version version
isShowPayView 是否需要支付界面
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址 支付通知可能会有所延时

上线注意事项

  1. 支付需要传入货币代码 Currency_Code,可传入 "USD"、"MYR"、"AUD"、"BRL"、"IDR"、"INR"、"NZD"、"PHP"、"SGD"、"THB"、"TWD"、"VND"、"TRY" 或 "EUR"。
  2. 支付需要传入返回地址 Return_Url,该地址为支付后跳转的支付结果页面。
  3. 支付需要传入支付方式 Payment_Type,可传入 "priceFixed"(商品价格方式)或 "virtualCurrency"(虚拟币方式)。

支付宝

参数名 参数说明 备注
Partner 合作伙伴身份(PID) 签约的支付宝账号对应的支付宝唯一用户号。以 2088 开头的 16 位纯数字组成。
SellerId 卖家支付宝账号 卖家支付宝账号(邮箱或手机号码格式)或其对应的支付宝唯一用户号(以 2088 开头的纯 16 位数字)。
RsaPublic 支付宝公钥 mapi网关产品密钥 合作伙伴密钥 里设置应用公钥后所获得的支付宝公钥
RsaPrivate 应用私钥 自己生成的 RSA 私钥(rsa_private_key.pem 里的,1024位,PKCS1)
支付通知地址 当支付完成会通知 CP 方所配置 URL 所在的游戏服务器地址。 支付通知可能会有所延时。

上线注意事项

  1. 当前集成版本对应后台的mapi网关产品秘钥这套参数。
  2. 需要支付宝后台签约才能支付,签约后再去生成秘钥。
  3. 生成秘钥的格式为PKCS1,1024长度。

微信

上线注意事项 1. 如需上线AppStore渠道,请参考文档替换框架和导入微信插件 链接: https://pan.baidu.com/s/1nwg6z3b 密码: 8qrv 2. 如果设备上没有安装微信,调用微信的登录方法,微信也不会给出回调。AppStore审核可能会要求用户在没有安装微信的情况下隐藏微信登录按钮。可使用callIntFuncWithParam方法调用isWXAppInstalled判断是否安装微信,返回Int值1为安装,0为未安装。

ProtocolUser* _pUser = AgentManager::getInstance()->getUserPlugin();
if(!_pUser || !_pUser->isFunctionSupported("isWXAppInstalled")) return;
int wxInst = _pUser->callIntFuncWithParam("isWXAppInstalled",NULL);
//进一步逻辑,如隐藏微信登录按钮

统计类SDK

GoogleAnalytics

参数名 参数说明 备注
TrackingID 后台得到的TrackingID
dispatchInterval 统计信息发送周期 如果这个值是正数,统计信息将会在每个周期自动发送,否则需要手动发送,
例如,如果设定为 120,统计信息将会在每 120 秒自动发送
LoggerLevel logger等级 None 不使用 logger,Error:打印 error 级别的 log,warning:打印 warning 及以上,
Info:打印 info 及以上,Verbose:全部都打印
IsDryRun 是否开启测试模式
TrackExceptions 是否调用 SDK 异常捕获功能

热云统计

扩展方法

  1. 跟踪注册:registerWithParams
  2. 跟踪登录:loginWithParams
  3. 跟踪充值:paymentWithParams
  4. 跟踪消费:economyWithParams
  5. 跟踪任务:questWithParams

调用这些方法,需要以扩展方法的形式调用,可以参考对应语言统计系统的其他方法写法

参数需要以键值对字典的形式来传。具体参数,直接参照热云的文档。对照文档上的参数,把非字符串类型的参数都转为字符串类型,然后才能存入字典。不是必选参数,可以不存入字典。

推送类 SDK

个推

参数名 参数说明 备注
AppId 应用id 个推开发者后台进行申请
AppKey 应用 Key 个推开发者后台进行申请
AppSecret 应用 Secret AppID、AppKey、AppSecret都是应用与SDK通信的标识

个推

广告类 SDK

AdMob

参数名 参数说明 备注
AD Unit ID 后台申请的广告位
Pos Banner广告显示的位置
RequestAgent admob 广告 agent 例:cocos、unity、mopub 等等。
Size BANNER:标准横幅广告 LARGE_BANNER:大横幅 MEDIUM_RECTANGLE:IAB中矩形 FULL_BANNER:IAB全尺寸横幅广告 LEADERBOARD:IAB页首横幅广告 SMART_BANNER:智能横幅广告
  1. 更新 iOS9/Xcode7 后,若出现 Request Error: Received invalid response错误,请参考上文中 Xcode7 更新,NSAppTransportSecurity 的添加部分
  2. 需要真机测试,模拟器上可能无法显示广告

YoMob

参数名 参数说明 备注
appid YoMob提供的AppID

注意事项

  1. 并不使用框架的showAds的调用方法,需要使用扩展方法showAd(String SceneId)播放广告(需要传场景ID)
  2. 尽量早的调用预加载preloadAd()
  3. couldShowAd(String SceneId)判断广告是否准备好 (需要传场景ID) 调用方式例如 C++:
PluginParam data("senceid");
ads_plugin->callFuncWithParam("showAd", &data, NULL);

ads_plugin->callFuncWithParam("preloadAd", NULL);

PluginParam data("senceid");
bool showad = ads_plugin->callBoolFuncWithParam("couldShowAd", &data, NULL);
  1. 支持广告类型:奖励视频广告,插屏视频广告,插屏静态广告
  2. 插屏静态广告由于投放量不足的原因有可能显示不出来

回调说明:
1 - 广告开始播放
2 - 广告关闭
6 - 广告播放失败
10 - 用户点击了广告,正在跳转到其他页面
40000 - 广告播放完成
40001 - 广告预加载调用成功
40002 - 广告预加载调用失败
40003 - 静态插屏广告已就绪
40004 - 视频广告已就绪
40005 - 奖励广告条件达成,可以向用户发放奖励
40006 - 奖励广告条件未达成,无法向用户发放奖励

分享类 SDK

ShareSDK

参数名 参数说明 备注
AppKey 应用 Key Mob后台注册之后得到的 AppKey
SortId 此平台在您分享列表中的位置,整型,数值越大越靠后 数字,不要以0开头
AppId 填写您在平台上注册到的 AppId
AppKey 填写您在平台上注册到的 AppKey
AppSecret 填写您在平台上注册到的 AppSecret
RedirectUrl 填写您在新浪微博或者腾讯微博上注册的 RedirectUrl

上线注意事项

关于各平台的参数申请,可以参考 ShareSDK 官方论坛的教程

需要以下参数,其中 imagePath 为工程中存在的图片文件名

info["title"] = "ShareSDK是一个神奇的SDK";
info["text"] = "测试文本";
info["url"] ="http://www.mob.com";
info["imageUrl"] = "http://www.baidu.com/img/bdlogo.png?tn=63090008_1_hao_pg";
info["imagePath"] = "123.png";

注意事项,如果不能分享到微博手机客户端,请看一下是否有在 ShareSDK 的后台配置新浪相关的信息。 微博分享

微信

上线注意事项

  1. 分享有如下参数:
    shareTo:分享的目标,"0" 聊天窗口,"1" 朋友圈,"2" 收藏
    mediaType:分享类型,"0" 文本,"1" 图片,"2" 页面
    thumbImage:本地的缩略图路径,小于 32 k
    url:网页的链接
    imagePath:本地的图片路径
    title:分享的标题
    text:分享的内容
  2. imagePath和thumbImage必须在本地路径,若使用网络图片或者截图,需要先保存到本地可读写目录。如果要使用工程内的图片,可以直接将图片拖到Xcode工程内,并直接传文件名。
分享的类型 需要的参数
文本 shareTo、mediaType、text
图片 shareTo、mediaType、imagePath、thumbImage
页面 shareTo、mediaType、thumbImage、url、title、text

例如:

info["title"] = "微信分享";  
info["mediaType"] = "1"; 分享类型: 0-文字 1-图片 2-网址  
info["shareTo"] = "2"; 分享到:0-聊天 1-朋友圈 2-收藏  
info["url"] ="http://sharesdk.cn";  
info["text"] = "测试一下。。测试一下。。测试一下啊。。。";  
info["thumbImage"] = "ics.png"; //缩略图(小于32K)  
info["imagePath"] = "123.png"; 

Facebook

参数名 参数说明 备注
AppId AppId

上线注意事项

分享有如下参数:
mediaType:分享类型,"1" 图片,"2" 页面
url:网页链接
imageUrl:图片链接
imagePath:本地的图片路径
title:分享的标题
text:分享的内容

分享的类型 需要的参数
图片 mediaType、imagePath
页面 mediaType、imageUrl、url、title、text

【评论区】