我需要像这样将Ison发送到IOS设备:
{"aps":{"content-available":1}}
我应该使用AppleNotification还是AppleNotificationPayLoad类?请提供示例代码。以下是我现在如何创建通知的示例:
AppleNotification notification = NotificationFactory.Apple()
.ForDeviceToken(token)
.WithAlert(message)
.WithSound("default")
.WithBadge(7);
答案 0 :(得分:4)
正如Eran所提到的,使用PushSharp,您只能在aps之外发送自定义有效负载参数。所以如果你想发送这样的东西:
{"aps":{ whatever data... },"content-available":1}
你可以这样做:
// Add these to your references
using System.IO;
using PushSharp;
using PushSharp.Apple;
using PushSharp.Core;
//Create our push services broker
var push = new PushBroker();
//Registering the Apple Service and sending an iOS Notification
var appleCert = File.ReadAllBytes(string.Format(@"applePushCert.p12"));
push.RegisterAppleService(new ApplePushChannelSettings(appleCert, "password"));
push.QueueNotification(new AppleNotification()
.ForDeviceToken("your device token")
.WithAlert("Hello World!")
.WithBadge(7)
.WithSound("sound.caf")
.WithCustomItem("content-available", 1));
答案 1 :(得分:2)
您尝试发送的JSON无效。您不能将自定义属性放在aps
字典中。
如果要发送自定义数据,则应将其发送到aps
字典之外,如下所示:
{"aps":{},"content-available":1}
您应该在PushSharp库中查找允许您将自定义数据添加到有效负载的方法。
提供商可以在Apple保留之外指定自定义有效负载值 aps命名空间。自定义值必须使用JSON结构化和 原始类型:字典(对象),数组,字符串,数字和 布尔值。
编辑:
您可以使用AddCustom(string key, params object[] values)
的{{1}}方法。
答案 2 :(得分:0)
这是一个旧的线程,但我刚刚在2015年搜索它,无法找到堆栈溢出的解决方案。我认为这个问题现在值得回答,就像使用
一样- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void(^(UIBackgroundFetchResult))completionHandler
方法,您必须包含aps的“content-available” INSIDE 。 (see this excellent article for details)
我发现pushsharp可以让您在通知结束时标记notification.WithContentAvailable(1)
,如下所示:
var notification = new AppleNotification(deviceID1, payload1);
notification.WithContentAvailable(1);//enable background fetch