Maison  >  Article  >  développement back-end  >  Pourquoi les notifications Firebase Cloud Messaging (FCM) ne sont-elles pas conservées en mode arrière-plan sur iOS ?

Pourquoi les notifications Firebase Cloud Messaging (FCM) ne sont-elles pas conservées en mode arrière-plan sur iOS ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-20 15:22:02926parcourir

Why Are Firebase Cloud Messaging (FCM) Notifications Not Retained in Background Mode on iOS?

Firebase Cloud Messaging (FCM) : notifications non reçues lorsque l'application est en mode arrière-plan sur iOS

FCM permet aux développeurs d'envoyer des notifications push à Appareils iOS et Android. Ce problème se produit lorsque les notifications ne sont pas reçues lorsque l'application est en arrière-plan.

Causes possibles :

  • Code PHP incorrect pour l'envoi de notifications.
  • Manque de prise en charge du mode arrière-plan dans l'application iOS.

Solution :

Code PHP :

  • Ajoutez les champs suivants à votre charge utile PHP :

    • 'content_available' => true (à déclencher lorsque l'application iOS est en arrière-plan)
    • 'priority' => 'haute'
    • 'notification' => $data (remplacez $data par les données de notification souhaitées)
  • Définissez $data pour inclure à la fois les clés « message » et « corps » avec des valeurs personnalisées.

Application iOS :

  1. Vérifiez si le fichier .gcm est inclus dans votre projet Xcode.
  2. Assurez-vous qu'AppDelegate est conforme à GCMReceiverDelegate.
  3. Remplacez les méthodes applicationDidBecomeActive et applicationDidEnterBackground pour (re)connecter et déconnecter du FCM, respectivement.
  4. Inscrivez-vous aux notifications à l'aide de UIRemoteNotificationType.
  5. Implémentez la méthode application:didReceiveRemoteNotification : pour gérer les notifications reçues, même lorsque l'application est en arrière-plan.
  6. Si nécessaire, implémentez la méthode application:didReceiveRemoteNotification:fetchCompletionHandler : pour gérer davantage les notifications reçues en arrière-plan.

Code PHP mis à jour :

<code class="php"><?php

$data = array(
    'message' => 'Hello World!',
    'body' => 'Hello World!'
);

$post = array(
    'registration_ids' => $ids,
    'data' => $data,
    'content_available' => true,
    'priority' => 'high',
    'notification' => $data
);

// ... Remaining code</code>

Application iOS mise à jour :

<code class="objc">// AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate, GCMReceiverDelegate>

// AppDelegate.m
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // ...
    // Register for remote notifications
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) {
        UIRemoteNotificationType allNotificationTypes =
        (UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge);
        [application registerForRemoteNotificationTypes:allNotificationTypes];
    } else {
        UIUserNotificationType allNotificationTypes =
        (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
        UIUserNotificationSettings *settings =
        [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    // ...
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [[GCMService sharedInstance] disconnect];
    _connectedToGCM = NO;
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[GCMService sharedInstance] connectWithHandler:^(NSError *error) {
        // ...
    }];
}

// ...</code>

Remarque :

  • Assurer que vous avez activé les notifications push pour votre application dans le portail des développeurs Apple.
  • Ajoutez le certificat de notification push dans les paramètres de votre projet FCM.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn