2016-11-23 1 views
0

Я внедряю уведомление Apple push в моем родном приложении iOS. Push-уведомление осуществляется через FireBase. Он работает отлично в iOS 9 & раньше.Firebase push alert предупреждает, что звук не воспроизводится в фоновом режиме в iOS 10

У меня есть одна проблема в iOS 10. Push-уведомление работает отлично в iOS 10 с другим состоянием, но Когда приложение находится в фоновом режиме, звук моего push-уведомления не воспроизводится. Для другого состояния приложения все в порядке. Только проблема с фоновым режимом.

Ниже приведен мой код для внедрения push-уведомления.

Insdie

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

Ниже Регистрационный код:

////////// FireBase//////////// 
    // Register for remote notifications 
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) { 
     // iOS 7.1 or earlier. Disable the deprecation warnings. 
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 
     UIRemoteNotificationType allNotificationTypes = 
     (UIRemoteNotificationTypeSound | 
     UIRemoteNotificationTypeAlert | 
     UIRemoteNotificationTypeBadge); 
     [application registerForRemoteNotificationTypes:allNotificationTypes]; 
#pragma clang diagnostic pop 
    } else { 
     // iOS 8 or later 
     // [START register_for_notifications] 
     if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) { 
      UIUserNotificationType allNotificationTypes = 
      (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge); 
      UIUserNotificationSettings *settings = 
      [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil]; 
      [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; 
     } else { 
      // iOS 10 or later 

#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 
      UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; 
      center.delegate = self; 
      [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){ 
       if(!error){ 
        [[UIApplication sharedApplication] registerForRemoteNotifications]; 
       } 
      }]; 

      [[FIRMessaging messaging] setRemoteMessageDelegate:self]; 
#endif 
     } 

     [[UIApplication sharedApplication] registerForRemoteNotifications]; 
     // [END register_for_notifications] 
    } 


    [FIRApp configure]; 
    // [END configure_firebase] 
    // Add observer for InstanceID token refresh callback. 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:) 
               name:kFIRInstanceIDTokenRefreshNotification object:nil]; 

Ниже делегат (ы) для управления получения уведомления.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 

    NSLog(@"Message ID: %@", userInfo[@"gcm.message_id"]); 
    NSLog(@"%@", userInfo); 

    [self manageAppAfterReceiveNotific: userInfo]; 
    completionHandler(UIBackgroundFetchResultNewData); 
} 

#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{ 

    NSDictionary *userInfo = response.notification.request.content.userInfo; 
    [self manageAppAfterReceiveNotific: userInfo]; 
} 
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{ 

    completionHandler(UNNotificationPresentationOptionAlert); 
} 

- (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage { 

    NSLog(@"%@", [remoteMessage appData]); 

    [self manageAppAfterReceiveNotific: [remoteMessage appData]]; 
} 
#endif 

Ниже мой Деструктивная активность:

{ 
    aps =  { 
     alert =   { 
      body = "any text"; 
      title = "New Notification"; 
     }; 
     badge = 1; 
     "content-available" = 1; 
     sound = default; 
    }; 
    extra = "{\"childrenId\":\"48\",\"timestamp\":\"1479724388\"}"; 
    "gcm.message_id" = "Message ID"; 
    noteType = "CHECK_OUT"; 
} 
+1

вы можете показать полезную нагрузку ваше уведомление? –

+0

@balkaran singh, я обновлю свой вопрос и добавлю PayLoad внутри него. – Ayra

+0

Привет, Uploade полезной нагрузки, – Ayra

ответ