【问题标题】:Firebase push notification alert sound is not playing in background mode in iOS 10Firebase 推送通知警报声音未在 iOS 10 的后台模式下播放
【发布时间】:2017-04-07 01:39:58
【问题描述】:

我正在我的原生 iOS 应用中实现 Apple 推送通知。 推送通知是通过 FireBase 实现的。 它在 iOS 9 及更早版本中完美运行。

我在 iOS 10 中遇到了一个问题。在 iOS 10 中,推送通知在其他状态下运行良好,但 当应用程序处于后台时,我的推送通知的声音没有播放。 对于 app 的其他状态,一切正常。 只有后台模式有问题。

下面是我实现推送通知的代码。

独立游戏

-(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";
}

【问题讨论】:

  • 你能显示通知的有效负载吗?
  • @balkaran singh,我将更新我的问题并在其中添加 PayLoad。
  • 嗨,上传有效载荷,

标签: ios firebase background push-notification ios10


【解决方案1】:

根据firebase文档https://firebase.google.com/docs/cloud-messaging/http-server-ref,您应该将“声音”字段放入通知消息中,请参考表2a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多