web-dev-qa-db-ja.com

iOS 10の通知で通知サービス拡張を使用する方法

Appleは新しい拡張名 "UNNotificationServiceExtension" を導入していますが、プッシュ通知から起動する方法はありますか?

私は、サービス拡張がペイロードにエンドツーエンドの暗号化を提供することを読みました。

プッシュ通知のペイロードを設定するにはどのキーが必要ですか?

ペイロードを識別し、プッシュ通知からサービス拡張を起動する方法は?

13
technerd

少しずつ見ていきましょう。

NNotificationServiceExtension-それは何ですか?

UNNotificationServiceExtensionは、ユーザーにレンダリングする前にデバイスに配信されるプッシュ通知を変更することを目的として、アプリと一緒にバンドルするアプリ拡張ターゲットです。タイトル、サブタイトル、本文を変更し、添付ファイルをダウンロードするか、アプリにバンドルされているものを使用して、プッシュ通知に添付ファイルを追加できます。

作成方法

[ファイル]-> [新規]-> [ターゲット]-> [通知サービス拡張]に移動し、詳細を入力します

プッシュ通知のペイロードを設定するにはどのキーが必要ですか?

サービス拡張をトリガーするには、mutable-contentフラグを1に設定する必要があります。 また、content-available1に設定されている場合、サービス拡張は機能しません。したがって、設定しないか、0に設定してください。 (編集:これは該当しません。content-availableフラグを設定または設定解除できます)

ペイロードを識別する方法とプッシュ通知からサービス拡張を起動する方法

拡張機能をビルドしてから、アプリをビルドして実行します。 mutable-content1に設定してプッシュ通知を送信します。

コード

UNNotificationServiceは2つの関数を公開します。

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
               withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler;

- (void)serviceExtensionTimeWillExpire;

最初の機能は、デバイスでプッシュ通知が受信されたときに、ユーザーに提示される前にトリガーされます。関数内のコードには、この関数内のプッシュ通知の内容を変更する機会があります。

これを行うには、拡張機能のbestAttemptContentプロパティを変更します。これは、UNNotificationContentのインスタンスであり、次のプロパティがあります:titlesubtitlebodyattachmentsなど.

リモート通知の元のペイロードは、関数パラメーターrequestrequest.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では認識されないことに注意してください。

33
mickeymoon

通知サービス拡張機能は、通知データからコンテンツをダウンロードし、画像やその他のコンテンツなどの通知に表示するのに非常に役立ちます。また、アプリケーションがバックグラウンドモードまたは非アクティブ(強制終了)のときに、通知サービス拡張を使用してコードを実行することもできます。

ここ は、通知サービス拡張の使用方法の段階的なガイドラインです。そして、あなたは github からデモを入手しました。

1
Bera Bhavin