Uygulamanızda iOS ve Android bildirim servis eklentilerini uygulayın.
Notification Service Extension’lar, kullanıcıya gösterilmeden önce push bildirimlerini kesintiye uğratmanıza ve değiştirmenize olanak tanır. Bu; arka plan veri işleme, özel stiller, zengin medya ekleri, onaylanmış teslimat ve eylem düğmesi seçeneklerini etkinleştirir.
OneSignal’den gönderilen push bildirimlerinizdeki verilere OSNotification sınıfı aracılığıyla erişebilirsiniz
Kullanıcıya gösterilmeden önce bildirimi işlemenize olanak tanır. Yaygın kullanım durumları şunlardır:
Bir bildirim göstererek veya göstermeden arka planda veri alın.
Özel vurgu rengi, titreşim deseni veya mevcut diğer NotificationCompat seçenekleri gibi istemci tarafı uygulama mantığına bağlı olarak belirli bildirim ayarlarını geçersiz kılın.
INotificationServiceExtension’ı uygulayan bir sınıf oluşturun ve onNotificationReceived yöntemini uygulayın.onNotificationReceived yöntemi parametresi, INotificationReceivedEvent türünde event’tir.
package your.package.nameimport androidx.annotation.Keep;import com.onesignal.notifications.IActionButton;import com.onesignal.notifications.IDisplayableMutableNotification;import com.onesignal.notifications.INotificationReceivedEvent;import com.onesignal.notifications.INotificationServiceExtension;@Keep // Keep is required to prevent minification from renaming or removing your classpublic class NotificationServiceExtension implements INotificationServiceExtension { @Override public void onNotificationReceived(INotificationReceivedEvent event) { IDisplayableMutableNotification notification = event.getNotification(); if (notification.getActionButtons() != null) { for (IActionButton button : notification.getActionButtons()) { // you can modify your action buttons here } } /* Add customizations here. See examples below for additional methods to modify the notification*/ }}
@Keep anotasyonu, ProGuard veya R8’in minifikasyon sırasında sınıfınızı yeniden adlandırmasını veya kaldırmasını önlemek için gereklidir.
Aşağıdaki örnekler, Notification Service Extension sınıfında uygulayabileceğiniz yaygın özelleştirmeleri göstermektedir.
Bildirimin görüntülenmesini önleme
Özel alan ekleme
Bildirim rengini ve simgesini değiştirme
Bildirimin görüntülenmesini engellemek için event.preventDefault() kullanın. Daha sonra görüntülemek için event.getNotification().display() çağırabilir ya da sessizce atmak için hiç çağırmayabilirsiniz.
event.preventDefault();//Do some async work, then decide to show or dismissnew Thread(() -> { try { Thread.sleep(1000); } catch (InterruptedException ignored) {} //Manually show the notification event.getNotification().display();}).start();
event.preventDefault() çağrılıp display() hiç çağrılmazsa bildirim sessizce atılır. Daha fazla bilgi için Yinelenen bildirimler sayfasına bakın.
Adım 3: Servis uzantısını AndroidManifest.xml’inize ekleyin
Sınıf adını ve değerini AndroidManifest.xml dosyasında application etiketi içinde meta-data olarak ekleyin. Herhangi bir “kullanılmayan” uyarısını yoksayın.
UNNotificationServiceExtension, push bildirimlerinin kullanıcıya gösterilmeden önce içeriğini değiştirmenize olanak tanır ve şunlar gibi diğer önemli özellikler için gereklidir:
Uygulamanız için Mobile SDK kurulum talimatlarımızı izlediyseniz muhtemelen bunu zaten kurmuşsunuzdur, ancak bu bölüm OneSignal bildirim yükü verilerine nasıl erişeceğinizi ve karşılaşabileceğiniz sorunları nasıl gidereceğinizi açıklayacaktır.
didReceive(_:withContentHandler:) override’ı, bestAttemptContent’i görüntülenmeden önce OneSignal’e ileten OneSignalExtension.didReceiveNotificationExtensionRequest’i çağırır. Bu yöntem çağrılmadan önce bestAttemptContent’i okuyabilir veya değiştirebilirsiniz.Bu örnekte, aşağıdaki verilerle bir bildirim gönderiyoruz:
Bu ek data’ya OneSignalNotificationServiceExtension içinde userInfo’nun custom sözlüğündeki a anahtarı aracılığıyla erişin:
if let bestAttemptContent = bestAttemptContent { if let customData = bestAttemptContent.userInfo["custom"] as? [String: Any], let additionalData = customData["a"] as? [String: Any] { if let jsonData = try? JSONSerialization.data(withJSONObject: additionalData, options: .prettyPrinted), let jsonString = String(data: jsonData, encoding: .utf8) { print("The additionalData dictionary in JSON format:\n\(jsonString)") } else { print("Failed to convert additionalData to JSON format.") } } if let messageData = bestAttemptContent.userInfo["aps"] as? [String: Any], let apsData = messageData["alert"] as? [String: Any], let body = apsData["body"] as? String, let title = apsData["title"] as? String { print("The message contents is: \(body), message headings is: \(title)") } else { print("Unable to retrieve apsData") } OneSignalExtension.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent, withContentHandler: self.contentHandler)}
Örnek konsol çıktısı:
The additionalData dictionary in JSON format:{ "additional_data_key_1" : "value_1", "additional_data_key_2" : "value_2"}The message contents is: The message contents, message headings is: The message title
Ana uygulama hedefi > Build Phases > Embed App Extensions’ı seçin. “Copy only when installing”in işaretlenmediğinden emin olun. Eğer işaretliyse işareti kaldırın:
NotificationService.m veya NotificationService.swift’i açın ve tüm dosya içeriğini aşağıdaki kodla değiştirin. Bu, uzantının çalışıp çalışmadığını doğrulamaya yardımcı olmak için günlükleme ekler.YOUR_BUNDLE_ID’yi gerçek Bundle ID’nizle değiştirin.
iOS’ta bildirim servis uzantım neden çalışmıyor?Uzantı yalnızca bildirim yükünde mutable-content ayarlandığında çalışır. OneSignal, ekler veya eylem düğmeleri içeren bildirimler için bunu otomatik olarak ayarlar. Xcode ayarlarınızın sorun giderme bölümüyle eşleştiğini doğrulayın.Android’de bir bildirimin görüntülenmesini engelleyebilir miyim?Evet. Görüntülemeyi engellemek için event.preventDefault() çağırın. Daha sonra görüntülemek için event.getNotification().display() çağırın ya da sessizce atmak için hiç çağırmayın. Daha fazla bilgi için Yinelenen bildirimler sayfasına bakın.Android’de @Keep anotasyonuna ihtiyacım var mı?Evet. ProGuard veya R8’in minifikasyon sırasında INotificationServiceExtension’ı uygulayan sınıfınızı yeniden adlandırmasını veya kaldırmasını önler.