App Center分发 - Unity 应用内更新
App Center分发版可让用户/测试人员在通过应用分发应用后安装App Center。 启用后,SDK 会向用户显示更新对话框,以下载或推迟安装最新更新。 选择更新后,SDK 将开始更新应用程序。
重要
Distribute SDK for Unity 不支持 UWP。 本页中的说明仅涵盖 Android 和 iOS。
警告
Google Play应用内更新代码视为恶意行为,即使在运行时未使用。 按照本部分中的说明 删除此代码 ,然后再将应用提交到Google Play。 如果不删除应用内更新代码,可能会导致不相容,并从应用中删除Google Play。
备注
如果运行的是自动化 UI 测试,则启用的应用内更新将阻止自动化 UI 测试,因为它们将尝试针对后端App Center身份验证。 建议为 UI 测试禁用应用内更新。
将应用内更新添加到应用
添加"App Center分发"模块
App Center SDK 采用模块化方法设计 - 开发人员只需集成他们感兴趣的服务的模块。
如果 尚未在应用程序中 设置和启动 SDK,请按照 Unity 入门文档操作。 请确保导入"分发App Center包。 其名称应采用 格式 AppCenterDistribute-v{version}.unitypackage 。
删除 Google Play 生成的应用内更新
Google Play 将应用内更新代码视为恶意行为,即使在运行时不使用也是如此。 在将应用提交到 Google Play 之前,请删除此代码。 未能删除应用内更新代码可能会导致不符合 Google Play 的应用程序。 若要删除应用内更新本机代码,请在附加了 AppCenterBehavior 的游戏对象的 "分布" 部分下,取消选中 "使用分发" 复选框。
使用专用通讯组
默认情况下,分发使用公共通讯组。 如果要使用私有通讯组,则需要将 UpdateTrack 其更改为 "专用"。
为此,请在 "已附加 AppCenterBehavior 的游戏对象上的 更新跟踪 " 下拉 列表中选择 "专用"。
使用 "专用" 轨迹时,将打开一个浏览器窗口,用于对用户进行身份验证。 所有后续的更新检查将获取专用轨上的最新版本。
如果用户使用的是 专用轨迹,这意味着在身份验证成功后,他们将从其所属的任何专用通讯组获取最新版本。 如果用户位于 公共轨 上,则表示他们将从任何公共通讯组获得最新版本。
禁用自动检查更新
默认情况下,SDK 会自动检查新版本:
- 当应用程序启动时。
- 当应用程序进入后台后,再次在前台。
- 如果在以前禁用了分布式模块,则启用它。
如果要手动检查新版本,可以禁用自动检查更新。
为此,请在附加了 AppCenterBehavior 的游戏对象上,取消选中 "分布" 部分下的 "自动检查更新" 复选框。
然后,可以使用 CheckForUpdate 以下部分所述的 API。
手动检查更新
Distribute.CheckForUpdate();
这会向用户发送App Center并显示更新对话框,以防有新版本可用。
备注
即使启用了自动更新,手动检查更新调用也有效。 如果已在执行另一项检查,则忽略更新的手动检查。 如果用户已推迟更新,将不会处理更新的手动检查 (除非最新版本是必需的更新) 。
自定义或本地化应用内更新对话框
1.自定义或本地化文本
如果要本地化更新对话框中显示的文本,可以提供自己的资源字符串。 在此 iOS 资源文件中查看适用于 iOS 的字符串文件,在此 Android 资源文件中查看 适用于 Android 的字符串文件。 使用相同的字符串名称/键,并指定要反映在你自己的应用资源文件的对话框中的本地化值。
2.自定义更新对话框
可以通过实现回调来自定义默认更新对话框 ReleaseAvailable 的外观。
警告
需要在应用程序加载的第一个场景中 的 方法中注册回调, Awake MonoBehaviour 以避免缺少任何释放回调调用。
// In this example, OnReleaseAvailable is a method name in same class
Distribute.ReleaseAvailable = OnReleaseAvailable;
下面是将 SDK 对话框替换为自定义逻辑的回调实现:
bool OnReleaseAvailable(ReleaseDetails releaseDetails)
{
// Look at releaseDetails public properties to get version information, release notes text or release notes URL
string versionName = releaseDetails.ShortVersion;
string versionCodeOrBuildNumber = releaseDetails.Version;
string releaseNotes = releaseDetails.ReleaseNotes;
Uri releaseNotesUrl = releaseDetails.ReleaseNotesUrl;
// (Do something with the values if you want)
// On mandatory update, user can't postpone
if (releaseDetails.MandatoryUpdate)
{
// Force user to update (you should probably show some custom UI here)
Distribute.NotifyUpdateAction(UpdateAction.Update);
}
else
{
// Allow user to update or postpone (you should probably show some custom UI here)
// "GetUserUpdateAction()" isn't part of the SDK; it just represents a way of getting user response.
// This blocks the thread while awaiting the user's response! This example shouldn't be used literally
UpdateAction updateAction = GetUserUpdateAction();
Distribute.NotifyUpdateAction(updateAction);
}
// Return true if you're using your own UI to get user response, false otherwise
return true;
}
适用于 Android 的实现说明:
如示例中所示,如果回调返回 ,则必须调用 Distribute.NotifyUpdateAction(UpdateAction.UPDATE); Distribute.NotifyUpdateAction(UpdateAction.POSTPONE); 或 true 。
如果不调用 ,则 NotifyUpdateAction 每次活动更改时都会重复回调。
如果在向 SDK 通知用户操作之前活动发生更改,可以使用相同的版本再次调用回调。
需要此行为来涵盖以下方案:
- 应用程序将发送到后台 (例如,按 HOME) ,然后在不同的活动中恢复。
- 您的活动会被另一个应用程序覆盖,而不退出应用程序 (如单击某些通知) 。
- 上述方案类似。
在这种情况下,可以替换宿主对话框的活动,而无需用户交互。 这样,SDK 将再次调用侦听器,以便您可以还原自定义对话框。
3. 如果找不到更新,则执行代码
如果 SDK 检查更新,但找不到任何比当前使用的更新更新的更新, NoReleaseAvailable 则会调用回调。 这允许您在这种情况下执行自定义代码。
需要在调用前注册回调 AppCenter.Start ,如以下示例中所示:
// In this example OnNoReleaseAvailable is a method name in same class
Distribute.NoReleaseAvailable = OnNoReleaseAvailable;
AppCenter.Start(...);
void OnNoReleaseAvailable()
{
AppCenterLog.Info(LogTag, "No release available callback invoked.");
}
## Enable or disable App Center Distribute at runtime
You can enable and disable App Center Distribute at runtime. If you disable it, the SDK won't provide any in-app update functionality but you can still use the Distribute service in the App Center portal.
To disable the Distribute service, use the following code:
```csharp
Distribute.SetEnabledAsync(false);
若要启用 App Center 再次分发,请使用相同的 API,但将 true 作为参数传递。
Distribute.SetEnabledAsync(true);
此 API 是异步的,可以在异步 API 指南中App Center了解。
不需要等待此调用来进行其他 API 调用 (如 IsEnabledAsync) 一致。
在应用程序启动期间,状态将保留在设备的存储中。
检查是否已启用 App Center 分发
还可以检查是否启用了 App Center 分发:
Distribute.IsEnabledAsync();
此 API 是异步的,可以在异步 API 指南中App Center了解。
为调试版本启用应用内更新
默认情况下,仅对发布版本启用应用内更新。
若要为 Android 和 iOS 上的调试版本启用应用内更新,请选中 "在附加了 AppCenterBehavior 的游戏对象上的"分布"部分下的" 在 调试中启用分发"复选框。

在 Unity 中,可调试生成是已选中 " 开发生成 " 选项的生成。
在应用程序关闭进行更新之前执行清除
备注
此回调仅适用于 iOS。
注册回调,如以下示例所示:
// In this example, OnWillExitApp is a method name in same class
Distribute.WillExitApp = OnWillExitApp;
void OnWillExitApp()
{
// Perform clean up here
}
这样, OnWillExitApp() 当 Distribute 即将关闭时,将调用 。
应用内更新如何工作
备注
若要使应用内更新正常工作,应从链接下载应用内部版本。 如果从 IDE 或手动安装,则它不起作用。
应用内更新功能的工作方式如下:
- 默认情况下,此功能仅适用于 使用 (Distribute 服务) 分发的 RELEASE App Center版本。 如果 iOS 引导式访问功能已打开,则此功能不起作用。
- 集成 SDK 后,生成应用的发布版本,并将其上传到App Center。 通讯组的用户会通过电子邮件收到有关新版本的通知。
- 每个用户在电子邮件中打开链接时,应用程序将安装在其设备上。 他们使用电子邮件链接进行安装非常重要 - 我们不支持旁加载。 从链接下载应用程序时,SDK 会保存 Cookie 中的重要信息,以稍后检查更新,否则 SDK 将没有该密钥信息。
- 如果应用程序将跟踪设置为专用,浏览器将打开以对用户进行身份验证并启用应用内更新。 只要身份验证信息保持有效,浏览器就不会再次打开,即使切换回公共轨道,稍后再次切换回专用轨道。 如果浏览器身份验证成功,则会自动将用户重定向回应用程序。 如果轨迹是公共 (,这是默认) ,则下一步将直接进行。
- 应用的新版本显示"应用内更新"对话框,要求用户更新应用程序(如果是):
- iOS:
- 或 的
CFBundleShortVersionString较高值 - 的值相等,
CFBundleShortVersionString但值的值较高CFBundleVersion。 - 版本是相同的,但生成的唯一标识符不同。
- 或 的
- Android:
- 或的值越高
versionCode - 的值相等,
versionCode但值不同versionName。
- 或的值越高
- iOS:
提示
如果第二次上载 apk/. ipa,则对话框不会显示,因为二进制文件是相同的。 在 iOS 上,如果上载具有相同版本属性的新版本,它将显示 "更新" 对话框。 这是因为它是一个不同的二进制文件。 在 Android 上,如果两个版本属性相同,二进制文件将视为相同。
如何实现测试应用内更新?
必须将使用 App Center) SDK 的 "分发" 模块的 "发布版本" (上载到 App Center 门户,以便测试应用内更新,每次增加版本号。
- 在 App Center 门户中创建你的应用(如果尚未这样做)。
- 创建新的通讯组,并为其指定名称。
- 添加自己的 (或要包含在测试应用内更新功能) 的所有人员。 对于此步骤,请使用新的或丢弃的电子邮件地址,该地址尚未用于此应用。 这可以确保你的体验接近于真实测试人员的体验。
- 创建新的应用程序版本,其中包括 App Center 分发 并包含如下所述的安装逻辑。 如果组是专用组,请在开始使用
UpdateTrack属性之前,不要忘记设置专用应用内更新跟踪。 - 单击门户中的 " 分发新发布 " 按钮,并上传应用的生成。
- 上传完成后,单击 " 下一步 ",然后选择之前创建的 通讯组 作为该应用分发的 目标 。
- 查看分发,并将生成分发到应用内测试组。
- 该组中的人员将收到成为应用测试人员的邀请。 接受邀请后,他们可以通过移动设备从 App Center 门户下载应用。 安装应用内更新后,即可测试应用内更新。
- 将应用版本升级为 (适用于
CFBundleShortVersionStringCFBundleVersioniOS,适用于versionCodeAndroid) 。 - 生成应用的发布版本并上传新版本,就像在上一步中所做的那样。 分发到 之前创建的 通讯组。 下次应用启动时,系统会提示通讯组的成员提供新版本。
提示
有关通讯组等的更多详细信息,请参阅App Center 分发版的信息。虽然可以使用 App Center Distribute 来分发新版本的应用,而无需添加任何代码,但向应用代码添加 App Center Distribute 将为测试人员和用户带来更无缝的体验,因为他们获得应用内更新体验。