【问题标题】:IOS:call did receive remote notification delegate when app is in backgroundIOS:当应用程序在后台时,呼叫确实收到了远程通知委托
【发布时间】:2014-12-17 05:41:55
【问题描述】:

我的应用程序包含推送通知功能,我已完成编码部分以在我的应用程序中接收推送通知。当我的应用程序进入后台时,我正在接收推送通知,当我单击推送通知按钮时,应用程序进入前台并调用接收远程通知委托方法。当我的应用在后台收到推送通知但没有通过单击屏幕顶部的推送通知按钮打开应用时,我需要调用相同的委托方法。我编写了如下代码。

   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, if running iOS version < 8
    [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                     UIRemoteNotificationTypeAlert |
                                                     UIRemoteNotificationTypeSound)];
}

 if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    [application registerUserNotificationSettings:[UIUserNotificationSettings  



     settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge
   |UIUserNotificati
 onTypeSound categories:nil]];
  }

我的最终意图是调用确实在应用程序处于后台时收到远程通知。

【问题讨论】:

    标签: objective-c iphone apple-push-notifications


    【解决方案1】:

    当应用程序关闭或在后台时,不会调用 didReceiveRemoteNotification 委托。当您点击通知时,它会启动应用程序并调用该方法。您可以执行所需的操作此时就像减少图标徽章。这是iOS中推送通知的工作流程。还有一点是当应用程序关闭并且您正在点击通知时,不会调用didReceiveRemoteNotification。 ApplicationDidFinishLaunching 将被调用,您可以使用 launchoption 字典识别它是否从通知启动

    【讨论】:

    • 使用这个 performFetchWithCompletionHandler 后台获取有什么用
    • 否。接收推送时无法调用后台获取方法。在后台模式下,所有活动(如警报、徽章)均由操作系统本身使用通知 JSON 有效负载控制。
    • 我需要在收到推送通知时调用一个方法。即当应用程序在后台时,代码也应该接收一些事件,是否可以通过任何委托方法。
    • 不。让我知道你想做什么。如果它与pushnotification有关,我们可以使用通知有效负载设置badge/sound/alert。其他活动无法完成,因为没有code.method会此时执行
    【解决方案2】:

    如果应用在后台收到通知并且用户将打开应用而不点击通知,则根本不会收到该通知。

    要实现这一点,您需要尝试不同的东西。

    这里有一个可能对你有帮助的想法:

    当通知从服务器推送并在应用程序中成功接收时,您可以通过它收到的 Api 发送消息。

    现在,如果在上述情况下,应用服务器中未收到通知将不会收到成功接收消息。所以在这种情况下,它可以保存在服务器的待处理通知表中。

    现在,一旦您打开设备,1 api 将检查服务器上是否有任何待处理的通知,如果找到,则会得到响应,然后将从服务器中删除。

    注意:这是一个较早尝试并有效的想法。您可以根据自己的要求进行改进。

    希望它对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多