全部产品
Search
文档中心

Mobile Platform as a Service:iOS

更新时间:Jul 02, 2025

Panduan ini menjelaskan cara mengintegrasikan MPS ke klien iOS menggunakan proyek asli dengan CocoaPods.

Catatan

Sejak 28 Juni 2020, mPaaS telah menghentikan dukungan untuk baseline 10.1.32. Gunakan 10.1.68 atau 10.1.60 sebagai gantinya. Untuk panduan peningkatan dari versi 10.1.32 ke 10.1.68 atau 10.1.60, lihat Panduan Peningkatan mPaaS 10.1.68 atau Panduan Peningkatan mPaaS 10.1.60.

Prasyarat

Pastikan Anda telah mengintegrasikan proyek Anda dengan mPaaS. Untuk informasi lebih lanjut, lihat Integrasi Berbasis Kerangka Asli dan Menggunakan CocoaPods.

Prosedur

Untuk menggunakan MPS, selesaikan langkah-langkah berikut:

  1. Tambahkan SDK MPS menggunakan plugin CocoaPods.

    1. Dalam file Podfile, gunakan mPaaS_pod "mPaaS_Push" untuk menambahkan dependensi.

    2. Jalankan pod install untuk menyelesaikan integrasi SDK.

  2. Konfigurasikan proyek.

    Aktifkan fitur berikut di direktori TARGETS proyek Anda:

    • Capabilities > Push Notificationspush-ca

    • Capabilities > Background Modes > Remote notificationspush-back

  3. Gunakan SDK.

    1. (Opsional) Daftarkan device token.

      SDK push pesan akan secara otomatis meminta pendaftaran deviceToken saat aplikasi dimulai. Secara umum, Anda tidak perlu meminta pendaftaran deviceToken. Namun, dalam kasus tertentu (seperti kontrol privasi saat startup), Anda perlu memicu pendaftaran deviceToken lagi setelah kontrol dan otorisasi. Contoh kode adalah sebagai berikut:

      - (void)registerRemoteNotification
      {
          // Pendaftaran notifikasi push
          if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {// 10.0+
              UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
              center.delegate = self;
              [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
      
                      [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert|UNAuthorizationOptionSound|UNAuthorizationOptionBadge)
                                            completionHandler:^(BOOL granted, NSError * _Nullable error) {
                          // Aktifkan atau nonaktifkan fitur berdasarkan otorisasi.
                          if (granted) {
                              dispatch_async(dispatch_get_main_queue(), ^{
                                  [[UIApplication sharedApplication] registerForRemoteNotifications];
                              });
                          }
                      }];
      
              }];
          } else {// 8.0,9.0
              UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge                                                                                         |UIUserNotificationTypeSound|UIUserNotificationTypeAlert) categories:nil];
              [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
              [[UIApplication sharedApplication] registerForRemoteNotifications];
          }
      }
    2. Dapatkan device token dan ikat dengan ID pengguna.

      SDK push pesan yang disediakan oleh mPaaS mengenkapsulasi logika pendaftaran dengan server APNs. Setelah program dimulai, Push SDK secara otomatis mendaftar ke server APNs. Anda dapat mendapatkan deviceToken yang dikeluarkan oleh APNs di metode callback pendaftaran yang berhasil, lalu panggil metode antarmuka PushService untuk melaporkan pengikatan userId ke inti push seluler.

      // import <PushService/PushService.h>
      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
      {
          [[PushService sharedService] setDeviceToken:deviceToken];
          [[PushService sharedService] pushBindWithUserId:@"your userid(to be replaced)" completion:^(NSException *error) {
          }];
      
      }

      SDK push juga menyediakan API - (void)pushUnBindWithUserId:(NSString *)userId completion:(void (^)(NSException *error))completion; untuk melepaskan device token dari ID pengguna aplikasi. Misalnya, Anda dapat memanggil API unbind setelah pengguna beralih ke akun lain.

    3. Terima pesan push.

      Setelah klien menerima pesan yang didorong, jika pengguna mengklik untuk melihatnya, sistem akan memulai aplikasi yang sesuai. Pemrosesan logika setelah menerima pesan push dapat dilakukan di metode callback AppDelegate.

      • Pada versi sistem sebelum iOS 10, metode pemrosesan pesan bilah notifikasi atau pesan diam adalah sebagai berikut:

         // Cold start untuk pesan push pada versi sistem sebelum iOS 10
          - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          NSDictionary *userInfo = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
          if ([[[UIDevice currentDevice] systemVersion] doubleValue] < 10.0) {
          // Cold start untuk pesan push pada versi sistem sebelum iOS 10
          }
        
          return YES;
          }
        
          // Saat aplikasi berjalan di latar depan, gunakan metode pemrosesan pesan push biasa; saat aplikasi berjalan di latar belakang atau latar depan, gunakan metode pemrosesan pesan diam ; saat versi aplikasi lebih awal dari iOS 10, gunakan metode pemrosesan pesan bilah notifikasi
          -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler 
          {
          // Proses pesan yang diterima
          }
      • Pada iOS 10 dan yang lebih baru, implementasikan metode delegasi berikut untuk mendengarkan pesan bilah notifikasi:

          // Daftarkan delegasi UNUserNotificationCenter 
          if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 10.0) {
                  UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
                  center.delegate = self;
            }
        
           // Terima pesan push jarak jauh saat aplikasi berjalan di latar depan
          - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
          {
              NSDictionary *userInfo = notification.request.content.userInfo;
        
              if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
                  // Terima pesan push jarak jauh saat aplikasi berjalan di latar depan
        
              } else {
                  // Terima pesan push lokal saat aplikasi berjalan di latar depan
        
              }
              completionHandler(UNNotificationPresentationOptionNone);
          }
        
          // Terima pesan push jarak jauh saat aplikasi berjalan di latar belakang atau menggunakan mode cold start
          - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler
          {
              NSDictionary *userInfo = response.notification.request.content.userInfo;
        
              if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
                  // Terima pesan push jarak jauh saat aplikasi berjalan di latar belakang atau menggunakan mode cold start
        
              } else {
                  // Terima pesan push lokal saat aplikasi berjalan di latar depan
        
              }
              completionHandler();
        
          }
    4. Hitung laju pembukaan pesan.

      Untuk menghitung laju pembukaan pesan di sisi klien, panggil antarmuka pushOpenLogReport dari PushService (tersedia di versi 10.1.32 dan yang lebih baru) untuk melaporkan peristiwa pembukaan pesan saat pesan aplikasi dibuka oleh pengguna. Setelah peristiwa dilaporkan, Anda dapat melihat statistik laju pembukaan pesan di halaman Message Push > Overview di konsol mPaaS.

      /**
       * Aktifkan API pelaporan pesan push sehingga laju pembukaan pesan dapat dihitung.
       * @param  userInfo userInfo dari sebuah pesan
       * @return
       */
      - (void)pushOpenLogReport:(NSDictionary *)userInfo;
  4. Konfigurasikan sertifikat push.

    Untuk mendorong pesan melalui konsol MPS mPaaS, konfigurasikan sertifikat push APNs di konsol. Sertifikat ini harus sesuai dengan tanda tangan di klien. Jika tidak, klien tidak dapat menerima pesan push.

    Untuk informasi lebih lanjut tentang konfigurasi, lihat Konfigurasikan Sertifikat Push iOS.

Langkah-langkah lanjutan

  • Setelah sertifikat APNs dikonfigurasi di konsol MPS mPaaS, pesan dapat didorong ke aplikasi dalam dimensi perangkat. MPS mendorong pesan ke klien melalui Apple APNs. Untuk informasi lebih lanjut, lihat Proses Push untuk Perangkat Apple dan Perangkat Android di Luar Tiongkok.

  • Setelah ID pengguna dilaporkan dan server mengikatnya dengan device token, pesan dapat didorong ke aplikasi dalam dimensi pengguna.

Contoh kode

Klik di sini untuk mengunduh contoh kode.

Pesan push Live Activity

iOS memperkenalkan fitur baru di versi 16.1: Live Activity. Fitur ini dapat menampilkan aktivitas real-time di layar terkunci, membantu pengguna mempelajari kemajuan berbagai aktivitas secara real-time dari layar terkunci. Di proyek utama, Anda dapat menggunakan kerangka kerja ActivityKit untuk memulai, memperbarui, dan mengakhiri aktivitas real-time. Di antaranya, memperbarui dan mengakhiri aktivitas real-time juga dapat dicapai melalui push jarak jauh. Di ekstensi widget, Anda dapat menggunakan SwiftUI dan WidgetKit untuk membuat antarmuka aktivitas langsung. Fungsi pembaruan push jarak jauh aktivitas langsung tidak mendukung sertifikat .p12, sehingga pengguna perlu mengonfigurasi sertifikat .p8.

