Ringkasan Pembaruan Fitur Baru iOS
Fitur Baru iOS 14
Fitur baru di iOS 14 terutama mencakup APP Clip, clipboard, perlindungan privasi, dan fitur lainnya, namun tidak ada fitur baru terkait notifikasi.
Fitur Baru iOS 13
Fitur baru di iOS 13 terutama meliputi Dark Mode, Swift UI, dan fitur lainnya, tetapi tidak ada fitur baru terkait notifikasi.
Fitur Baru iOS 12
Pengelompokan Push
Di iOS 12, notifikasi dengan tipe yang sama akan digabungkan ke dalam satu grup notifikasi. Pengguna dapat memperluas semua notifikasi dalam grup tersebut dengan mengklik grup notifikasi.

Terdapat dua metode pengelompokan notifikasi: Pengelompokan Otomatis dan Thread identifier. Pengembang tidak perlu melakukan apa-apa untuk pengelompokan otomatis, sistem akan mengelompokkan push berdasarkan bundleId aplikasi. Jika ingin pengelompokan lebih detail, gunakan thread identifier.
Pengguna dapat mengatur grup (otomatis, berdasarkan aplikasi, nonaktif)
Atribut Thread identifier sebenarnya sudah ada sejak iOS10, namun baru di iOS12 benar-benar diterapkan untuk pengelompokan.
// Pengidentifikasi unik untuk thread atau percakapan yang terkait dengan permintaan notifikasi ini. Akan digunakan untuk mengelompokkan notifikasi secara visual.
@property (NS_NONATOMIC_IOSONLY, copy) NSString *threadIdentifier __TVOS_PROHIBITED;
Pengaturan Format Ringkasan
Setelah notifikasi dikelompokkan secara otomatis, akan ada ringkasan pesan di bagian bawah. Format defaultnya adalah: n notifikasi lainnya. Format ini dapat disesuaikan. Pertama: Kustomisasi format melalui UNNotificationCategory
+ (instancetype)categoryWithIdentifier:(NSString *)identifier
actions:(NSArray<UNNotificationAction *> *)actions
intentIdentifiers:(NSArray<NSString *> *)intentIdentifiers
hiddenPreviewsBodyPlaceholder:(nullable NSString *)hiddenPreviewsBodyPlaceholder
categorySummaryFormat:(nullable NSString *)categorySummaryFormat
options:(UNNotificationCategoryOptions)options __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED;
Kedua adalah kustomisasi melalui UNNotificationContent
/// Argumen yang akan dimasukkan dalam ringkasan untuk notifikasi ini.
@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *summaryArgument __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
/// Jumlah item dalam ringkasan yang diwakili.
/// Contoh: aplikasi podcast mengirim satu notifikasi untuk 3 episode baru dalam satu acara,
/// argumen adalah nama acara dan jumlahnya 3.
/// Default 1 dan tidak boleh 0.
@property (NS_NONATOMIC_IOSONLY, readonly, assign) NSUInteger summaryArgumentCount __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
Pengelolaan Informasi
Apple menambahkan tombol "Kelola" untuk pesan yang dapat muncul dengan menggeser ke kiri.

Otorisasi Sementara
Bentuk utama otorisasi sementara adalah akan ada dua tombol pada pesan push, yang memungkinkan pengguna memilih secara aktif

Notifikasi Peringatan
Contoh: faktor keselamatan keluarga, kesehatan, keselamatan publik, dan lainnya. Pesan ini mengharuskan pengguna untuk mengambil tindakan. Skenario sederhana: kamera rumah mengirim pesan jika ada orang di rumah saat Anda pergi bekerja. Jenis notifikasi ini memerlukan sertifikat khusus.

Fitur Baru iOS 10
Petunjuk
iOS 10 menambahkan sejumlah fitur baru seputar notifikasi. Untuk detail lebih lanjut, silakan lihat Blog resmi EngageLab.
iOS 10 Service Extension
Petunjuk
Service Extension ditambahkan pada iOS 10
Ilustrasi resmi ditunjukkan di bawah ini
Artinya, sebelum APNs sampai ke perangkat, mereka diproses oleh lapisan Service Extension yang memungkinkan pengguna mengatur pengaturan sendiri dan menambah variasi pada APNs.
Cara Penggunaan
Service Extension mudah digunakan. Pertama, buat Service Extension, seperti gambar berikut

