logoDokumen
Cari

Panduan Integrasi iOS SDK

Versi yang Didukung

Artikel ini berlaku untuk MTPush iOS SDK versi: v3.0.0 ke atas.

File Sumber

Nama Paket engagelab-ios-{nomor versi}

Mulai versi 4.3.3, paket .a tidak lagi disediakan. Hanya paket .xcframework yang tersedia.

  • Folder lib: Berisi mtpush-ios-x.x.x.xcframework, mtpush-extension-ios-x.x.x.xcframework. (Catatan: APNs tidak didukung pada simulator).
  • File README: Instruksi terkait SDK.
  • Folder demo: Contoh penggunaan.

Mendapatkan Informasi Aplikasi

Setelah aplikasi dibuat di konsol, sebuah AppKey akan otomatis dihasilkan untuk mengidentifikasi aplikasi tersebut.

Konfigurasi Proyek

Mengimpor SDK

Import menggunakan Cocoapods

pod 'MTPush' Catatan: Jika Anda tidak dapat mengimpor versi terbaru, jalankan perintah pod repo update master untuk memperbarui pustaka pod lokal, lalu ulangi pod 'MTPush'.
              
                  pod 'MTPush'

    Catatan: Jika Anda tidak dapat mengimpor versi terbaru, jalankan perintah pod repo update master untuk memperbarui pustaka pod lokal, lalu ulangi pod 'MTPush'.

            
Tampilkan blok kode ini di jendela mengambang
  • Untuk instalasi versi tertentu, gunakan metode berikut (contoh MTPush 3.5.0):
pod 'MTPush', '3.5.0'
              
                  pod 'MTPush', '3.5.0'

            
Tampilkan blok kode ini di jendela mengambang

Import Manual

  • Ekstrak paket SDK, di Xcode pilih "Add files to 'Nama proyek Anda'...", lalu tambahkan mtpush-ios-x.x.x.xcframework ke direktori proyek Anda.
  • Tambahkan Framework:
    • CFNetwork.framework
    • CoreFoundation.framework
    • CoreTelephony.framework
    • SystemConfiguration.framework
    • CoreGraphics.framework
    • Foundation.framework
    • UIKit.framework
    • Security.framework
    • libz.tbd
    • UserNotifications.framework
    • libresolv.tbd
    • libsqlite3.tbd

Pengaturan Build

Jika proyek Anda membutuhkan dukungan untuk iOS di bawah 7.0, buka Build Settings dan matikan opsi bitCode. Jika tidak, proyek tidak akan dapat dikompilasi dengan benar.

  • Atur User Header Search Paths dan Library Search Paths di bagian Search Paths. Contoh: folder SDK (default: lib) berada pada level yang sama dengan file proyek. Atur parameter ini ke $(SRCROOT)/{nama folder library statis}.

Capabilities

Jika Anda menggunakan Xcode 8 ke atas, aktifkan Capabilities->Push Notifications pada Application Target, seperti gambar berikut: 1.png
Jika Anda menggunakan Xcode 10 ke atas, aktifkan Capabilities-> Access WIFI Infomation pada Application Target Anda.
image.png

Menambahkan File Header

Tambahkan kode berikut pada file header referensi AppDelegate.m.

// import file header fungsi MTPush yang diperlukan #import "MTPushService.h" // iOS10 Register file header yang diperlukan untuk APNs #ifdef NSFoundationVersionNumber_iOS_9_x_Max #import <UserNotifications/UserNotifications.h> #endif // File header untuk menggunakan fungsionalitas idfa (opsional) #import <AdSupport/AdSupport.h>
              
              // import file header fungsi MTPush yang diperlukan
#import "MTPushService.h"
// iOS10 Register file header yang diperlukan untuk APNs
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
// File header untuk menggunakan fungsionalitas idfa (opsional)
#import <AdSupport/AdSupport.h>

            
Tampilkan blok kode ini di jendela mengambang

Menambahkan Delegate

Tambahkan Delegate pada AppDelegate. Contoh kode:

@interface AppDelegate ()<MTPushRegisterDelegate> @end
              
              @interface AppDelegate ()<MTPushRegisterDelegate>

@end

            
Tampilkan blok kode ini di jendela mengambang

Menambahkan Kode Inisialisasi

Menambahkan Kode Inisialisasi APNs

Tambahkan kode berikut ke -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

