跳到主要内容
版本:v7

Unity

Unity 引擎 SDK 支持移动端的 Android 和 iOS 平台和 PC 平台

环境要求​

  • Unity 2019.4 或更高版本
  • Android 5.0, API 21 或更高版本
  • iOS 国内最低 13.0,海外最低 15.0

项目配置​

添加 SDK 依赖​

在 Packages/manifest.json 中按需添加下述内容,建议和平台同事确认具体内容以免添加多余模块:

{
"dependencies": {
"com.xd.sdk.foundation": "7.9.3",
"com.xd.sdk.common": "7.9.3",
"com.xd.sdk.account": "7.9.3",
"com.xd.sdk.tap": "4.10.8-xd.2",
"com.xd.sdk.webview": "1.0.1",
// 上面是必选模块,以下为可选模块
// XDSDK 统一封装 TapSDK 模块
// 包含 TapSDK 成就、云存档
"com.xd.sdk.tap.plus": "4.10.8-xd.2",
// XDSDK 支付模块
"com.xd.sdk.payment": "7.9.3",
// XDSDK 海外模块,包含海外第三方业务 SDK
"com.xd.sdk.oversea": "7.9.3",
// XDSDK 国内模块,包含国内第三方业务 SDK
"com.xd.sdk.mainland": "7.9.3",
// XDSDK 分享模块,包含国内外不同的分享逻辑,需要搭配国内或海外模块使用
"com.xd.sdk.share": "7.9.3",
// XDSDK 广告分包模块,包含今日头条广告SDK、分包SDK、腾讯广点通广告SDK、分包SDK
"com.xd.sdk.ads.subpkg": "3.7.2",
// XDSDK 公告模块
"com.xd.sdk.announcement": "7.9.3",
// XDSDK 举报模块
"com.xd.sdk.report": "7.9.3",
// XDSDK 推送模块
"com.xd.sdk.push": "7.9.3",
"com.unity.nuget.newtonsoft-json": "3.2.1",
"com.unity.textmeshpro": "3.0.6",
},
"scopedRegistries": [
{
// NPMJS 访问不通时可以切换到淘宝源试试 https://registry.npmmirror.com
// 公司内网可使用 http://npm.xindong.com
"name": "NPMJS",
"url": "https://registry.npmjs.org/",
"scopes": [
"com.xd"
]
}
]
}

XDSDK 版本信息参见:RELEASE NOTE,TapSDK 版本号参考:TapSDK ChangeLog。

相关配置文件​

  • 将前文中的 XDConfig.json 文件 移到 Assets 目录下。

  • 【可选】 需要使用 Firebase 埋点时

    • iOS:将 GoogleService-Info.plist 放在 /Assets/Plugins/iOS 中。
    • Android:将 google-services.json 放在 /Assets/Plugins/Android。

    以上两个文件是游戏从 Firebase 后台下载的。

iOS 平台配置​

如果您的 App 需要使用苹果登录、内购、推送等功能,请参考 配置文档 进行配置。

配置 App 所需能力​

SDK 不会自动修改 Xcode 工程的 Capabilities,App 用到的能力需要游戏自行开启:

功能需要开启的能力
苹果登录Sign in with Apple
苹果支付In-App Purchase
推送Push Notifications
Game Center 登录Game Center
微信、QQ 等分享的通用链接Associated Domains

在导出的 Xcode 工程中选中 Unity-iPhone Target,点击 + Capability 添加上述能力;也可以在 PostProcessBuild 脚本中用 ProjectCapabilityManager 自动添加,避免每次导出后手动操作。

img

添加后的能力会写入 Xcode 工程目录下的 Unity-iPhone.entitlements。Entitlements 里申请的能力必须和描述文件(Provisioning Profile)包含的能力一致,否则打包失败,请先在 Apple 开发者后台为 App ID 开启对应能力。Entitlements 示例如下,用不到的项可以删掉:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- 推送,测试环境用 development,正式环境用 production -->
<key>aps-environment</key>
<string>production</string>
<!-- 苹果登录 -->
<key>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
<!-- Game Center -->
<key>com.apple.developer.game-center</key>
<true/>
<!-- 通用链接,微信、QQ 等分享需要,替换为游戏自己的域名 -->
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:your.domain</string>
</array>
</dict>
</plist>

Android 平台配置​

网页支付​

XDSDK 海外支付业务因业务形态需要增加特殊配置,请按照以下步骤进行配置:

