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*/ }}
package your.package.nameimport androidx.annotation.Keepimport com.onesignal.notifications.INotificationReceivedEventimport com.onesignal.notifications.INotificationServiceExtension@Keepclass NotificationServiceExtension : INotificationServiceExtension { override fun onNotificationReceived(event: INotificationReceivedEvent) { val notification = event.notification val context = event.context notification.actionButtons?.forEach { button -> // Modify action buttons here } }}
通过 userInfo 的 custom 字典中的 a 键,在 OneSignalNotificationServiceExtension 中访问此附加 data:
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)}
if (bestAttemptContent) { NSDictionary *customData = bestAttemptContent.userInfo[@"custom"]; if ([customData isKindOfClass:[NSDictionary class]]) { NSDictionary *additionalData = customData[@"a"]; if ([additionalData isKindOfClass:[NSDictionary class]]) { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:additionalData options:NSJSONWritingPrettyPrinted error:&error]; if (jsonData) { NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSLog(@"The additionalData dictionary in JSON format:\n%@", jsonString); } else { NSLog(@"Failed to convert additionalData to JSON format: %@", error.localizedDescription); } } } NSDictionary *messageData = bestAttemptContent.userInfo[@"aps"]; if ([messageData isKindOfClass:[NSDictionary class]]) { NSDictionary *apsData = messageData[@"alert"]; if ([apsData isKindOfClass:[NSDictionary class]]) { NSString *body = apsData[@"body"]; NSString *title = apsData[@"title"]; if ([body isKindOfClass:[NSString class]] && [title isKindOfClass:[NSString class]]) { NSLog(@"The message content is: %@, message heading is: %@", body, title); } } else { NSLog(@"Unable to retrieve apsData"); } } [OneSignalExtension didReceiveNotificationExtensionRequest:self.receivedRequest withNotification:bestAttemptContent withContentHandler:self.contentHandler];}
控制台输出示例:
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