//Wajib MTPushRegisterEntity * entity = [[MTPushRegisterEntity alloc] init]; entity.types = MTPushAuthorizationOptionAlert|MTPushAuthorizationOptionSound|MTPushAuthorizationOptionProvidesAppNotificationSettings; if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { // Kustomisasi kategori dapat ditambahkan // NSSet<UNNotificationCategory *> *categories untuk iOS10 atau lebih baru // NSSet<UIUserNotificationCategory *> *categories untuk iOS8 dan iOS9 } [MTPushService registerForRemoteNotificationConfig:entity delegate:self];
              
                //Wajib
 
    MTPushRegisterEntity * entity = [[MTPushRegisterEntity alloc] init];
  entity.types = MTPushAuthorizationOptionAlert|MTPushAuthorizationOptionSound|MTPushAuthorizationOptionProvidesAppNotificationSettings;
  if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
    // Kustomisasi kategori dapat ditambahkan
    // NSSet<UNNotificationCategory *> *categories untuk iOS10 atau lebih baru
    // NSSet<UIUserNotificationCategory *> *categories untuk iOS8 dan iOS9
  }
  [MTPushService registerForRemoteNotificationConfig:entity delegate:self];

            
Tampilkan blok kode ini di jendela mengambang

Menambahkan Kode Inisialisasi MTPush

Tambahkan kode berikut ke -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

// Opsional // Mendapatkan IDFA // Untuk menggunakan fungsi IDFA, tambahkan kode ini dan isi parameter advertisingIdentifier pada metode inisialisasi NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; // Wajib // Inisialisasi Push [MTPushService setupWithOption:launchOptions appKey:appKey channel:channel apsForProduction:isProduction advertisingIdentifier:advertisingId];
              
              // Opsional
// Mendapatkan IDFA
// Untuk menggunakan fungsi IDFA, tambahkan kode ini dan isi parameter advertisingIdentifier pada metode inisialisasi
NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

// Wajib
// Inisialisasi Push
[MTPushService setupWithOption:launchOptions appKey:appKey
                      channel:channel
             apsForProduction:isProduction
        advertisingIdentifier:advertisingId];

            
Tampilkan blok kode ini di jendela mengambang
Penjelasan Parameter
  • appKey
    • Pastikan appkey yang dikonfigurasi di aplikasi sama dengan yang dihasilkan setelah aplikasi dibuat di Console.
  • channel
    • Tentukan channel unduhan paket aplikasi. Untuk statistik per channel, Anda dapat mendefinisikan nilai spesifik, misal App Store.
  • apsForProduction
    • Menandakan lingkungan sertifikat APNs yang digunakan aplikasi saat ini.
    • 0 (default) berarti menggunakan sertifikat pengembangan, 1 berarti menggunakan sertifikat produksi.
    • Catatan: Nilai field ini harus sama dengan lingkungan sertifikat yang dikonfigurasi di Code Signing pada Build Settings.

APNs Berhasil Terdaftar dan DeviceToken Dilaporkan

Tips: Anda dapat login ke EngageLab tanpa memanggil metode ini. Namun, notifikasi APNs tidak tersedia, hanya dapat menggunakan pesan kustom.

Implementasikan metode callback di AppDelegate.m dan tambahkan kode berikut:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { /// Wajib - mendaftarkan DeviceToken [MTPushService registerDeviceToken:deviceToken]; }
              
              - (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

  /// Wajib - mendaftarkan DeviceToken
  [MTPushService registerDeviceToken:deviceToken];
}

            
Tampilkan blok kode ini di jendela mengambang

Implementasi Interface Kegagalan Registrasi APNs (Opsional)

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { //Opsional NSLog(@"Gagal Mendaftar Remote Notifications Dengan Error: %@", error); [MTPushService registerDeviceToken:deviceToken]; }
              
              - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
  //Opsional
  NSLog(@"Gagal Mendaftar Remote Notifications Dengan Error: %@", error);
   [MTPushService registerDeviceToken:deviceToken];
}

            
Tampilkan blok kode ini di jendela mengambang

Menambahkan Metode Callback untuk Menangani Notifikasi APNs

Implementasikan metode callback di AppDelegate.m dan tambahkan kode berikut:

#pragma mark- MTPushRegisterDelegate // Dukungan iOS 12 - (void)mtpNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification{if (notification && [notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {// Masuk langsung ke aplikasi dari antarmuka notifikasi.}else{// Masuk ke aplikasi dari pengaturan notifikasi.} } // Dukungan iOS 10 - (void)mtpNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler { // Wajib NSDictionary * userInfo = notification.request.content.userInfo; if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[MTPushService handleRemoteNotification:userInfo]; } completionHandler(UNNotificationPresentationOptionAlert); // Untuk menjalankan metode ini, pilih apakah akan menampilkan Alert ke pengguna atau tidak. Ada tiga tipe: Badge, Sound, dan Alert. } // Dukungan iOS 10 - (void)mtpNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { // Wajib NSDictionary * userInfo = response.notification.request.content.userInfo; if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[MTPushService handleRemoteNotification:userInfo]; } completionHandler(); // Sistem mengharuskan metode ini dijalankan} - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // Wajib, Dukungan iOS 7 [MTPushService handleRemoteNotification:userInfo]; completionHandler(UIBackgroundFetchResultNewData); } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Wajib, Untuk sistem dengan iOS 6 atau lebih rendah [MTPushService handleRemoteNotification:userInfo]; }
              
              #pragma mark- MTPushRegisterDelegate

// Dukungan iOS 12
- (void)mtpNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification{if (notification && [notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {// Masuk langsung ke aplikasi dari antarmuka notifikasi.}else{// Masuk ke aplikasi dari pengaturan notifikasi.}
}

// Dukungan iOS 10
- (void)mtpNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
  // Wajib
  NSDictionary * userInfo = notification.request.content.userInfo;
  if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[MTPushService handleRemoteNotification:userInfo];
  }
  completionHandler(UNNotificationPresentationOptionAlert); // Untuk menjalankan metode ini, pilih apakah akan menampilkan Alert ke pengguna atau tidak. Ada tiga tipe: Badge, Sound, dan Alert.
}

// Dukungan iOS 10
- (void)mtpNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
  // Wajib
  NSDictionary * userInfo = response.notification.request.content.userInfo;
  if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[MTPushService handleRemoteNotification:userInfo];
  }
  completionHandler();	// Sistem mengharuskan metode ini dijalankan}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

  // Wajib, Dukungan iOS 7
  [MTPushService handleRemoteNotification:userInfo];
  completionHandler(UIBackgroundFetchResultNewData);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

  // Wajib, Untuk sistem dengan iOS 6 atau lebih rendah
  [MTPushService handleRemoteNotification:userInfo];
}

            
Tampilkan blok kode ini di jendela mengambang

Menambahkan Metode Callback untuk Menangani Pesan Kustom MTPush

Untuk menggunakan fungsi pesan kustom MTPush, silakan lihat 【Panduan API iOS】 untuk mengimplementasikan callback pemrosesan pesan kustom.

Berhasil Berjalan

Debug proyek Anda. Jika konsol menampilkan log berikut, berarti integrasi Anda berhasil.

2016-08-19 17:12:12.745823 219b28[1443:286814] | MTP | I - [MTCORETcpEventController] ----- hasil login ----- uid:123456 registrationID:171976fa8a8620a14a4 idc:0
              
              2016-08-19 17:12:12.745823 219b28[1443:286814] | MTP | I - [MTCORETcpEventController] 
----- hasil login -----
uid:123456 
registrationID:171976fa8a8620a14a4 
idc:0

            
Tampilkan blok kode ini di jendela mengambang

Jika Anda mengalami masalah saat debugging, silakan merujuk ke 【Panduan Debugging iOS SDK】.

Fitur Lanjutan

Pemantauan Event SDK MTush

Disarankan pengembang memasukkan jenis notifikasi berikut yang disediakan API:

extern NSString *const kMTCNetworkIsConnectingNotification; // Sedang membangun koneksi
extern NSString * const kMTCNetworkDidSetupNotification; // Koneksi berhasil
extern NSString * const kMTCNetworkDidCloseNotification; // Koneksi ditutup
extern NSString * const kMTCNetworkDidRegisterNotification; // Registrasi berhasil
extern NSString *const kMTCNetworkFailedRegisterNotification; // Registrasi gagal
extern NSString * const kMTCNetworkDidLoginNotification; // Login berhasil

Tips: Tambahkan dan daftarkan metode notifikasi kMTCNetworkDidLoginNotification dan dapatkan Registration id pada metode ini, juga dapat memanggil registrationIDCompletionHandler: untuk mendapatkannya melalui completionHandler.

extern NSString * const kMTCNetworkDidReceiveMessageNotification; // Menerima pesan kustom (non-APNS)
Data transfer KMTCNetworkDidReceiveMessageNotification dapat diperoleh melalui userInfo pada NSNotification, termasuk informasi title, content, dan extras, dll. Lihat dokumen: API SDK iOS

Layanan Statistik Notifikasi

Tips: Notification Service Extension adalah fitur baru di iOS 10, dikontrol oleh field mutable-content. Jika menggunakan konsol Web untuk push, centang opsi mutable-content pada Pengaturan Opsional. Jika menggunakan RESTFul API untuk push, atur field mutable-content ke true.

Pengembang dapat menggunakan SDK Notification Service Extension untuk melaporkan status pengiriman setiap pesan APNs. Catatan: Data Impressions yang ditampilkan di konsol EngageLab diambil dari data pengiriman yang dilaporkan di sini.

Statistik Notifikasi APNs

