【问题标题】:Push notification not received when App is in Background in iOS 10应用程序在 iOS 10 中处于后台时未收到推送通知
【发布时间】:2017-01-28 18:44:29
【问题描述】:

我正在使用 FCM(Firebase 云消息传递)在 iOS 中发送推送通知。

当应用程序处于前台状态时,我能够收到通知。但是当应用程序处于后台状态时,没有收到通知。每当应用程序进入前台状态时,才会收到通知。

我的代码是:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
   willPresentNotification:(UNNotification *)notification
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
// Print message ID.
NSDictionary *userInfo = notification.request.content.userInfo;
NSLog(@"Message ID: %@", userInfo[@"gcm.message_id"]);

// Pring full message.
NSLog(@"%@", userInfo);

if( [UIApplication sharedApplication].applicationState == UIApplicationStateInactive )
{
    NSLog( @"INACTIVE" );
    completionHandler(UNNotificationPresentationOptionAlert);
}
else if( [UIApplication sharedApplication].applicationState == UIApplicationStateBackground )
{
    NSLog( @"BACKGROUND" );
    completionHandler( UNNotificationPresentationOptionAlert );
}
else
{
    NSLog( @"FOREGROUND" );
    completionHandler( UNNotificationPresentationOptionAlert );
}}



- (void)applicationDidEnterBackground:(UIApplication *)application {


}

App处于后台状态时:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
   willPresentNotification:(UNNotification *)notification
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler

-- 根本没有被调用。

我在 App Capabilities 的后台模式中启用了推送通知和远程通知。但是App仍然没有收到通知。

我提到了一些 StackOverflow 问题,但无法解决问题。 iOS 版本 10 中是否有任何要添加的内容或我的代码中有任何错误?

【问题讨论】:

  • 在后台时,您是否仅在 iOS 10 或所有其他版本中没有收到此信息?
  • @AL。仅 iOS 10 不接收
  • 把你的代码发给我,我会解决问题的。
  • @user3182143 在 ios 10 中,我们需要添加新的代理来处理推送通知。我的问题是如果我已经在应用商店中有一个应用会发生什么。推送通知无法正常工作?
  • 是的。对于 iOS 10,它不起作用。如果他们在 iPhone 上安装 iOS 10,它将不起作用。您还需要根据 iOS 10 编写推送编码。

标签: ios objective-c firebase firebase-cloud-messaging firebase-notifications


【解决方案1】:

我们与客户进行了多次测试,并就该主题进行了大量研究。 iOS 10.x,尤其是 10.3.x 在处理和显示推送方面存在问题。避免这些问题的唯一方法是升级到更新的 iOS 版本。

【讨论】:

    【解决方案2】:

    对于 iOS 10,我们需要调用以下 2 个方法。

    对于 FOREGROUND 状态

    - (void)userNotificationCenter:(UNUserNotificationCenter *)center  willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler  
    {  
        NSLog( @"Handle push from foreground" );  
        // custom code to handle push while app is in the foreground  
        NSLog(@"%@", notification.request.content.userInfo);
        completionHandler(UNNotificationPresentationOptionAlert);
    } 
    

    对于背景状态

    - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler  
    {  
        NSLog( @"Handle push from background or closed" );  
        // if you set a member variable in didReceiveRemoteNotification, you  will know if this is from closed or background  
        NSLog(@"%@", response.notification.request.content.userInfo);
        completionHandler();
    }  
    

    在此之前,我们必须添加UserNotifications框架并导入AppDelegate.h文件中

    #import <UserNotifications/UserNotifications.h>  
    @interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>  
    

    【讨论】:

    • 我也面临同样的问题。我按照您的上述步骤操作,但不幸的是它仍然无法正常工作。你能帮帮我吗?
    • 不需要调用完成处理程序吗?
    • 什么情况下需要调用?我的意思是在应用程序的前台或后台状态?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2017-01-23
    相关资源
    最近更新 更多