ホームページ  >  記事  >  バックエンド開発  >  Firebase Cloud Messaging (FCM) 通知が iOS のバックグラウンド モードで保持されないのはなぜですか?

Firebase Cloud Messaging (FCM) 通知が iOS のバックグラウンド モードで保持されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-20 15:22:02926ブラウズ

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

Firebase Cloud Messaging (FCM): iOS でアプリがバックグラウンド モードのときに通知が受信されない

FCM により、開発者はプッシュ通知を送信できるようになりますiOS および Android デバイス。この問題は、アプリがバックグラウンドにあるときに通知が受信されない場合に発生します。

考えられる原因:

  • 通知を送信するための PHP コードが正しくありません。
  • iOS アプリケーションにはバックグラウンド モードのサポートがありません。

解決策:

PHP コード:

  • 次のフィールドを PHP ペイロードに追加します。

    • 'content_available' => true (iOS アプリがバックグラウンドにあるときにトリガーする)
    • 'priority' => '高'
    • '通知' => $data ($data を希望の通知データに置き換えます)
  • カスタム値を持つ「message」キーと「body」キーの両方を含めるように $data を設定します。

iOS アプリケーション:

  1. .gcm ファイルが Xcode プロジェクトに含まれているかどうかを確認してください。
  2. AppDelegate が GCMReceiverDelegate に準拠していることを確認してください。
  3. applicationDid becomeActive メソッドと applicationDidEnterBackground メソッドをオーバーライドして、それぞれ FCM に (再) 接続および切断します。
  4. UIRemoteNotificationType を使用して通知を登録します。
  5. 受信した通知を処理するために application:didReceiveRemoteNotification: メソッドを実装します。アプリがバックグラウンドにあるとき。
  6. 必要に応じて、application:didReceiveRemoteNotification:fetchCompletionHandler: メソッドを実装して、バックグラウンドで受信した通知をさらに処理します。

更新された PHP コード:

<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>

更新された iOS アプリケーション:

<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>

注:

  • 必ずご確認くださいApple Developer Portal でアプリのプッシュ通知が有効になっていることを確認してください。
  • FCM プロジェクト設定にプッシュ通知証明書を追加します。

以上がFirebase Cloud Messaging (FCM) 通知が iOS のバックグラウンド モードで保持されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。