Cara penggunaan:

  • Buat Service Extension Service. Untuk detail, lihat iOS 10 Service Extension.
  • Import file mtpush-extension-ios-xxx.xcframework ke proyek Service Extension Anda.
  • Tambahkan Framework: libz.tbd dan libresolv.tbd.
  • Panggil [mtpushSetAppkey:] untuk mengatur appkey Anda. Pastikan appkey sama dengan appkey pada aplikasi EngageLab Anda.
  • Panggil metode [mtpushReceiveNotificationRequest:] untuk melaporkan apns Anda, statistik telah dilayani dengan semestinya; tampilkan apns pada callback blok metode ini.

Untuk contoh penggunaan lebih spesifik, silakan lihat kode Demo yang disertakan dalam paket zip versi. Dokumentasi referensi: API SDK iOS

Voip Push

  • Diperkenalkan di iOS 8, Voip push berbasis framework PushKit memungkinkan aplikasi dibangunkan dan menjalankan kode bahkan saat aplikasi dimatikan.
  • Voip tidak membedakan antara sertifikat pengembangan dan produksi. Baik Apple Push Notification service SSL (Sandbox & Production) maupun VoIP Services Certificate mendukung push Voip.

Menambahkan Library PushKit.Framework

  • Tambahkan library PushKit.framework di Xcode Build Phases - Link Binary With Libraries.
  • Import file header #import <PushKit/PushKit.h>.
  • Implementasikan protokol PKPushRegistryDelegate di AppDelegate.

Menambahkan Izin Voip

Di Project-> Capabilities->Background Modes, aktifkan opsi Voice over IP.

Implementasi Kode

  • Implementasi registrasi Voip pada metode didFinishLaunchingWithOptions.
- (void)voipRegistration{ dispatch_queue_t mainQueue = dispatch_get_main_queue(); PKPushRegistry *voipRegistry = [[PKPushRegistry alloc] initWithQueue:mainQueue]; voipRegistry.delegate = self; // Atur tipe push ke VoIP voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; }
              
              - (void)voipRegistration{
  dispatch_queue_t mainQueue = dispatch_get_main_queue();
  PKPushRegistry *voipRegistry = [[PKPushRegistry alloc] initWithQueue:mainQueue];
  voipRegistry.delegate = self;
  // Atur tipe push ke VoIP
  voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
}

            
Tampilkan blok kode ini di jendela mengambang
  • Submit Token
/// Sistem mengembalikan VoipToken, laporkan ke server EngageLab - (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)pushCredentials forType:(PKPushType)type{ if (type == PKPushTypeVoIP) { [MTPushService registerVoipToken:pushCredentials.token]; } }
              
              /// Sistem mengembalikan VoipToken, laporkan ke server EngageLab
- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)pushCredentials forType:(PKPushType)type{
   if (type == PKPushTypeVoIP) {
    [MTPushService registerVoipToken:pushCredentials.token];
   }
}

            
Tampilkan blok kode ini di jendela mengambang
  • Saat menerima push Voip, panggil interface penerimaan untuk menghitung pengiriman Voip.
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type{ if (type == PKPushTypeVoIP) { // Kirim penerimaan ke server EngageLab [MTPushService handleVoipNotification:payload.dictionaryPayload]; } } - (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler:(void(^)(void))completion{ if (type == PKPushTypeVoIP) { // Kirim penerimaan ke server EngageLab [MTPushService handleVoipNotification:payload.dictionaryPayload]; } }
              
              - (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type{
  if (type == PKPushTypeVoIP) {
    // Kirim penerimaan ke server EngageLab
    [MTPushService handleVoipNotification:payload.dictionaryPayload];
  }
}

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler:(void(^)(void))completion{
   if (type == PKPushTypeVoIP) {
    // Kirim penerimaan ke server EngageLab
    [MTPushService handleVoipNotification:payload.dictionaryPayload];
   }
}

            
Tampilkan blok kode ini di jendela mengambang

Dukungan Teknis

Jika mengalami masalah saat integrasi

  • Bacalah dokumen dengan seksama untuk memastikan tidak ada langkah yang terlewat.
  • Anda dapat mencari pertanyaan serupa di EngageLab. Agar masalah dapat diselesaikan lebih cepat, mohon sertakan informasi berikut saat meminta bantuan:
    • Produk yang ingin dikonsultasikan adalah MTPush, apakah menggunakan produk EngageLab lainnya.
    • API yang Anda panggil, parameter yang dikirimkan, pesan error lengkap, dan waktu terjadinya exception.
    • Jika tidak menerima pesan, sertakan Appkey aplikasi, Message ID pesan, dan registration ID perangkat.
    • Jika masalah disebabkan oleh SDK, sertakan versi SDK terkait dan catatan log lengkap. Upload log menggunakan file TXT.
    • Jika perangkat bermasalah adalah iOS, sertakan model dan sistem secara spesifik.
icon
Hubungi Sales