Appleは新しい拡張名 "UNNotificationServiceExtension" を導入していますが、プッシュ通知から起動する方法はありますか?
私は、サービス拡張がペイロードにエンドツーエンドの暗号化を提供することを読みました。
プッシュ通知のペイロードを設定するにはどのキーが必要ですか?
ペイロードを識別し、プッシュ通知からサービス拡張を起動する方法は?
少しずつ見ていきましょう。
NNotificationServiceExtension-それは何ですか?
UNNotificationServiceExtensionは、ユーザーにレンダリングする前にデバイスに配信されるプッシュ通知を変更することを目的として、アプリと一緒にバンドルするアプリ拡張ターゲットです。タイトル、サブタイトル、本文を変更し、添付ファイルをダウンロードするか、アプリにバンドルされているものを使用して、プッシュ通知に添付ファイルを追加できます。
作成方法
[ファイル]-> [新規]-> [ターゲット]-> [通知サービス拡張]に移動し、詳細を入力します
プッシュ通知のペイロードを設定するにはどのキーが必要ですか?
サービス拡張をトリガーするには、mutable-content
フラグを1
に設定する必要があります。 また、 (編集:これは該当しません。content-available
が1
に設定されている場合、サービス拡張は機能しません。したがって、設定しないか、0に設定してください。content-available
フラグを設定または設定解除できます)
ペイロードを識別する方法とプッシュ通知からサービス拡張を起動する方法
拡張機能をビルドしてから、アプリをビルドして実行します。 mutable-content
を1
に設定してプッシュ通知を送信します。
コード
UNNotificationServiceは2つの関数を公開します。
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler;
- (void)serviceExtensionTimeWillExpire;
最初の機能は、デバイスでプッシュ通知が受信されたときに、ユーザーに提示される前にトリガーされます。関数内のコードには、この関数内のプッシュ通知の内容を変更する機会があります。
これを行うには、拡張機能のbestAttemptContent
プロパティを変更します。これは、UNNotificationContent
のインスタンスであり、次のプロパティがあります:title
、subtitle
、body
、attachments
など.
リモート通知の元のペイロードは、関数パラメーターrequest
のrequest.content
プロパティを介して配信されます。
最後に、contentHandlerを使用してbestAttemptContentをディスパッチします。
self.contentHandler(self.bestAttemptContent);
最初の方法で作業を行う時間は限られています。その時間が経過した場合、2番目のメソッドは、コードがこれまでに行った最善の試みで呼び出されます。
サンプルコード
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// Modify the notification content here...
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
self.contentHandler(self.bestAttemptContent);
}
上記のコードは、PNペイロードの元のタイトルに[変更]を追加します。
サンプルペイロード
{
"aps": {
"alert": {
"title": "Hello",
"body": "body.."
},
"mutable-content":1,
"sound": "default",
"badge": 1,
},
"attachment-url": ""
}
attachment-url
キーは独自の懸念事項のためのカスタムキーであり、iOSでは認識されないことに注意してください。