针对 Android 的推送通知
先决条件
- 推送通知快速入门
- Unity3D 快速入门
- [可选] Unity 编辑器扩展
- [可选] Postman 快速入门
配置 Android 通知通道
Firebase 设置
您必须使用并同步的 Google 网站有三个。 在 Google/Firebase 中同时具有项目和应用:
项目:
- 如果您的项目尚未在 Firebase 控制台中,请将该项目导入其中。
应用:
- Firebase 项目包含应用。
- 确保您的应用存在于这两个位置,并且具有相同的名称和标识符(例如,Unicorn Battle 和 com.playfab.unicornbattle2)。
PlayFab 需要服务器私钥文件
- 可以从 Firebase 控制台 获取此私钥文件
-
Firebase 控制台:
- 选择您的项目或应用,然后查找 Settings 选项(有很多方式可执行此操作,所有这些方式都会将您引向同一位置)。
- 在“服务帐户”选项卡中,选择“生成新的私钥”按钮以下载 JSON 文件。
使用私钥文件
通过以下两种方式之一提供私钥文件:
- 将私钥文件直接上传到 Game Manager UI:设置(针对你的游戏)>发布通知>Android。
- 或者使用 Postman 或启用了 Server API 方法的 Unity 项目调用 SetupPushNotification。
名称:your_game_name
平台:GCM
凭据:(作为字符串的私钥文件内容):
{ ... }
覆盖 OldARN:
true
您会收到 HTTP 200 OK 响应,并且具有与以下类似的数据。
// Postman JSON result output { "code": 200, "status": "OK", "data": { "ARN" : "arn:*******/GCM/your_game_name" } }
(使用任一方法)正确设置后,可以在以下位置查看:Game Manager UI设置(针对你的游戏)> 发布通知 > Android。
入门:针对 Android + Unity 的推送通知
要设置您的 Unity 项目,请执行下列操作:
创建新的 Unity 项目。
[可选] 导入 PlayFab Unity 编辑器扩展程序包。
导入 Unity PlayFab SDK 程序包。
按照 FCM Unity 指南安装 FCM 消息传送,并为推送通知设置项目。
- 完成后,您可以继续按照该指南接收来自 PlayFab 的消息。
- 我们将在以下示例中提供完整的 FCM 就绪型 monoBehaviour 脚本,该脚本结合了 FCM 和 PlayFab。
在 FCM 指南中,您创建了一个设置 Firebase 插件的 monobehaviour 脚本。
- 您可以继续使用该 monobehaviour 脚本,或者将其替换为随后示例中的脚本。
设置第一个推送通知
在 Unity 中,打开您在 FCM 教程中创建的脚本,然后替换内容。
using PlayFab;
using PlayFab.ClientModels;
using PlayFab.Json;
using UnityEngine;
public class MsgCatcher : MonoBehaviour
{
public string pushToken;
public string playFabId;
public string lastMsg;
// OnGUI should be deleted/replaced with your own gui - This is only provided for debugging
public void OnGUI()
{
GUI.Label(new Rect(0, 0, Screen.width, 200), pushToken);
GUI.Label(new Rect(0, 200, Screen.width, Screen.height - 200), lastMsg);
}
private void OnPfFail(PlayFabError error)
{
Debug.Log("PlayFab: api error: " + error.GenerateErrorReport());
}
public void Start()
{
// PlayFabSettings.TitleId = "TITLE_ID";
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
LoginToPlayFab();
}
private void LoginToPlayFab()
{
#if UNITY_ANDROID
var request = new LoginWithAndroidDeviceIDRequest { AndroidDeviceId = SystemInfo.deviceUniqueIdentifier, CreateAccount = true, };
PlayFabClientAPI.LoginWithAndroidDeviceID(request, OnPfLogin, OnPfFail);
#endif
}
private void OnPfLogin(LoginResult result)
{
Debug.Log("PlayFab: login successful");
playFabId = result.PlayFabId;
RegisterForPush();
}
private void RegisterForPush()
{
if (string.IsNullOrEmpty(pushToken) || string.IsNullOrEmpty(playFabId))
return;
#if UNITY_ANDROID
var request = new AndroidDevicePushNotificationRegistrationRequest {
DeviceToken = pushToken,
SendPushNotificationConfirmation = true,
ConfirmationMessage = "Push notifications registered successfully"
};
PlayFabClientAPI.AndroidDevicePushNotificationRegistration(request, OnPfAndroidReg, OnPfFail);
#endif
}
private void OnPfAndroidReg(AndroidDevicePushNotificationRegistrationResult result)
{
Debug.Log("PlayFab: Push Registration Successful");
}
private void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
{
Debug.Log("PlayFab: Received Registration Token: " + token.Token);
pushToken = token.Token;
RegisterForPush();
}
private void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
{
Debug.Log("PlayFab: Received a new message from: " + e.Message.From);
lastMsg = "";
if (e.Message.Data != null)
{
lastMsg += "DATA: " + JsonWrapper.SerializeObject(e.Message.Data) + "\n";
Debug.Log("PlayFab: Received a message with data:");
foreach (var pair in e.Message.Data)
Debug.Log("PlayFab data element: " + pair.Key + "," + pair.Value);
}
if (e.Message.Notification != null)
{
Debug.Log("PlayFab: Received a notification:");
lastMsg += "TITLE: " + e.Message.Notification.Title + "\n";
lastMsg += "BODY: " + e.Message.Notification.Body + "\n";
}
}
}
在设备上生成并运行您的 Unity 项目。 如果收到带有文本 Push notifications registered successfully 的推送通知,则一切都在正常运行。
注意
PlayFabSettings.TitleId = TITLE_ID
.
您必须设置自己的 TitleId
。 如果未更新此 TitleId
,此示例将不起作用,因为我们的游戏是使用我们的 Firebase 密钥和设置注册的,而不是您的。 您可以通过取消注释此行并将 TITLE_ID
替换为您的 titleId
来执行此操作,或者您可以从上一节中提到的可选编辑器扩展插件中选择您的游戏。
对 Android 进行故障诊断
确认您可以从 Firebase 控制台发送测试推送通知。
- 如果不能,则表明 Firebase 插件未正确设置,请查看 Firebase 文档找到原因,或者联系 Firebase 支持人员。
确保正确设置了 FCM 客户端 pushToken。
- 应调用该示例中的
OnTokenReceived
函数,并且该函数应具有有效令牌。 - 如果未 调用此函数,则表明 Firebase 插件未 正确设置,请查看 Firebase 文档找到原因,或者联系 Firebase 支持人员。
- 应调用该示例中的
确保将您的
titleId
设置为您拥有的游戏,并且已使用您 Firebase 项目中的服务器 API 密钥对其进行了注册。
高级功能
在 server.SendPushNotification 中,可使用 request.Package.CustomData 将任意数据传输到设备。 在先前示例中,其被传输到该部分,并具有以下注释。
Debug.Log("PlayFab: Received a message with data:");
您可以自定义客户端接收器,以便随意使用这些数据。 CustomData 不向玩家显示,因此可用于将自定义游戏信息传输到客户端,或者使用 FCM 插件本地计划其他未来通知。
此外还可使用 request.Package.CustomData 或请求 AdvancedPlatformDelivery,以便传输到许多第三方插件。
注意
第三方插件传输不受支持或没有保障,但可用于高级用户。
附加支持
如果需要帮助、要了解示例错误和相关问题,请在我们的论坛中提出。
当前,我们仅支持针对本文档中所述的标准流程的服务。 如果您的团队需要其他常见推送服务或插件的更多功能,请告诉我们! 我们欢迎开发者社区的反馈。
有关通过 Amazon SNS 的推送有效负载的文档: