Panduan ini menjelaskan cara mengintegrasikan MPS ke klien iOS menggunakan proyek asli dengan CocoaPods.
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:
Tambahkan SDK MPS menggunakan plugin CocoaPods.
Dalam file Podfile, gunakan
mPaaS_pod "mPaaS_Push"untuk menambahkan dependensi.Jalankan
pod installuntuk menyelesaikan integrasi SDK.
Konfigurasikan proyek.
Aktifkan fitur berikut di direktori TARGETS proyek Anda:
Capabilities > Push Notifications

Capabilities > Background Modes > Remote notifications

Gunakan SDK.
(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]; } }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.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(); }
Hitung laju pembukaan pesan.
Untuk menghitung laju pembukaan pesan di sisi klien, panggil antarmuka
pushOpenLogReportdariPushService(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;
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.
Topik terkait
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
Tambahkan pasangan nilai-kunci di file
Info.plistproyek utama. Kuncinya adalahNSSupportsLiveActivitiesdan nilainya adalahYES.
Buat Ekstensi Widget baru. Jika sudah ada di proyek, Anda dapat melewati langkah ini.


Akses klien melalui kode
Buat model.
Buat file swift baru di kode proyek utama dan definisikan
ActivityAttributesdan 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.
ContentStateberisi data yang dapat diperbarui secara dinamis. Saat mendorong notifikasi Live Activity, nama parameter dan jenis yang diperbarui secara dinamis harus sesuai dengan yang dikonfigurasi diContentState.Jika beberapa data perlu diproses, Anda perlu menimpa metode
decoderdariActivityAttributes.ContentState.
Buat antarmuka.
Buat antarmuka live, aktif di Ekstensi Widget. Buat Widget dan kembalikan
Activity Configuration. Tulis UI spesifik sesuai dengan bisnis Anda sendiri.
Gunakan WidgetBundle.
Jika target App mendukung widget dan aktivitas langsung, gunakan WidgetBundle.
import WidgetKit import SwiftUI @main structIslandBundle: WidgetBundle { varbody: someWidget { Island() IslandLiveActivity() } }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)") } }Kirim Token.
Setelah aktivitas langsung berhasil dinyalakan, Token push aktivitas langsung yang dikembalikan oleh sistem diperoleh melalui metode
pushTokenUpdates. Panggil metodeliveActivityBindWithActivityId: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.CatatanActivityKit 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.
CatatanKarena iPhone's
pushTokenUpdatesakan dipanggil dua kali pada saat yang sama, yaitu, dalam skenario beberapa aktivitas langsung, aktivitas langsung sebelumnyapushTokenUpdatesakan 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.reasonadalah@"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
MPPushServiceLiveActivityFilterTypeadalah 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 };