没有接收推送通知大于256字节iOS 8

时间:2015-01-15 10:00:40

标签: ios asp.net iphone ios8

我的应用程序很容易在推送通知中接收少于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)];
}

2 个答案:

答案 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)];
}

请检查您是否使用这种方式。