更新唤起开发指南
本文档只适用于国内版本,海外版本请参考 文档
环境要求
- Unity
- Android
- iOS
- UE4
- TapSDK 3.23.0 及以上版本
- Unity 2019.4 或更高版本
- Android 5.0(API level 21)或更高版本
点击展开 Unity 2022.3 之前的版本升级 Gradle 版本
为了将 Gradle 版本和 Android Gradle Plugin 版本对应,需要更新 Gradle 版本,下载 6.7.1 版本的 Gradle,解压后放到自定义的文件夹中,同时不勾选 Unity 中的 Preferences
-> External Tools
-> Android
-> Gradle Installed with Unity(recommend)
,改为选择解压后 Gradle 文件夹的位置,如 <some path>/gradle-6.7.1。
另外, Unity 更新唤醒模块会自动更新项目中使用的 Android Gradle Plugin 版本,如果您需要手动更改或者查看,可以在 Project Settings
-> Player
-> Android Tab
-> Publish Settings
-> Build
,然后勾选Custom Base Gradle Template
将以下更改应用于生成的这个文件: Assets/Plugins/Android/baseProjectTemplate.gradle
修改文件内容:
dependencies {
// 将版本修改至少为 4.2.0
classpath 'com.android.tools.build:gradle:4.2.0'
}
- TapSDK 3.23.0 及以上版本
- Android 5.0(API level 21)或更高版本
- 受限于苹果政策,iOS 平台的 TapTap 客户端不提供游戏更新功能
- 安装 UE 4.26 及以上版本
- iOS 12 或更高版本
- Android 5.0(API level 21)或更高版本
- macOS 10.14.0 或更高版本
- Windows 7 或更高版本
支持平台:Android / iOS / Windows / macOS
权限说明
- Unity
- Android
- iOS
- UE4
该模块依赖权限如下:
权限 | 使用目的 | 权限申请时机 |
---|---|---|
网络权限 | 用于正常网络访问 | 用户首次使用该功能时会申请权限 |
安装 APK 权限 | 用于安装 Tap 客户端 | 用户首次使用该功能时会申请权限 |
同时该模块也会访问设备已安装的 Tap 客户端信息,所以接入 SDK 后将在应用 AndroidManifest.xml
中添加如下配置:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<queries>
<package android:name="com.taptap" />
<package android:name="com.taptap.global" />
</queries>
集成前准备
使用更新唤起功能前提需要通过 TapTap 开发者中心 > 商店 > 游戏资料 > 商店资料 中已经上传 APK, 发布设置为 立即上线 并通过 审核(开发者包如果暂时不想对外,发布状态选 敬请期待 或者 预约)。
SDK 获取
- Unity
- Android
- iOS
- UE4
SDK 可以通过 Unity Package Manager 导入或手动导入,二者任选其一。请根据项目需要选择。
方法一:使用 Unity Package Manager
从 3.29.1 版本开始, SDK 修改 JSON 解析库为 Newtonsoft-json
,如果当前工程已接入该依赖库,则不需额外处理,否则需在 Packages/manifest.json
添加如下依赖:
"com.unity.nuget.newtonsoft-json":"3.2.1"
NPMJS 安装
从 3.25.0 版本开始,TapSDK 支持了 NPMJS 安装,优势是只需要配置版本号,并且支持嵌套依赖。
在项目的 Packages/manifest.json
文件中添加以下依赖:
"dependencies":{
"com.taptap.tds.update":"3.29.4",
"com.taptap.tds.common":"3.29.4",
}
但需要注意的是,要在 Packages/manifest.json
中 dependencies
同级下声明 scopedRegistries
:
"scopedRegistries": [
{
"name": "NPMJS",
"url": "https://registry.npmjs.org/",
"scopes": ["com.tapsdk", "com.taptap"]
}
]
GitHub 安装
在项目的 Packages/manifest.json
文件中添加以下依赖:
"dependencies":{
"com.taptap.tds.common":"https://github.com/TapTap/TapCommon-Unity.git#3.29.4",
"com.taptap.tds.update":"https://github.com/TapTap/TapUpdate-Unity.git#3.29.4",
"com.tapsdk.androiddependencyresolver":"1.2.1",
}
"scopedRegistries": [
{
"name": "TapSDK",
"url": "https://nexus.tapsvc.com/repository/npm-registry/",
"scopes": [
"com.tapsdk",
"com.taptap"
]
}
]
在 Unity 顶部菜单中选择 Window > Package Manager 可查看已经安装在项目中的包。
方法二:手动导入
在 下载页 找到 TapSDK Unity 下载地址,分别下载
TapSDK-UnityPackage.zip
。然后请点击下载
TapTap_AndroidDependencyResolver.unitypackage
。在 Unity 项目中依次转到 Assets > Import Packages > Custom Packages,从解压后的
TapSDK-UnityPackage.zip
中,选择希望在游戏中使用的 TapSDK 包导入,其中:TapTap_Common.unitypackage
TapSDK 基础库,必选。TapTap_Update.unitypackage
TapTap 唤起更新库,必选。TapTap_AndroidDependencyResolver.unitypackage
必选。
如果当前项目已集成
Newtonsoft.Json
依赖,则忽略该步骤,否则在NuGet.org
Newtonsoft.Json 页面中通过点击右侧 「Download package」 下载库文件,并将下载的文件后缀从.nupkg
修改为.zip
,同时解压该文件并复制内部的Newtonsoft.Json.dll
文件拷贝到工程Assets
的Plugins
目录下,另外为了避免导出 IL2CPP 平台时删除必要数据,需在Assets
目录下创建link.xml
文件(如果已有该文件,则添加如下内容),其内容如下:
<linker>
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
</assembly>
</linker>
在 下载页 获得 TapSDK,添加 TapUpdate
和 TapCommon
模块。
repositories{
flatDir {
dirs 'libs'
}
}
dependencies {
...
implementation (name:'TapUpdate_3.29.4', ext:'aar')
implementation (name:'TapCommon_3.29.4', ext:'aar')
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
implementation 'androidx.core:core:1.6.0'
implementation 'com.google.android.flexbox:flexbox:3.0.0'
}
受限于苹果政策,iOS 平台的 TapTap 客户端不提供游戏更新功能
安装插件
- 下载 TapSDK UE4,TapSDK-UE4-xxx.zip 解压后将
TapUpdate
、TapCommon
文件夹 Copy 到项目的Plugins
目录中 - 重启 Unreal Editor
- 打开 编辑 > 插件 > 项目 > TapTap,开启
TapUpdate
模块
添加依赖
在 Project.Build.cs 中添加所需模块:
PublicDependencyModuleNames.AddRange(new string[] { "Core",
"CoreUObject",
"Engine",
"Json",
"InputCore",
"JsonUtilities",
"SlateCore",
"TapCommon",
"TapUpdate",
});
导入头文件
#include "TapUpdate.h"
初始化
以下两种初始化方式任选其一。
TapSDK 初始化
如果你已经完成内建账户系统 Tap 登录的初始化,这里只需要引入更新唤起模块,不需要其他额外处理。
更新唤起单独初始化
根据在开发者中心的应用配置,开发者调用如下接口:
- Unity
- Android
- iOS
- UE4
using TapTap.Update
TapUpdate.Init("clientId", "clientToken");
import com.taptap.services.update.TapUpdate;
TapUpdate.init(activity, "clientId", "clientToken");
受限于苹果政策,iOS 平台的 TapTap 客户端不提供游戏更新功能
FTapUpdate::Init(TEXT("clientId"), TEXT("clientToken"));
参数说明
参数 | 描述 |
---|---|
clientId | TapTap 开发者中心对应应用的 Client ID |
clientToken | TapTap 开发者中心对应应用的 Client Token |
开始更新
TapSDK 如果检查当前设备未安装 TapTap 客户端,首先会弹窗询问用户「是否需要使用 TapTap 更新」,当点击「取消」按钮时取消更新的回调方法才会执行。
开发者需自行维护版本校验接口,以便在新版本发布时触发 TapTapUpdate#UpdateGame 接口。这一流程将有效提升用户体验。
- Unity
- Android
- iOS
- UE4
using TapTap.Update
TapTap.Update.TapUpdate.UpdateGame(() => {
// 取消更新的事件
});
由于更新唤起 UI 依赖于开发者设置的 Activity 实例,所以为了避免因 Activity 发生重建导致更新唤起功能不可用,开发者应确保在屏幕旋转、配置修改时当前 Activity 不会发生重建,具体设置方式参考 限制 activity 重新创建
import com.taptap.services.update.TapUpdate;
import com.taptap.services.update.TapUpdateCallback;
TapUpdate.updateGame(DemoUpdateActivity.this, new TapUpdateCallback() {
@Override
public void onCancel() {
// 取消更新的事件
}
});
受限于苹果政策,iOS 平台的 TapTap 客户端不提供游戏更新功能
FTapUpdate::UpdateGame(FSimpleDelegate::CreateLambda([]() {
// Update cancel
}));
打开游戏评论区
如果玩家设备已经安装 TapTap 客户端,会打开游戏所在 TapTap 客户端对应的评论区页面,如果玩家设备没有安装 TapTap 客户端,则打开游戏评论区失败,需要游戏侧自行处理相关逻辑。
- Unity
- Android
- iOS
// 适用于中国大陆
TapCommon.OpenReviewInTapTap(appId, openSuccess =>
{
if (openSuccess) {
Debug.Log("打开游戏评论区成功");
} else {
Debug.Log("打开游戏评论区失败");
}
});
// 适用于其他国家或地区
TapCommon.OpenReviewInTapGlobal(appId, openSuccess =>
{
if (openSuccess) {
Debug.Log("打开游戏评论区成功");
} else {
Debug.Log("打开游戏评论区失败");
}
});
// 适用于中国大陆
if(TapGameUtil.openReviewInTapTap(this,"appid")){
Log.d(TAG, "打开评论区成功");
} else {
Log.d(TAG, "打开评论区失败");
}
// 适用于其他国家或地区
if(TapGameUtil.openReviewInTapGlobal(this,"appid")){
Log.d(TAG, "打开评论区成功");
} else {
Log.d(TAG, "打开评论区失败");
}
// 未支持
appid:游戏在 TapTap 商店的唯一身份标识。
例如:https://www.taptap.cn/app/187168
,其中 187168
是 appid
。
测试
为了保证上线后,游戏对于用户是否正常使用更新唤起功能,请务必按照以下说明完成自测。
上传 APK
新应用需要上传测试的 APK 至开发者中心,并通过审核。已上架的游戏,需确保更新资料版本中的 APK 包名和已上架的 APK 包名保持一致。
应用上线
针对已上架的游戏,开发者需确保更新资料版本中的包名和已上架的游戏包名保持一致,否则会导致玩家因包名不一致而更新失败。
针对新游戏,开发者需要在 TapTap 上线一个包含 APK 包并且通过审核(用于平台获取游戏包名,包名需与后续更新的包名保持一致)的商店资料版本,如果 APK 包当前无法对外,可将发布状态设置为「敬请期待」或「预约」。
开始测试
触发更新唤起功能后正常状态是可以唤起应用在 TapTap 商店的详情页面。