Android
环境要求
- Android 5.0,API 21 或更高版本。
请注意:XDSDK 目前使用的是 AndroidX 方案,与旧版本的 support 版本不兼容,建议游戏采用 AndroidX 版本,为以后在 Android 平台有更好的支持。
接入前准备
请联系平台同事获取最新的 SDK 压缩包,解压后选择需要用到的 SDK aar 包导入到项目 your_app > app > libs
目录下。
集成 XDSDK
- 在您的项目中,打开
your_app > Gradle Scripts > build.gradle(Module:app)
,添加以下依赖到dependencies{}
部分:
// 基础库, 必须
implementation files('libs/XDGCommon_6.23.5.aar')
// 登录
implementation files('libs/XDGAccount_6.23.5.aar')
// 支付
implementation files('libs/XDGPayment_6.23.5.aar')
// 第三方登录
implementation files('libs/XDGThirdLogin_6.23.5.aar')
// 第三方登录(国内)
implementation files('libs/XDGThirdLoginCN_6.23.5.aar')
// 第三方埋点
implementation files('libs/XDGThirdTrack_6.23.5.aar')
// 第三方分享(合并国内海外)
implementation files('libs/XDGSharing_6.23.5.aar')
// 手机「一键登录」(国内)
implementation files('libs/ali_auth_number_2.12.11.2.aar')
implementation files('libs/main-2.1.4-release.aar')
implementation files('libs/logger-2.1.5.2-release.aar')
// XDSDK 广告包/分包(可选)
implementation files('libs/XDADs_6.23.5.aar')
// XDSDK 依赖的 TapSDK 库
implementation files('libs/TapBootstrap_3.29.5.aar')
implementation files('libs/TapCommon_3.29.5.aar')
implementation files('libs/TapLogin_3.29.5.aar')
implementation files('libs/TapDB_3.29.5.aar')
// 基础库依赖
implementation 'com.taptap:lc-realtime-android:8.2.24'
implementation 'com.taptap:lc-storage-android:8.2.24'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.7.2'
implementation 'com.squareup.okio:okio:2.6.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'com.google.code.gson:gson:2.8.6'
// Google Advertising ID
implementation "com.google.android.gms:play-services-ads-identifier:17.0.0"
// 国内分享相关
//wechat share
implementation "com.tencent.mm.opensdk:wechat-sdk-android:6.8.0"
//sina weibo share
implementation "io.github.sinaweibosdk:core:$12.5.0@aar"
// qq share
implementation files('libs/open_sdk_3.5.14.3_rc26220c_lite.jar')
// 国内支付相关
// 支付宝支付
implementation "com.alipay.sdk:alipaysdk-android:15.8.11@aar"
// 微信支付(同微信分享)
implementation "com.tencent.mm.opensdk:wechat-sdk-android:6.8.0"
XDSDK 版本信息参见:RELEASE NOTE, TapSDK 版本信息参见:TapSDK RELEASE NOTE。
- XDSDK 包含了登录、支付及一些基础功能,游戏可自行选择需要接入的模块,第三方登录、第三方埋点同理。
- XDSDK 本身不强制绑定 TapSDK 的版本,TapSDK 未有重大 API 变动时,游戏可根据自身需求依赖对应的 TapSDK 版本。
- 添加 OAID SDK
为保证 TapDB 数据的精准性,需要游戏将 OAID SDK 添加到项目中,下载 OAID SDK,在
your_app > Gradle Scripts > build.gradle(Module:app)
,添加 OAID SDK 依赖到 dependencies{} 中。
implementation(name: "oaid_sdk_1.0.25", ext: "aar")
- 将 前文中的 XDConfig.json 文件 移到
your_app > src > main > assets
文件夹下。 - 构建项目。
网页支付配置相关
XDSDK 从 6.6.0 版本开始,针对 RegionType 为 Global 的类型的网页支付(即海外),在网页支付上不再使用嵌入式 WebView 的形式, 改为使用 Android 上的 Chrome 自定义选项卡。
- 添加 Custom Tabs 依赖:
dependencies {
...
implementation "androidx.browser:browser:1.4.0"
}
- 针对 Android 11(Android Api Level >= 30)及以上软件包可见性的适配,在 AndroidManifest.xml 文件中增加 Custom Tabs Service 查询以及支持获取第三方浏览器的信息的查询:
<queries>
...
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService"/>
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
...
</queries>
- 为启用 Chrome 自定义选项卡所需的配置添加 URL Scheme 属性,同时将
SchemeCCTActivity
添加到 AndroidManifest.xml 文件中:
URL Scheme 组成规则:xd + xd_client_id,其中 xd_client_id 为全小写。 eg. : 你的 XD Client ID 为:hn5RcJei2JxCYlS0,在 AndroidManifest.xml 文件中添加的格式为 <data android:scheme="xdhn5rcjei2jxcyls0" />
<activity
android:name="com.xd.intl.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>
第三方登录配置相关
XDSDK 默认只提供 TapTap 登录和游客登录,其他第三方登录功能集成在 XDGThirdLogin 模块中,游戏可根据自身需要添加对应第三方平台登录配置。
在 your_app > Gradle Scripts > build.gradle(Module:app)
中添加以下依赖:
// Google 登录
implementation "com.google.android.gms:play-services-auth:16.0.1"
// Facebook 登录
implementation "com.facebook.android:facebook-login:15.2.0"
// Twitter 登录
implementation "com.twitter.sdk.android:twitter:3.3.0"
// LINE 登录
implementation "com.linecorp:linesdk:5.0.1"
手机号码「一键登录」配置相关
- 集成阿里云 SDK
XDSDK 使用阿里云「一键登录」SDK 功能相关,需要添加所需的 aar 包,在 your_app > Gradle Scripts > build.gradle(Module:app)
中添加以下依赖:
// 阿里云一键登录
implementation files('libs/ali_auth_number_2.12.11.2.aar')
// 阿里云 SDK 内部的一些核心工具类
implementation files('libs/main-2.1.4-release.aar')
// 阿里云 SDK 内部用于收集日志信息和监控告警
implementation files('libs/logger-2.1.5.2-release.aar')
- 可选:若您需要开启资源混淆,则需要在相应工程的
res/raw/keep.xml
文件中添加以下代码:
tools:keep="@drawable/authsdk*,
@layout/widget_pns_*,
@anim/authsdk*,
@theme/authsdk_*,
@id/pns_*,
@id/authsdk*,
@color/pns_*,
@dimen/pns_*"
- 可选:域名配置。部分终端设备使用的是中国联通 SIM 卡的 5G 移动数据,可能会导致使用一键登录功能获取本机号码失败。可在 networkSecurityConfig.xml 清单文件配置中添加联通域名(
enrichgw.10010.com
)解决此问题
networkSecurityConfig.xml 示例:
<network-security-config>
<domain-config cleartextTrafficPermitted="true" >
<domain includeSubdomains="true">enrichgw.10010.com</domain> <!-- 联通内部5G请求域名,开发者需要添加 -->
<domain includeSubdomains="true">onekey.cmpassport.com</domain> <!-- 移动内部请求域名,开发者需要添加 -->
</domain-config>
</network-security-config>
- HTTP 配置。在
AndroidManifest.xml
里,给 Application 节点增加 usesCleartextTraffic 配置。
<application
...
android:usesCleartextTraffic="true">
...
</application>
目前中国移动提供的个别接口为 HTTP 请求,对于全局禁用 HTTP 的项目,需要配置 HTTP 白名单。以下为运营商 HTTP 接口域名:onekey.cmpassport.com
,enrichgw.10010.com
。
第三方埋点配置相关
XDSDK 默认只提供 TapDB 埋点功能(内含支付成功埋点事件),其他第三方埋点功能集成在 XDGThirdTrack 模块中,游戏可根据自身需要添加对应第三方平台埋点配置。
在 your_app > Gradle Scripts > build.gradle(Module:app)
中添加以下依赖:
// AppsFlyer
implementation 'com.appsflyer:af-android-sdk:6.5.2'
implementation 'com.android.installreferrer:installreferrer:2.2'
// Adjust
implementation 'com.adjust.sdk:adjust-android:4.24.1'
// Firebase
implementation "com.google.firebase:firebase-core:18.0.0"
Google 支付配置相关
在 your_app > Gradle Scripts > build.gradle(Module:app)
中添加以下依赖:
implementation "com.android.billingclient:billing:4.1.0"
Firebase 推送配置
需要使用 XDSDK 默认处理的 Firebase 推送通知功能,请按照下列步骤集成 Firebase。
添加 Firebase 配置文件。前往 Firebase 控制台,将 Firebase Android 配置文件添加到您的应用:
- 点击下载 google-services.json 以获取 Firebase Android 配置文件(
google-services.json
)。 - 将配置文件移动到应用模块(应用级)目录中。
- 点击下载 google-services.json 以获取 Firebase Android 配置文件(
将 google-service 插件添加到 Gradle 文件中。
(1). 在根级(项目级)Gradle 文件(
build.gradle
)中添加规则,以纳入 Google 服务 Gradle 插件。此外,请确认您拥有 Google 的 Maven 代码库。buildscript {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
dependencies {
// ...
// Add the following line:
classpath 'com.google.gms:google-services:4.3.10' // Google Services plugin
}
}
allprojects {
// ...
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
// ...
}
}(2). 在您的模块(应用级)Gradle 文件中(通常是
app/build.gradle
)中,应用 Google 服务 Gradle 插件:apply plugin: 'com.android.application'
// Add the following line:
apply plugin: 'com.google.gms.google-services' // Google Services plugin
android {
// ...
}请在
your_app > Gradle Scripts > build.gradle(Module:app)
中添加 FCM 依赖:
implementation "com.google.firebase:firebase-messaging:21.1.0"
请在 AndroidManifest.xml 文件中添加 Firebase 推送相关的配置,请注意全路径匹配:
<service
android:name="com.xd.intl.common.firebase.TDSGlobalFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
分享相关配置
- 确保 XDConfig.json 配置文件中已配置 QQ、微信、微博的配置:
{
...
"wechat": {
"app_id": "********", // WeChat 分享/支付 配置,可选,没有可以删除配置
},
"qq": {
"app_id": "*******", // QQ 分享配置,可选,没有可以删除配置
},
"weibo": {
"app_id": "*******", // Weibo 分享配置,可选,没有可以删除配置
}
}
- 集成分享 SDK
请参考新版分享进行集成
国内微信支付相关配置
- 确保 XDConfig.json 配置文件中已配置微信的
{app_id}
参数值:
{
...
"wechat": {
"app_id": "********", // WeChat 分享/支付 配置,可选,没有可以删除配置
}
}
- 集成微信支付 SDK
微信支付的 SDK 与分享功能集成的 SDK 是同一个,确保已添加微信 SDK 的依赖:
// 微信支付
implementation "com.tencent.mm.opensdk:wechat-sdk-android:6.8.0"
- 在应用的 AndroidManifest.xml 文件中添加如下配置,请将
{应用包名}
替换为游戏正确包名,否则无法收到微信支付回调:
<activity-alias
android:name="{应用包名}.wxapi.WXPayEntryActivity"
android:exported="true"
android:targetActivity="com.xd.intl.payment.impl.wechatpay.WXPayEntryActivity" />
Android 11 适配
从 XDSDK 6.15.0 的版本开始,我们对业务范围内需要添加的 Android 11 及以上的版本中需要增加的软件包可见性的适配进行了增加,您可只关心其他业务需要增加的配置即可。
如果您的应用以 Android 11(API 级别
30)或更高版本为目标平台,在默认情况下,系统会自动让部分应用对您的应用可见,但会隐藏其他应用。通过让部分应用在默认情况下不可见,系统可以了解应向您的应用显示哪些其他应用,这样有助于鼓励最小权限原则,还可帮助 Google Play
等应用商店评估应用为用户提供的隐私权和安全性。
针对 XDSDK 支持的登录类型的平台,在手机安装有对应 App 的情况下,无法正常跳转外部 App 进行授权登录时请参考以下配置项进行软件包可见性的适配配置,将配置添加到 AndroidManifest.xml
文件中:
<!--添加如下 queries 标签的内容,直接在 manifest 标签下-->
<queries>
<!-- TapTap -->
<package android:name="com.taptap"/>
<package android:name="com.taptap.pad"/>
<package android:name="com.taptap.global"/>
<!-- Facebook -->
<package android:name="com.facebook.katana"/>
<!-- Facebook 有端分享 -->
<provider android:authorities="com.facebook.katana.provider.PlatformProvider"/>
<!-- Twitter -->
<package android:name="com.twitter.android"/>
<!-- LINE -->
<package android:name="jp.naver.line.android"/>
<!-- 国内分享-->
<!-- wechat-->
<package android:name="com.tencent.mm"/>
<!-- qq -->
<package android:name="com.tencent.mobileqq"/>
<!-- qq 空间-->
<package android:name="com.tencent.qzone"/>
<!-- weibo-->
<package android:name="com.sina.weibo"/>
</queries>
Facebook 相关配置
接入 Facebook SDK 时,无论是需要 Facebook 登录或者分享的功能,需要对应用进行一些额外的配置,详情可参见按照 Facebook 快速接入文档。以下是配置示例,请按照游戏实际参数值进行文本替换:
<!-- Facebook Application ID 配置 -->
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="{your_application_id}" />
<!-- 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" />
常见问题
升级 OAID 库与其他库有冲突?
构建 Android App 时提示 OAID 库与其他库有 android:allowBackup
属性冲突,这里推荐游戏以 OAID 的配置为准,在 AndroidManifest.xml
文件中的 <application>
节点添加以下属性:
...
<manifest>
<application
...
xmlns:tools="http://schemas.android.com/tools"
android:allowBackup="false"
tools:replace="android:allowBackup" >
...
</application>
</manifest>
...
当然,如果有特殊需求,可以将 android:allowBackup
的属性设置为 true,关于 android:allowBackup
属性的说明请参考 Google 官方文档,请按照实际需求来变更需要的属性。
接入海外版本的 XDSDK 网页支付支付结束之后无法跳转回游戏?
请参考网页支付配置相关内容进行配置更改,请注意 xd_client_id 的全小写匹配规则。