推送通知快速入门
可以通过链接以下三个主要系统来启用 PlayFab 推送通知:
- 玩家设备操作系统(Android、iOS 等)
- 供应商特定通道(Google、Apple 等)
- 跨平台消息路由(通过 Amazon Simple Notification Service [SNS] 的 PlayFab)。
注意
如果取消链接上述系统中的任何一个,客户端将停止收到通知。 这三个系统都很容易发生意外更改,导致链接失效。 此外,在流程中的任何一个点,很难知道是否所有系统都配置正确。
PlayFab 推送路由系统
每个 PlayFab 游戏都可以在给定时间启用 Google (GCM) 和 Apple Push(APNS、APNS_SANDBOX)通知通道。 可以通过以下两种方式之一配置上述通道:
- 使用 Game Manager 中的 UI (位于“设置”-“>推送通知”下)。
- 使用 PlayFab 管理 API - SetupPushNotification。
有关更详细的设置信息,请阅读以下教程:
游戏内推送消息
推送消息将根据开发引擎/平台而有所不同。 但是,接收推送通知的最简单方法是将 Unity 项目与我们的 SDK 和适用于 Android 的 Firebase Cloud Messaging (FCM) 插件一起使用,或使用 Unity for iOS。
- 在 Android 上接收推送 - 需要使用插件。 支持的最佳插件是本机 FCM 插件。
- 在 iOS 上接收推送 - 基本推送消息无需使用 插件。
提示
有关如何设置 FCM Unity 插件或在 Android Studio 上推送的说明,请参阅 FCM 文档。
测试设置
配置游戏和客户端后,可以使用 PlayFab 服务器 API 测试配置 - SendPushNotification。 此 API 允许您发送任意数量的推送通知,并且没有额外费用。
您可以将 PlayFab CloudScript 服务用作快速安全的服务器 API 环境。 从那里,可以根据需要发送推送通知。
要使用此方法测试配置,请将以下示例中的代码上传或附加到游戏的 CloudScript 中。
示例
请考虑以下方案:
游戏中的玩家可以访问基于排名统计数据的排行榜。
每位玩家可以支付 1 CH 货币来挑战与当前玩家相差最多 5 个排名的其他玩家。
首先,考虑虚拟货币,如下面的示例屏幕截图所示(有关如何定义虚拟货币的信息,请参阅货币教程)。
接下来,考虑为每位玩家定义的以下统计数据(有关如何生成测试排行榜的信息,请参阅访问已存档的锦标赛结果教程)。
设置完上述先决条件后,可以设置推送通知质询系统。
以下客户端代码将调用 CloudScript ChallengePlayer
。
public void ChallengeRandomClosePlayer(string currentPlayerId) {
PlayFabClientAPI.GetLeaderboardAroundPlayer(new GetLeaderboardAroundPlayerRequest() {
MaxResultsCount = 10,
StatisticName = "Rank",
PlayFabId = currentPlayerId,
}, result => OnLeaderboardLoaded(result,currentPlayerId),OnPlayFabError);
}
private void OnLeaderboardLoaded(GetLeaderboardAroundPlayerResult leaderboard, string currentPlayerId) {
var index = (int)(UnityEngine.Random.value * (leaderboard.Leaderboard.Count-1));
if (leaderboard.Leaderboard[index].PlayFabId == currentPlayerId)
index = (index + 1) % leaderboard.Leaderboard.Count;
var targetId = leaderboard.Leaderboard[index].PlayFabId;
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest() {
FunctionName = "ChallengePlayer",
FunctionParameter = new Dictionary<string, object>() {
{ "TargetId", targetId }
}
}, null, OnPlayFabError);
}
public void OnPlayFabError(PlayFabError obj) {
Debug.Log(obj.GenerateErrorReport());
}
ChallengePlayer
CloudScript 代码将处理请求、验证排行榜状态并将质询推送通知发送给目标。
handlers.ChallengePlayer = function (args) {
var targetId = args.TargetId;
var leaderboard = server.GetLeaderboardAroundUser({
MaxResultsCount : 10,
PlayFabId : currentPlayerId,
StatisticName : "Rank"
});
for(var i = 0; i < leaderboard.Leaderboard.length; i++) {
var target = leaderboard.Leaderboard[i];
if(target.PlayFabId !== targetId) continue;
// subtract virtual currency from current player
server.SubtractUserVirtualCurrency({
VirtualCurrency : "CH",
PlayFabId : currentPlayerId,
Amount : 1
});
// get current player profile
var profile = server.GetPlayerProfile({
PlayFabId : currentPlayerId
}).PlayerProfile;
// try to send push notification
try {
server.SendPushNotification({
Recipient : targetId,
Package : {
Message : `${profile.DisplayName} challenges you for a battle!`,
Title: "You have been challenged",
}
});
} catch (ex) {
// Target player has not registered for Push Notifications
}
return;
}
}
推送通知用法
能够使用推送通知是一种很棒的功能。 但是,如果滥用 通知,可能会导致用户选择不再接收新通知 - 甚至彻底离开游戏。
反过来,如果谨慎使用,推送通知可以成为构建和维护游戏社区的最佳工具之一。
推送通知是一种发后不理(即不保证送达)的消息协议。
注意
请注意,不保证 玩家将接收、打开或与您的消息互动。 考虑到这一点,将消息用作附加 功能而不是作为游戏循环的关键部分是一种很好的做法。
对于 iOS 平台,操作系统向应用提供一次性对话框提示,允许用户确定推送通知的状态。 用户进行初始选择后,设置将持续生效,直到:
更新或重新安装此应用。
用户通过手机的设置菜单更改此设置。
对于 Android 应用,默认启用通知,并且可以从客户端随意打开和关闭通知。
提示
在每个会话中重新初始化通知侦听器是一种很好的做法。
资源
以下资源提供有关此快速入门中的主题的其他信息:
- Firebase Unity SDK: 适用于 Unity 的一体化 FCM 解决方案。 此 SDK 与所有其他功能一起,允许您接收和处理通过 FCM 发送的推送通知。
- Push It Real Good: How to Get Players to Say Yes to Push Notifications:此博客文章详细介绍使用推送通知的其他策略和技巧。
- Push Notifications:此博客文章介绍 Push 功能的最新升级,以及切换到 FCM 作为 Android 的主插件。
- Postman 快速入门: 此快速入门向你展示如何使用 Postman 测试我们的 API。