Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Pemberitahuan Firebase Cloud Messaging (FCM) Tidak Dikekalkan dalam Mod Latar Belakang pada iOS?

Mengapa Pemberitahuan Firebase Cloud Messaging (FCM) Tidak Dikekalkan dalam Mod Latar Belakang pada iOS?

Susan Sarandon
Susan Sarandonasal
2024-10-20 15:22:021026semak imbas

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

Firebase Cloud Messaging (FCM): Pemberitahuan Tidak Diterima Apabila Apl Dalam Mod Latar Belakang pada iOS

FCM membenarkan pembangun menghantar pemberitahuan tolak kepada peranti iOS dan Android. Isu ini berlaku apabila pemberitahuan tidak diterima apabila apl berada di latar belakang.

Punca Kemungkinan:

  • Kod PHP yang salah untuk menghantar pemberitahuan.
  • Kekurangan sokongan mod latar belakang dalam aplikasi iOS.

Penyelesaian:

Kod PHP:

  • Tambahkan medan berikut pada muatan PHP anda:

    • 'content_available' => benar (untuk mencetuskan apabila apl iOS berada di latar belakang)
    • 'keutamaan' => 'tinggi'
    • 'pemberitahuan' => $data (ganti $data dengan data pemberitahuan yang anda inginkan)
  • Tetapkan $data untuk memasukkan kedua-dua kunci 'mesej' dan 'body' dengan nilai tersuai.

Aplikasi iOS:

  1. Semak sama ada fail .gcm disertakan dalam projek Xcode anda.
  2. Pastikan AppDelegate mematuhi GCMReceiverDelegate.
  3. Timpa kaedah applicationDidBecomeActive dan applicationDidEnterBackground untuk (semula)sambung dan putuskan sambungan daripada FCM, masing-masing.
  4. Daftar untuk pemberitahuan menggunakan UIRemoteNotificationType.
  5. Laksanakan aplikasi:didReceiveRemote Notifications to even received notifications: apabila apl berada di latar belakang.
  6. Jika perlu, laksanakan aplikasi:didReceiveRemoteNotification:fetchCompletionHandler: kaedah untuk mengendalikan lebih lanjut pemberitahuan yang diterima di latar belakang.

Kod PHP yang dikemas kini :

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

Aplikasi iOS yang dikemas kini:

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

Nota:

  • Pastikan bahawa anda telah mendayakan pemberitahuan tolak untuk apl anda dalam Portal Pembangun Apple.
  • Tambahkan sijil pemberitahuan tolak dalam tetapan projek FCM anda.

Atas ialah kandungan terperinci Mengapa Pemberitahuan Firebase Cloud Messaging (FCM) Tidak Dikekalkan dalam Mod Latar Belakang pada iOS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn