PushSharp 4.0中的GCM消息构造

3

我有些困惑,不知道如何使用PushSharp来构建GCM推送通知的消息体结构。文档以及GitHub仓库中的测试文件显示的消息结构似乎是这样的:

            broker.QueueNotification (new GcmNotification {
                RegistrationIds = new List<string> { 
                    regId
                },
                Data = JObject.Parse ("{ \"somekey\" : \"somevalue\" }")
            });

我一直在使用Postman进行测试,在其中我向https://gcm-http.googleapis.com/gcm/send发送以下JSON格式的消息。

{
    "to": "000-0000-mytoken-foo",
    "notification" : {
        "title" : "Push Test Notification",
        "body" : "GCM Test Push",
        "icon" : "icon",
        "color" : "#FF4081"
    }

}

框架是否已经处理了消息中的'to''notification'部分? 根据我看到的示例,似乎我只需要输入通知对象的键值对,但是我找不到文档中说明这一点或实际消息的示例。 我正在使用 PushSharp 的最新版本(4.x)。


你找出它是如何设置的了吗?我收到成功消息,但在Android上没有通知。 - Lukas
1
@pechar 是的,你可能想要发送通知而不是数据消息。将 Data = JObject.Parse 更改为 Notification = JObject.Parse。稍后我会发布一个更详细的带有示例的答案。 - Stavros_S
谢谢您的回复。实际上,我在晚上设法让它运行了。我仍然使用了Data属性,因为Android应用程序使用传递到那里的数据处理通知。但是,我想这完全取决于您的应用程序如何处理通知。to也可以像notification一样在GcmNotification的单独属性中分配。 - Lukas
@pechar 你是否知道如何从Push Sharp请求令牌刷新? - Stavros_S
我不确定我是否理解您的意思,但通常令牌刷新需要在设备上进行。然后将新令牌发送到您的服务器。有一个异常可以捕获 OnNotificationFailed,在其中检查异常参数,如果是 DeviceSubscriptionExpiredException,则可以获取 OldSubscriptionIdNewSubscriptionId。然后,您可以使用新 ID 替换数据库中的旧 ID。这里的订阅 ID 是令牌。 - Lukas
1个回答

2

你好,可以这样操作

var config = new GcmConfiguration("senderKey", "apiKey", null);
config.GcmUrl = "https://fcm.googleapis.com/fcm/send"; //!!!!!gmc changed to fcm;)

var gcmBroker = new GcmServiceBroker(config);
gcmBroker.Start();

_gcmBroker.QueueNotification(new GcmNotification
                {
                    RegistrationIds = new List<string> { "YourDeviceToken" },
                    Notification = JObject.Parse(
                        "{" +
                            "\"title\" : \"" + yourMessageTitle + "\"," +
                            "\"body\" : \"" + yourMessageBody + "\"," +
                            "\"sound\" : \"mySound.caf\"" +
                        "}") ,
                    Data = JObject.Parse(
                        "{" +                            
                            "\"CustomDataKey1\" : \"" + yourCustomDataValue1 + "\"," +
                            "\"CustomDataKey2\" : \"" + yourCustomDataValue2 + "\"" +
                        "}")
                });

我没有测试自定义数据值是否到达,但通知确实到达了:) 以“your”开头的项目是您的动态参数,例如您传递给该方法的参数等。这个问题很久以前就被问过了,但我现在才开始使用pushsharp :) 希望这对PushSharp用户有所帮助。


什么是错误?你是否已经注册了_gcmBroker的事件?例如:_gcmBroker.OnNotificationSucceeded += notification => { //Console.WriteLine("Android Notification Sent!"); }; 那么你从这些事件中接收到了什么?@AhmadArslan - Umut Bebek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接