我的应用程序很容易在推送通知中接收少于256个字节,但对于iOS 8,它能够在推送通知中接收2K有效负载,我无法接收到。
在服务器端,我使用的是Asp.net,以下是我的有效负载:
{"aps":{"alert":"ASD SAD SA DAS DSDSADSAD E36DCB20B9497BB75BE6BF0C47718C73E8D80A6B734F296BD768DC5C4DB261BCE36DCB20B9497BB75BE6BF0C47718C73E8D80Assdds","id":"5","type":"n","sound":"default","category":"1"}}
我正在使用带有iOS 8.1的iPhone 5S进行测试。
在iOS方面,我使用以下代码
UIApplication *application = [UIApplication sharedApplication];
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
UIUserNotificationTypeBadge |
UIUserNotificationTypeSound);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
}
else
{
// Register for Push Notifications before iOS 8
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeSound)];
}
答案 0 :(得分:1)
我的iPhone遇到了同样的问题,运行了8.3的iOS。只能接收最多256个字节的有效载荷数据。
问题的原因是我用来推送通知的php脚本(我在互联网上发现并且没有自己写的东西)中有一个错误。当它存储有效载荷数据的长度时,它只使用一个字节(因此最大大小永远不会大于255)。我想我使用了来自raywanderlich关于APNS的教程的简单推送脚本(这是为iOS 6编写的)。
这不起作用: 。 chr(0)。 chr(32)。 pack('H *',$ deviceToken [$ i])。 chr(0)。 chr(strlen($ payload))。 $有效载荷;
这非常有用: 。打包('n',32)。 pack('H *',$ deviceToken [$ i])。 pack('n',strlen($ payload))。 $有效载荷;
所以在我的情况下发生的情况是$ payload包含379个字符的数据,strlen返回379但是将它存储在一个字节中,因此结果包含256个并变为123(379-256)。我的脚本将有效负载发送到APNS,但当消息长度与实际内容不符时,看起来APNS不会将其推送到设备。
因此,请检查如何计算有效负载的长度以及如何将其存储在消息中。
祝你好运/ Jocke
答案 1 :(得分:0)
请确保在iOS 8中远程通知注册有一些更改。
前:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
}
请检查您是否使用这种方式。