推送通知不是第一次收到

Posted

技术标签:

【中文标题】推送通知不是第一次收到【英文标题】:Push notification is not receiving very first time 【发布时间】:2015-04-29 15:31:34 【问题描述】:

我正在从节点服务器向 iPhone 和 android 发送推送通知。它已成功发送到 APNS/GCM 并成功接收到移动设备的通知。但是,在 iPhone 6 中,推送通知不是在收到通知之后第一次收到。它发生在以下阶段:

    首次安装应用并打开。 如果应用程序不再使用。

提前谢谢..

【问题讨论】:

【参考方案1】:
    有时可能不会收到推送通知。 代码是为所有场合编写的吗? (应用关闭/活动/非活动/后台) 代码针对相同的场合进行了测试?

【讨论】:

这有什么原因吗?【参考方案2】:

我遇到了同样的问题,我通过以下方式解决了它:-

在 didFinishLaunchingWithOptions 方法中写这个

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
            [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
            [[UIApplication sharedApplication] registerForRemoteNotifications];
         else 
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge];
        

它将向用户触发权限警报。 如果他允许,则以成功方法发送设备令牌:-

#pragma PushNotification delegation

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

    NSString *device = [deviceToken description];
    device = [device stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    device = [device stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"My deviceToken is: %@", device);

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setObject:device forKey:@"deviceToken"];

     // Now send device token to server

【讨论】:

我已经使用这个方法注册并发送设备令牌到服务器了。除了几次之外,我总是收到通知 请参考我的回答。【参考方案3】:

Apple 在Local and Push Notification Programming Guide 和Troubleshooting Push Notifications 中表示

通知的传递是“尽力而为”,不能保证。这是 不打算向您的应用程序传递数据,只是为了通知用户 有新数据可用。

更新:

问题是 Apple 在无法处理消息时关闭了连接。因此,更新了 Node 推送通知 server.js 中的代码,如下所示,它运行良好:

var connectCallback = function (err) 
  // gracefully handle auth problems
  if (err && err.name === 'GatewayAuthorizationError') 
    console.log('Authentication Error: %s', err.message);
    process.exit(1);
  

  // handle any other err (not likely)
  else if (err) 
    throw err;
  

  // it worked!
  var env = agent.enabled('sandbox')
    ? 'sandbox'
    : 'production';

  console.log('apnagent [%s] gateway connected', env);
;

agent.connect(connectCallback);

setInterval(function()
  agent.close(function(param1)
    agent.connect(connectCallback);
  );
, 20 * 60 * 1000);

【讨论】:

以上是关于推送通知不是第一次收到的主要内容,如果未能解决你的问题,请参考以下文章

服务器如何知道 iPhone 是不是收到推送通知?

检测是不是在应用未启动且用户未通过它们打开应用时收到推送通知

当应用程序处于前台时收到推送通知时,是不是可以为 ios 显示横幅?

每当我的应用收到推送通知时,它都会从最后一个徽章编号(不是 0)递增

在 Android 中未收到解析推送通知

保存收到的远程推送通知 - ios