为启用 Chrome 自定义选项卡所需的配置添加 URL Scheme 属性,同时将 SchemeCCTActivity 添加到 AndroidManifest.xml 文件中:

提示

URL Scheme 组成规则:xd + xd_client_id,其中 xd_client_id 为全小写。

举例 : 你的 XD Client ID 为:hn5RcJei2JxCYlS0,在 AndroidManifest.xml 文件中添加的格式为

<data
android:host="xdcctwebpay"
android:scheme="xdhn5rcjei2jxcyls0"/>
<activity
android:name="com.xd.sdk.payment.ui.SchemeCCTActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>

<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>

<data
android:host="xdcctwebpay"
android:scheme="xd{your_xd_client_id}"/>
</intent-filter>
</activity>

Facebook 相关配置​

接入 Facebook SDK 时,无论是需要 Facebook 登录或者分享的功能,需要对应用进行一些额外的配置,详情可参见 Facebook 快速接入文档。以下是配置示例,请按照游戏实际参数值进行文本替换:

<!-- Facebook 分享需要的配置 -->
<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.app.FacebookContentProvider{your_application_id}"
android:exported="true" />

<!-- Facebook 在无端授权时需要做的配置(Facebook 已废弃内嵌 WebView 可授权模式,采用的是 Chrome Custom Tabs 服务,需要添加这个配置来做支持)-->
<activity
android:name="com.facebook.CustomTabActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="fb{your_application_id}" />
</intent-filter>

</activity>

特别需要注意的是:Facebook 的 Application ID 一般给到的是纯数字的 ID,在 Unity 或者 UE 上打包出来的 Android apk 在部分机型上 Facebook SDK 在初始化时读取内容会是纯数字,这时会报错。 对此情况可在 AndroidManifest.xml 文件配置中添加的 meta-data 标签中的 android:value 属性配置的值最前面添加"\"符号,或直接使用 Android 的 string.xml 资源文件形式进行资源 ID 引用。

<meta-data 
android:name="com.facebook.sdk.ApplicationId"
android:value="\1234567890987" />

// or

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_application_id" />

Android 11 适配配置​

App 以 Android 11(API 30)及以上为目标平台时,只有在 AndroidManifest.xml 的 <queries> 中声明过的应用才对 App 可见。未声明时,即使手机装了对应 App,也无法跳转到该 App 进行授权登录、分享或支付。

XDSDK 各模块已在自己的 Manifest 中声明了业务需要的应用,打包时会自动合并进最终的 AndroidManifest.xml,游戏无需重复添加:

模块已声明的应用
账号TapTap;海外另有 Facebook、Twitter、LINE
分享微信、QQ、QQ 空间、微博、抖音、快手、Facebook、Instagram、Twitter、LINE、TikTok
国内支付微信、支付宝、银联

SDK 的构建脚本还会把 3.3 到 3.6 版本的 Android Gradle Plugin 升级到支持 <queries> 的补丁版本,避免打包时报 unexpected element <queries>。

只有游戏自己的业务需要跳转其他应用时,才需要在 AndroidManifest.xml 的 manifest 标签下补充声明,例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
...
</application>

<queries>
<package android:name="{需要跳转的应用包名}" />
</queries>
</manifest>

如果手机已安装对应 App 但仍无法跳转,请检查导出工程中合并后的 AndroidManifest.xml 是否包含该应用的包名,例如微信为 com.tencent.mm。

PC 平台配置​

Steam SDK​

XDSDK 支持在 PC 平台集成 Steam SDK,且支持只出一个包即可同时发行 Steam 包和普通 PC 包,请参考如下文档进行配置:

  1. SDK 升级到 v7.3.0 及以上版本

  2. 在 Packages/manifest.json 中添加 Steam SDK 依赖:

    "com.xd.sdk.steam": "20.1.0",
  3. 在 PC 平台添加宏定义 XD_STEAM_SUPPORT

  4. 在 XDConfig.json 中添加 Steam 相关配置:

    {
    "steam_appid": 480, // 替换为你的 Steam App ID
    }
  5. 在项目根目录增加 steam_appid.txt 文件,内容为你的 Steam App ID,例如:

    480
  6. 如果游戏需要知道当前是否为 Steam 包,可以通过以下接口进行判断:

    bool isSteamPackage = XDGCommon.GetPackageType() == XDGPackageType.PackageTypePCSteam;

以上配置完成后,请咨询平台获取测试相关流程。