kumamotone’s blog

iOS/Android アプリエンジニアです https://twitter.com/kumamo_tone

App Clips の短期間通知を有効にする

kumamotone.hatenadiary.jp

上記の続きになります。

App Clips の短期間通知を有効にする

App Clipの中には、価値を提供するためにスケジュールや通知を送る必要があるものもあります。

配達で食べ物を注文できるApp Clipを考えてみましょう。通知を送信することで、App Clipは予定されている配達についてユーザーに通知します。

通知がApp Clipの機能にとって重要な場合は、各起動後最大8時間まで通知をスケジュールまたは受信できるようにします。さらに、複数のビジネス向けにApp Clipを作成する場合は、通知のペイロードに変更を加えるようにしましょう。

一時的な通知の設定

App Clipが起動後、最大8時間まで通知をスケジュールしたり受信したりできるようにするには、まず、App ClipのInfo.plistファイルにDictionary型のNSAppClipキーを追加します。

次に、NSAppClipRequestEphemeralUserNotificationというキーを持つエントリをDictionaryに追加します。このキーの型はBooleanに、値をtrueに設定します。

f:id:kumamotone:20200625065245p:plain
https://developer.apple.com/documentation/app_clips/enabling_notifications_in_app_clips

App Clipの Info.plist に NSAppClipRequestEphemeralUserNotification のエントリを追加すると、App Clipの起動時に表示されるClip Cardには、App Clipが通知を受信したりスケジュールしたりすることができることをユーザーに知らせる追加のnoteが含まれています。

この権限はデフォルトで有効になっていますが、ユーザーはClip Cardのnoteをタップすることで無効にすることができます。

f:id:kumamotone:20200625065309p:plain
https://developer.apple.com/documentation/app_clips/enabling_notifications_in_app_clips

ユーザーはClip Cardで通知を無効にすることができるので、App Clipが通知をスケジュールして受信する権限を持っているかどうかをチェックするコードを追加します。

以下のコードは、ユーザーが短時間の通知送信の許可を与えているかどうかをチェックしています。

let center = UNUserNotificationCenter.current()
center.getNotificationSettings { (settings) in {
    if settings.authorizationStatus == .ephemeral {

        // ユーザーがアプリのクリップカードで通知を無効にしていなかった場合
        // ここにスケジュールや通知を受信するためのコードを追加します
        return
    }
}

通知を送信するための明示的な許可を要求する

App Clipの機能が1日以上に及ぶ場合は、通知を送信するためのユーザーの許可を明示的に要求します。

例えば、レンタカー会社のApp Clipでは、レンタカーを返却する必要があるときにユーザーに通知を送信する許可を求めることができます。

しかし、この許可を求めるべきかどうかは慎重に検討してください。ユーザーはこの要求を拒否して、App Clipが各起動後最大8時間まで通知を受信してスケジュールする能力を上書きしてしまう可能性があります。

通知ペイロードを変更する

複数のビジネス向けのApp Clipを作成することができます。

例えば、飲食店向けのプラットフォームを提供している企業で、多くの異なる飲食店にサービスを提供するApp Clipを作成することができます。

ユーザーが短時間のうちに複数のビジネス向けのApp Clipを連続して起動した場合、App Clipのインスタンスがデバイス上に複数存在することがあります。

この場合、システムは、通知を受信すると、適切なApp Clipのインスタンスに通知をルーティングする必要があります。

その結果、システムは通知のペイロードに URL をtarget content identifierとして含めることを要求します。

次のコードは、複数のビジネスにサービスを提供するApp Clipの通知ペイロードを示しています。

{
    "aps" : {
        "alert" : {
            "title" : "Order Status",
            "subtitle" : "Restaurant A",
            "body" : "Your order is ready."
        },
        "category" : "order_status",
        "target-content-id" : "https://example.com/restaurants/restaurant_a/order/1234"
    }
} 

target-content-id の値は、対応するAdvanced App Clip Experienceに一致するURLである必要があります。

レストランの例では、これらのURLの両方をApp Store Connectに登録します。

呼び出しURLとtarget content identifiersは、次のようになります。

一般的に、可能な限り具体的なtarget content identifiersを使用します。

同様に、ローカル通知をスケジュールするためにApp Clipを有効にする場合は、通知のペイロードにtarget content identifiersを設定します。

詳細については、App Clipsの起動方法の設定Generating a Remote Notification Scheduling a Notification Locally from Your App を参照してください。

出典