Azure推送通知中心 - 如何处理iOS和Android的有效负载格式?

时间:2014-03-07 17:21:26

标签: android ios azure notifications payload

我试图通过Azure Notification Hub支持iOS和Android平台。

iOS平台需要以下列形式的有效负载:

  

{“aps”:{“alert”:“通知中心测试通知”}}

而Android平台需要以下列形式的有效负载:

  

{“data”:{“message”:“通知中心测试通知”}}

我知道可以修改有效负载以包含更多信息,但该示例足以解决问题。

鉴于我根据标签向目的地发送通知,并且我没有记录每个推送通知注册使用哪个平台是发送通知两次的唯一选择,一次是针对apple native,另一次针对gcm天然?

  

hubClient.SendAppleNativeNotificationAsync(payload,tag);   hubClient.SendGcmNativeNotificationAsync(payload,tag);

或者,有没有办法向Azure Notification Hub发送包含多个有效负载的通知,然后通知中心将使用适用于目标设备的有效负载?

3 个答案:

答案 0 :(得分:3)

您提供的解决方案已经足够并且是最佳方式。

如果你真的想避免额外的通话(同样不需要额外拨打通知中心)。

  1. 注册设备时,还会注册“类型”标签
  2. 在通知中心查询“type”标记和您要发送到

    的其他标记

    for(hubClient.getRegistrationsByTag(iosTag)中的注册注册){    hubClient.SendAppleNativeNotificationAsync(payload,tag); }

    for(hubClient.getRegistrationsByTag(androidTag)中的注册注册){    hubClient.SendGcmNativeNotificationAsync(payload,tag); }

答案 1 :(得分:1)

您可能需要切换到模板化通知。我知道这些是“平台无关的”,可以在特定应用程序中在客户端上进行解析 我只使用Windows平台的通知中心,所以我可能在这里错了,只是想给出一个提示。 http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.notifications.notificationhubclient.sendtemplatenotificationasync.aspx

答案 2 :(得分:1)

我遇到了同样的问题。首先,我试图通过使用模板通知解决它,但当我想在ios和android上有正确的徽章和声音更新时,我遇到了重大问题。所以我切换回iOS和Android的原生通知。我对此问题的最终解决方案是在发送通知时检查NotificationDescription的类型。我使用枚举器从通知中心获取所有需要的标签,然后检查本机类型并根据此发送通知。示例代码:

if (typeof(AppleRegistrationDescription) == currentNotificationDescription.GetType())
{
    var jsonPayload = "{\"aps\" : { \"alert\" : \"" + message + "\", \"badge\" : " + badge + ", \"sound\" : \"default\" }, \"acme1\" : \"bar\", \"acme2\" : 42 }";
    await _hubClient.SendAppleNativeNotificationAsync(jsonPayload, tag);
}
else if(typeof(GcmRegistrationDescription) == currentDesc.GetType())
{
    var jsonPayload = "{\"data\" : { \"message\" : \"" + message + "\", \"badge\" : " + badge + ", \"sound\" : \"default\" }, \"acme1\" : \"bar\", \"acme2\" : 42 }";
    await _hubClient.SendGcmNativeNotificationAsync(jsonPayload, tag);
}