最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

ios - Notification Service Extension can't edit notifications - Stack Overflow

programmeradmin0浏览0评论

i have added Notification Service Extension to my project and want to edit the notifications after they arrived to the application:

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        
        if let bestAttemptContent = bestAttemptContent {
            // Modify the notification content here...
            bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
            bestAttemptContent.body = "\(bestAttemptContent.body) [modified]"
            
            contentHandler(bestAttemptContent)
        }
    }
    
    override func serviceExtensionTimeWillExpire() {
        // Called just before the extension will be terminated by the system.
        // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}

this is how I call notifications(for testing):

var apn = require('apn');

var apnProvider = new apn.Provider({  
  token: {
    key: '*****.p8',
    keyId: '*******',
    teamId: '*******'
  },
  production: false
});

var deviceToken = '*******';

var notification = new apn.Notification();

notification.topic = '*******';
notification.expiry = Math.floor(Date.now() / 1000) + 3600;
notification.badge = 1;
notification.sound = 'Notification_1.wav';

notification.mutableContent = true;
notification.alert = {
  title: "This is the title",
  body: "This is the body"
};

notification.payload = {
  type: "*******",
  from: "*******",
  groupId: "*******",
  fetchData: {
    id: "*******",
    type: "*******"
  }
};

console.log(notificationpile());

apnProvider.send(notification, deviceToken).then(function(result) {
  console.log(JSON.stringify(result, null, 2));
  process.exit(0);
});

The problem is that I can't see the [modified] text in the notification. Do you have any idea what the problem is or what can cause it?

i have added Notification Service Extension to my project and want to edit the notifications after they arrived to the application:

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        
        if let bestAttemptContent = bestAttemptContent {
            // Modify the notification content here...
            bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
            bestAttemptContent.body = "\(bestAttemptContent.body) [modified]"
            
            contentHandler(bestAttemptContent)
        }
    }
    
    override func serviceExtensionTimeWillExpire() {
        // Called just before the extension will be terminated by the system.
        // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}

this is how I call notifications(for testing):

var apn = require('apn');

var apnProvider = new apn.Provider({  
  token: {
    key: '*****.p8',
    keyId: '*******',
    teamId: '*******'
  },
  production: false
});

var deviceToken = '*******';

var notification = new apn.Notification();

notification.topic = '*******';
notification.expiry = Math.floor(Date.now() / 1000) + 3600;
notification.badge = 1;
notification.sound = 'Notification_1.wav';

notification.mutableContent = true;
notification.alert = {
  title: "This is the title",
  body: "This is the body"
};

notification.payload = {
  type: "*******",
  from: "*******",
  groupId: "*******",
  fetchData: {
    id: "*******",
    type: "*******"
  }
};

console.log(notificationpile());

apnProvider.send(notification, deviceToken).then(function(result) {
  console.log(JSON.stringify(result, null, 2));
  process.exit(0);
});

The problem is that I can't see the [modified] text in the notification. Do you have any idea what the problem is or what can cause it?

Share Improve this question asked Mar 30 at 16:01 YosiFZYosiFZ 7,91023 gold badges119 silver badges230 bronze badges
Add a comment  | 

1 Answer 1

Reset to default -1

try

if let content = bestAttemptContent {
    content.title = "\(bestAttemptContent.title) [modified]"
    content.body = "\(bestAttemptContent.body) [modified]"
    contentHandler(content)
}
发布评论

评论列表(0)

  1. 暂无评论