Catatan penting:
- Bundle Identifier Service Extension tidak boleh sama dengan Bundle Identifier Main Target (Aplikasi utama). Jika sama, akan muncul error duplikasi BundleID.
- Bundle Identifier Service Extension harus berada dalam namespace Main Target. Misal, BundleID Main Target adalah io.mtpush.xxx, maka BundleID Service Extension sebaiknya io.mtpush.xxx.yyy. Jika tidak, bisa terjadi error.
Setelah Service Extension berhasil dibuat, Anda akan menemukan kelas dengan dua metode:
- didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *contentToDeliver))contentHandler
- serviceExtensionTimeWillExpire
Penjelasan resmi metode pertama: Panggil contentHandler dengan konten notifikasi yang telah dimodifikasi untuk dikirimkan. Jika handler tidak dipanggil sebelum waktu layanan habis, maka notifikasi asli akan dikirimkan. Singkatnya, metode ini dipanggil saat APNs tiba, Anda dapat memproses konten push, lalu gunakan contentHandler untuk menampilkannya. Jika waktu habis, APNs akan tampil apa adanya. Artinya, Anda dapat memproses notifikasi di metode ini dan mempersonalisasikannya untuk pengguna. Metode kedua adalah solusi darurat jika waktu habis; metode ini dipanggil sebelum waktu habis, Anda dapat melakukan pemrosesan darurat pada pesan APNs.
Integrasi iOS 9
Perubahan iOS 9 yang Mempengaruhi SDK:
- Ditambah format encoding bitCode. Jika SDK tidak mendukung bitCode, pengguna tidak dapat mengaktifkan opsi bitCode saat integrasi.
- Gejala: Setelah integrasi SDK, gagal kompilasi dan log error berisi informasi error bitCode.
- Koneksi default adalah https. Jika request menggunakan http, plist perlu dikonfigurasi manual untuk mendukung layanan http. Saat ini, semua request server EngageLab sudah menggunakan https.
- Gejala: Setelah integrasi SDK, semua layanan http terkait MTPush menampilkan error koneksi atau timeout.
Solusi bitCode
- MTPush iOS SDK v1.8.7 ke atas sudah mendukung bitCode.
Solusi Https
Langkah ini tidak diperlukan untuk MTPush 2.0.0 ke atas
- Tambahkan Dictionary NSAppTransportSecurity ke Info.plist proyek.
- Tambahkan NSAllowsArbitraryLoads tipe Boolean di bawah NSAppTransportSecurity, atur ke YES.
iOS 9 UIUserNotificationActionBehaviorTextInput
Versi Didukung
Tersedia mulai versi v1.8.0.
- Perubahan terbesar pada iOS 9 terkait push adalah perubahan pada tipe Category push. Berdasarkan kategori push sebelumnya, ditambahkan tipe Action teks. Parameter ini digunakan untuk mendaftarkan item input teks pada notifikasi.
- Kategori terdiri dari serangkaian UIUserNotificationCategory. Setiap UIUserNotificationCategory memungkinkan Anda menambah serangkaian UIMutableUserNotificationAction untuk menambah item pada bar notifikasi. Di iOS9, tipe UIMutableUserNotificationAction ditambah tipe input teks (UIUserNotificationActionBehaviorTextInput), diatur melalui properti behavior (khusus iOS9).
- iOS9 menggunakan dua metode callback baru untuk menangani event klik tombol:
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullableNSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0)
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullableNSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0)
Catatan:
- Jika Action adalah UIUserNotificationActionBehaviorTextInput, gunakan responseInfo UIUserNotificationActionResponseTypedTextKey untuk mendapatkan teks yang dimasukkan, UIUserNotificationTextInputActionButtonTitleKey untuk mendapatkan tipe tombol yang diklik.
- Jika Action adalah UIUserNotificationActionBehaviorDefault, responseInfo bernilai nil, gunakan identifier untuk membedakan tombol mana yang diklik.
Pengaturan di Client
Mengatur notifikasi dengan balasan cepat
# ifdef __IPHONE_9_0
UIMutableUserNotificationAction *replyAction = [[UIMutableUserNotificationAction alloc]init];
replyAction.title = @"Balas";
replyAction.identifier = @"comment-reply";
replyAction.activationMode = UIUserNotificationActivationModeBackground;
replyAction.behavior = UIUserNotificationActionBehaviorTextInput;
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc]init];
category.identifier = @"reply";
[category setActions:@[replyAction] forContext:UIUserNotificationActionContextDefault];
# endif
Menggunakan fungsi callback
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler {
if ([identifier isEqualToString:@"comment-reply"]) {
NSString *response = responseInfo[UIUserNotificationActionResponseTypedTextKey];
// Proses teks yang dimasukkan
}
completionHandler();
}
Pengaturan Server
Format konten server: aps menambah field category, ketika field ini cocok dengan identifier UIMutableUserNotificationCategory di client, maka action yang diatur akan dipicu dan tombol akan ditampilkan.
contoh payload:
{"aps":{"alert":"contoh", "sound":"default", "badge": 1, "category":"reply"}}
iOS 8 UILocalNotification
Tiga parameter baru pada UILocalNotification di iOS 8: region, regionTriggersOnce, dan category.
- region: mengontrol kapan pengguna memasuki atau meninggalkan lokasi geografis, notifikasi akan dipicu. Untuk fitur ini, pengguna harus mengizinkan "when-in-use" pada CoreLocation.
- regionTriggersOnce(BOOL): Jika YES, notifikasi hanya dipicu sekali, jika NO, dipicu setiap kali masuk/keluar.
- category: Jika localNotification didaftarkan melalui + [UIUserNotificationSettings SettingsForUserNotificationTypes: userNotificationActionSettings:], melalui category bisa mendapatkan kategori notifikasi yang didaftarkan.
Pengaturan di Client
Penggunaan UILocalNotification
CLLocationCoordinate2D coordinate2D;
coordinate2D.latitude = 100.0;
coordinate2D.longitude = 100.0;
CLRegion *currentRegion =
[[CLCircularRegion alloc] initWithCenter:coordinate2D
radius:CLLocationDistanceMax
identifier:@"test"];
[APService setLocalNotification:[NSDate dateWithTimeIntervalSinceNow:120]
alertBody:@"uji notifikasi ios8"
badge:0
alertAction:@"Batal"
identifierKey:@"1"
userInfo:nil
soundName:nil
region:currentRegion
regionTriggersOnce:YES
category:@"test"];
iOS 8 UIUserNotificationSettings
Versi Didukung
Tersedia mulai versi v1.8.0.
- Perubahan terbesar di iOS 8 terkait push adalah perubahan pada antarmuka pendaftaran push. Parameter category ditambahkan pada tipe push sebelumnya, yang digunakan untuk mendaftarkan serangkaian event tombol pada notifikasi.
- Kategori terdiri dari serangkaian UIUserNotificationCategory. Setiap UIUserNotificationCategory memungkinkan aplikasi merespons notifikasi lokal atau remote. Judul setiap objek akan tampil sebagai judul tombol pada notifikasi. Saat pengguna mengklik tombol, sistem akan memanggil callback di aplikasi application:handleActionWithIdentifier:forRemoteNotification:completionHandler: atau application:handleActionWithIdentifier:forLocalNotification:completionHandler:.
Pengaturan di Client
Menggunakan UIUserNotificationCategory
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
NSMutableSet *categories = [NSMutableSet set];
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
category.identifier = @"identifier";
UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];
action.identifier = @"test2";
action.title = @"uji";
action.activationMode = UIUserNotificationActivationModeBackground;
action.authenticationRequired = YES;
//YES tampil merah, NO tampil biru
action.destructive = NO;
NSArray *actions = @[action];
[category setActions:actions forContext:UIUserNotificationActionContextMinimal];
[categories addObject:category];
}
Menggunakan UIUserNotificationType
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
[APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:categories];
} else {
[APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
}
Menggunakan Fungsi Callback
// Dipanggil saat aplikasi diaktifkan oleh pengguna yang memilih action dari notifikasi remote.
// Nilai action identifier nil adalah action default.
// Harus memanggil completion handler setelah selesai menangani action.
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo
completionHandler:(void (^)())completionHandler {}
Pengaturan di Server
Format konten server: aps menambah field category, ketika field ini cocok dengan identifier UIMutableUserNotificationCategory di client, maka action yang diatur akan dipicu dan tombol akan ditampilkan.
contoh payload:
{"aps":{"alert":"contoh", "sound":"default", "badge": 1, "category":"identifier"}}
iOS 7 Background Remote Notification
Perubahan terbesar pada push di iOS 7 adalah kemampuan menjalankan kode di background setelah aplikasi menerima notifikasi, misal untuk update dari server. Contoh penggunaan: chat multimedia, update email, sinkronisasi konten berbasis notifikasi, meningkatkan pengalaman pengguna.
Perbandingan Remote Notifications dengan rilis sebelumnya bisa dilihat pada dua gambar resmi Apple di bawah ini.


Jika hanya membawa content-available: 1 tanpa parameter badge, sound, dan isi pesan, maka operasi seperti pembaruan konten dapat dilakukan tanpa mengganggu pengguna, disebut "Silent Remote Notifications".

Pengaturan di Client
Aktifkan Remote notifications
Ubah Capabilities aplikasi di Xcode untuk mengaktifkan Remote notifications. Lihat gambar di bawah:

Ubah handler notifikasi
Setelah didaftarkan di Background Modes -> Remote notifications, handler notifikasi akan beralih ke fungsi berikut, di mana kode push background juga dipanggil.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
Pengaturan Push di Server
Pesan push membawa content-available: 1 sebagai parameter wajib untuk menjalankan di Background. Jika field ini tidak dibawa, maka sama seperti push biasa sebelum iOS7.
Push melalui Web Portal
Pada Pengaturan Opsional, pilih parameter terkait.

Push Menggunakan API
Cukup tambahkan field content-available":true pada Push API ios (didukung versi berikutnya)
Batasan dan Perhatian
- "Silent Remote Notifications" memiliki kontrol frekuensi yang tidak ditentukan oleh Apple. Jadi tidak semua "Silent Remote Notifications" akan memicu fungsi di sisi klien sesuai harapan.
- Waktu eksekusi aplikasi dalam mode "Background" terbatas. Jika perlu mengunduh file besar, lihat pengenalan NSURLSession dari Apple.
- Background Remote Notification membutuhkan aplikasi dalam keadaan Background atau Suspended. Jika pengguna menutup aplikasi dari background melalui App Switcher, aplikasi tidak akan bangun untuk memproses kode background.
Untuk detail lebih lanjut, silakan merujuk ke dokumentasi resmi pengembangan iOS dari Apple.










