我创建了一个MyFirebaseMsgService
,用于从我的 Azure 通知中心接收推送通知,然后按照各种博客进行操作,以使一切正常。 我的结果服务如下所示:
[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class MyFirebaseMessagingService : FirebaseMessagingService
{
const string TAG = "MyFirebaseMsgService";
NotificationHub hub;
//override on
public override void OnNewToken(string token)
{
Log.Debug(TAG, "FCM token: " + token);
SendRegistrationToServer(token);
}
void SendRegistrationToServer(string token)
{
// Register with Notification Hubs
hub = new NotificationHub(Constants.NotificationHubName, Constants.NotificationHubListenConnectionString, this);
var tags = new List<string>() { };
var regID = hub.Register(token, tags.ToArray()).RegistrationId;
Log.Debug(TAG, $"Successful registration of ID {regID}");
}
public async override void OnMessageReceived(RemoteMessage message)
{
到目前为止一切顺利,一切正常,但现在我面临的挑战是,我希望用户能够控制停止/启动通知订阅。
现在,一旦创建了订阅,我认为它以某种方式在后台运行,并且我的应用程序无法对那里的NotificationHub
实例执行任何操作。无论我在手机上重新启动应用程序多少次,我都没有看到第一次后OnNewToken
被调用。
有人可以建议我如何启用/禁用对来自服务器的消息的订阅。 网络上几乎所有关于使用Firebase.Messaging.FirebaseMessaging.Instance.UnsubscribeFromTopic()
的资源都没有帮助我。
我只针对Android,如果这有什么不同的话。
好吧,让我向您简要介绍一下,如果您想完全控制推送通知,Firebase 建议您使用数据推送而不是通知推送。
当您检查他们的官方文件时,它说:
如果您希望 FCM 代表客户端应用处理显示通知,请使用通知。当您希望应用处理 Android 客户端应用上的显示或处理消息时,请使用数据消息...
因此,这基本上意味着将通知的正文更改为类似
{
"data": {
"type" : "mytype",
"title": "My Title",
"body": "My Notification Message"
},
"to": "/topics/all"
}
完成此操作后,它将始终调用您的OnMessageReceived
方法,您可以在其中处理是否需要向用户显示通知。