跳到主要内容
版本:v3

更新唤起开发指南

信息

本文档只适用于国内版本,海外版本请参考 文档

环境要求

  • 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'
}

权限说明

集成前准备

使用更新唤起功能前提需要通过 TapTap 开发者中心 > 商店 > 游戏资料 > 商店资料 中已经上传 APK, 发布设置为 立即上线 并通过 审核(开发者包如果暂时不想对外,发布状态选 敬请期待 或者 预约)。

SDK 获取

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.jsondependencies 同级下声明 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 可查看已经安装在项目中的包。

方法二:手动导入

  1. 下载页 找到 TapSDK Unity 下载地址,分别下载 TapSDK-UnityPackage.zip

    然后请点击下载 TapTap_AndroidDependencyResolver.unitypackage

  2. 在 Unity 项目中依次转到 Assets > Import Packages > Custom Packages,从解压后的 TapSDK-UnityPackage.zip 中,选择希望在游戏中使用的 TapSDK 包导入,其中:

    • TapTap_Common.unitypackage TapSDK 基础库,必选。
    • TapTap_Update.unitypackage TapTap 唤起更新库,必选。
    • TapTap_AndroidDependencyResolver.unitypackage 必选。
  3. 如果当前项目已集成 Newtonsoft.Json 依赖,则忽略该步骤,否则在 NuGet.org Newtonsoft.Json 页面中通过点击右侧 「Download package」 下载库文件,并将下载的文件后缀从.nupkg 修改为 .zip,同时解压该文件并复制内部的 Newtonsoft.Json.dll 文件拷贝到工程 AssetsPlugins 目录下,另外为了避免导出 IL2CPP 平台时删除必要数据,需在 Assets 目录下创建 link.xml 文件(如果已有该文件,则添加如下内容),其内容如下:

<linker>
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
</assembly>
</linker>

初始化

信息

以下两种初始化方式任选其一。

TapSDK 初始化

如果你已经完成内建账户系统 Tap 登录的初始化,这里只需要引入更新唤起模块,不需要其他额外处理。

更新唤起单独初始化

根据在开发者中心的应用配置,开发者调用如下接口:

using TapTap.Update

TapUpdate.Init("clientId", "clientToken");

参数说明

参数描述
clientIdTapTap 开发者中心对应应用的 Client ID
clientTokenTapTap 开发者中心对应应用的 Client Token

开始更新

提示

TapSDK 如果检查当前设备未安装 TapTap 客户端,首先会弹窗询问用户「是否需要使用 TapTap 更新」,当点击「取消」按钮时取消更新的回调方法才会执行。

using TapTap.Update

TapTap.Update.TapUpdate.UpdateGame(() => {
// 取消更新的事件
});

打开游戏评论区

如果玩家设备已经安装 TapTap 客户端,会打开游戏所在 TapTap 客户端对应的评论区页面,如果玩家设备没有安装 TapTap 客户端,则打开游戏评论区失败,需要游戏侧自行处理相关逻辑。

// 适用于中国大陆
TapCommon.OpenReviewInTapTap(appId, openSuccess =>
{
if (openSuccess) {
Debug.Log("打开游戏评论区成功");
} else {
Debug.Log("打开游戏评论区失败");
}
});

// 适用于其他国家或地区
TapCommon.OpenReviewInTapGlobal(appId, openSuccess =>
{
if (openSuccess) {
Debug.Log("打开游戏评论区成功");
} else {
Debug.Log("打开游戏评论区失败");
}
});

appid:游戏在 TapTap 商店的唯一身份标识。 例如:https://www.taptap.cn/app/187168,其中 187168appid

测试

为了保证上线后,游戏对于用户是否正常使用更新唤起功能,请务必按照以下说明完成自测。

上传 APK

新应用需要上传测试的 APK 至开发者中心,并通过审核。已上架的游戏,需确保更新资料版本中的 APK 包名和已上架的 APK 包名保持一致。

应用上线

针对已上架的游戏,开发者需确保更新资料版本中的包名和已上架的游戏包名保持一致,否则会导致玩家因包名不一致而更新失败。

针对新游戏,开发者需要在 TapTap 上线一个包含 APK 包并且通过审核(用于平台获取游戏包名,包名需与后续更新的包名保持一致)的商店资料版本,如果 APK 包当前无法对外,可将发布状态设置为「敬请期待」或「预约」。

开始测试

触发更新唤起功能后正常状态是可以唤起应用在 TapTap 商店的详情页面。