Beberapa aktivitas langsung dapat dibuka pada saat yang sama di proyek yang sama, dan aktivitas langsung yang berbeda memiliki token yang berbeda.

Akses klien

Konfigurasikan proyek yang mendukung Live Activity

  1. Tambahkan pasangan nilai-kunci di file Info.plist proyek utama. Kuncinya adalah NSSupportsLiveActivities dan nilainya adalah YES.image

  2. Buat Ekstensi Widget baru. Jika sudah ada di proyek, Anda dapat melewati langkah ini.imageimage

Akses klien melalui kode

  1. Buat model.

    Buat file swift baru di kode proyek utama dan definisikan ActivityAttributes dan Activity.ContentState di dalamnya. Kode berikut adalah kode contoh, silakan tulis sesuai dengan bisnis aktual.

    import SwiftUI
    import ActivityKit
    
    struct PizzaDeliveryAttributes: ActivityAttributes {
        public typealias PizzaDeliveryStatus = ContentState
      
        public struct ContentState: Codable, Hashable {
            var driverName: String
            var estimatedDeliveryTime: ClosedRange<Date>
            
            init(driverName: String, estimatedDeliveryTime: ClosedRange<Date>) {
                self.driverName = driverName
                self.estimatedDeliveryTime = estimatedDeliveryTime
            }
            init(from decoder: Decoder) throws {
                let container: KeyedDecodingContainer<PizzaDeliveryAttributes.ContentState.CodingKeys> = try decoder.container(keyedBy: PizzaDeliveryAttributes.ContentState.CodingKeys.self)
                self.driverName = try container.decode(String.self, forKey: PizzaDeliveryAttributes.ContentState.CodingKeys.driverName)
                if let deliveryTime = try? container.decode(TimeInterval.self, forKey: PizzaDeliveryAttributes.ContentState.CodingKeys.estimatedDeliveryTime) {
                    self.estimatedDeliveryTime = Date()...Date().addingTimeInterval(deliveryTime * 60)
                } else if let deliveryTime = try? container.decode(String.self, forKey: PizzaDeliveryAttributes.ContentState.CodingKeys.estimatedDeliveryTime) {
                    self.estimatedDeliveryTime = Date()...Date().addingTimeInterval(TimeInterval.init(deliveryTime)! * 60)
                } else {
                    self.estimatedDeliveryTime = try container.decode(ClosedRange<Date>.self, forKey: PizzaDeliveryAttributes.ContentState.CodingKeys.estimatedDeliveryTime)
                }
            }
        }
      
        var numberOfPizzas: Int
        var totalAmount: String
    }
    
    • Baik target proyek utama maupun Activity harus dipilih.

    • Pesan push yang diterima diproses oleh sistem dan tidak dapat dicegat oleh pengembang.

    • ContentState berisi data yang dapat diperbarui secara dinamis. Saat mendorong notifikasi Live Activity, nama parameter dan jenis yang diperbarui secara dinamis harus sesuai dengan yang dikonfigurasi di ContentState.

    • Jika beberapa data perlu diproses, Anda perlu menimpa metode decoder dari ActivityAttributes.ContentState.

  2. Buat antarmuka.

    Buat antarmuka live, aktif di Ekstensi Widget. Buat Widget dan kembalikan Activity Configuration. Tulis UI spesifik sesuai dengan bisnis Anda sendiri.

    image

  3. Gunakan WidgetBundle.

    Jika target App mendukung widget dan aktivitas langsung, gunakan WidgetBundle.

    import WidgetKit
    import SwiftUI
    
    @main
    structIslandBundle: WidgetBundle {
    varbody: someWidget {
    Island()
    IslandLiveActivity()
    }
    }
  4. Nyalakan aktivitas langsung.

    func startDeliveryPizza() {
        let pizzaDeliveryAttributes = PizzaDeliveryAttributes(numberOfPizzas: 1, totalAmount:"$99")
        let initialContentState = PizzaDeliveryAttributes.PizzaDeliveryStatus(driverName: "TIM", estimatedDeliveryTime: Date()...Date().addingTimeInterval(15 * 60))
        do {
            let deliveryActivity = try Activity<PizzaDeliveryAttributes>.request(
                attributes: pizzaDeliveryAttributes,
                contentState: initialContentState,
                pushType: .token)
        } catch (let error) {
            print("Error requesting pizza delivery Live Activity \(error.localizedDescription)")
        }
    }
  5. Kirim Token.

    Setelah aktivitas langsung berhasil dinyalakan, Token push aktivitas langsung yang dikembalikan oleh sistem diperoleh melalui metode pushTokenUpdates. Panggil metode liveActivityBindWithActivityId:pushToken:filter:completion: dari PushService untuk mengirimkan. Saat mengirimkan Token, pengenal aktivitas langsung perlu dikirimkan bersama. Pengenal ini diperlukan saat mendorong aktivitas langsung, dan server mengonfirmasi target dorongan berdasarkan pengenal ini. Harap sesuaikan identitas aktivitas langsung ini. Aktivitas langsung yang berbeda memiliki id yang berbeda (jika sama, akan menyebabkan masalah dorongan). Untuk aktivitas langsung yang sama, jangan ubah id saat Token diperbarui.

    Catatan

    ActivityKit adalah kerangka kerja bahasa swift dan tidak mendukung panggilan OC langsung. Saat menggunakan API kerangka kerja, harap panggil di file swift. Karena MPPushSDK adalah bahasa OC, saat swift memanggil OC, file jembatan perlu dibuat. Dan impor #import <MPPushSDK/MPPushSDK.h> di file jembatan.

    let liveactivityId = UserDefaults.standard.string(forKey: "pushTokenUpdates_id") ?? "defloutliveactivityId"
    Task {
        for await tokenData in deliveryActivity.pushTokenUpdates {
            let newToken = tokenData.map { String(format: "%02x", $0) }.joined()       
            PushService.shared().liveActivityBind(withActivityId: liveactivityId, pushToken: newToken, filter: .call) { excpt in
                guard let excpt = excpt else {
                    ///Dikirimkan berhasil
                    return
                }
                if "callRepeat" == excpt.reason {
                    ///Panggilan berulang, harap abaikan
                    print("pushTokenUpdates_id-Panggilan berulang")
                } else {
                    ///Pengiriman gagal
                }
            }
        }
    }

    Setelah berhasil dikirimkan, pembaruan dapat didorong menggunakan identifikasi aktivitas langsung.

    Catatan

    Karena iPhone's pushTokenUpdates akan dipanggil dua kali pada saat yang sama, yaitu, dalam skenario beberapa aktivitas langsung, aktivitas langsung sebelumnya pushTokenUpdates akan diaktifkan kembali saat aktivitas langsung baru dibuat, jadi SDK menyediakan fungsi penyaringan, dikontrol oleh parameter filter:

    • Saat filter adalah MPPushServiceLiveActivityFilterAbandon, SDK akan secara otomatis membuang panggilan berulang tanpa memberikan callback.

    • Saat filter adalah MPPushServiceLiveActivityFilterCall, SDK akan secara otomatis memfilter permintaan ini dan memberikan callback kegagalan (callRepeat). Pada saat ini, error.reason adalah @"callRepeat", harap abaikan.

    • Saat filter adalah MPPushServiceLiveActivityFilterReRefuse, tidak ada penyaringan yang dilakukan di dalam SDK. Saat activityId dan pushToken yang sama dipanggil berulang kali, jika pengiriman gagal, pengiriman ulang klien tidak akan dianggap sebagai panggilan yang sama.

    Definisi MPPushServiceLiveActivityFilterType adalah sebagai berikut:

    typedef NS_ENUM(NSInteger, MPPushServiceLiveActivityFilterType){
        MPPushServiceLiveActivityFilterAbandon,//Buang langsung tanpa callback apa pun
        MPPushServiceLiveActivityFilterCall,//Filter permintaan ini dan berikan callback kegagalan(callRepeat)
        MPPushServiceLiveActivityFilterRefuse//Tidak ada penyaringan
    };