WWDC Quick Look 💓 By SwiftGGTeam
Streamline your App Clip

Streamline your App Clip

元の動画を見る

ハイライト

Appleは、位置確認、8時間の一時通知許可、SKOverlay、安全なアプリグループを使用して、QRコードのスキャンや最初の呼び出しから完全なアプリまでの注文など、App Clipのトランザクションプロセスを拡張する方法を示しました。

主要内容

App Clipの価値は臨場感にあります。ユーザーが店舗で NFC タグまたは QR コードをスキャンするとき、通常行うことは 1 つだけです。それは、メニューを読み取り、支払いをし、商品を受け取ることです。完全なアプリのアカウント センター、設定ページ、複雑なナビゲーションをこのシナリオに組み込むと、タスクの完了が遅くなるだけです。

このセッションでは、Fruta のスムージー注文プロセスを使用して問題を説明します。最適化を行わないと、ユーザーが QR コードをスキャンして App Clip に入った後も、位置決め権限、通知権限、支払い、登録、またはログインを処理する必要があります。すべてのステップは合理的ですが、それらが一緒になると摩擦になります。

Apple が提供する解決策は、許可リクエストを App Clip Card とシステム機能に移動することです。位置確認では、物理コードが指定されたエリア内で取得されたかどうかのみが返され、完全な位置は明らかにされません。 App Clip 通知では、各起動後最大 8 時間まで一時的な通知許可を提供できます。 Apple Pay は支払いを担当し、Sign in with Apple とセキュア アプリ グループは ID を完全なアプリに拡張する責任を負います。

これは構築方法のトレードオフでもあります。 App Clip は、現在のタスクを完了するために必要なリソースのみを提供し、起動するとすぐに利用できるようにする必要があります。共有アセットは共有アセット カタログに配置でき、共有クラスとローカライズされた文字列はアプリとアプリ クリップ間で再利用できます。アカウントの作成などの重いタスクは、トランザクションが完了するまで、またはユーザーが完全なアプリをインストールするまで放置されます。

詳細

位置確認による物理コードトランザクションの保護

(07:53) 物理コードは、ユーザーを App Clip エクスペリエンスに導きます。問題は、コードが間違ったストアに投稿されたり、悪意を持って置き換えられたりする可能性があることです。 App Clipの位置確認APIは、アプリケーション側で「このコードが想定したエリアで取得できているかどうか」を検証するもので、返される結果はYes/Noの判定になります。

import AppClip

guard let payload = userActivity.appClipActivationPayload else {
    return
}

let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: 37.3298193,
    longitude: -122.0071671), radius: 100, identifier: "apple_park")

payload.confirmAcquired(in: region) { (inRegion, error) in

}

キーポイント:

  • userActivity.appClipActivationPayloadApp Clip からコンテキストを呼び出します。 -CLCircularRegion物理コードが表示される位置範囲を記述します。セッションでは、半径が最大 500 メートルになる可能性があると述べています。 -confirmAcquired(in:)この領域でペイロードが取得できているかどうかだけを確認してください。 -inRegionfalse の場合、支払いがブロックされるか、ユーザーがストアを確認するように促されることがあります。

App Clip Card の一時的な通知の承認を確認します。

(09:24) App Clip はカード上で一時的な通知許可をリクエストできます。ユーザーが同意すると、App Clip は起動するたびに最大 8 時間通知を提供できます。これは、注文完了、受け取りリマインダー、キューのステータスなどの短いライフサイクル メッセージに適しています。

import UserNotifications

let center = UNUserNotificationCenter.current()

center.getNotificationSettings { (settings) in
   if settings.authorizationStatus == .ephemeral {
        // User has already granted ephemeral notification.
    }

}

キーポイント:

  • UNUserNotificationCenter.current()現在の通知設定を読み取ります。 -.ephemeralApp Clipの一時通知許可ステータスです。
  • 一時的な認可を取得した場合、アプリケーションは通常の通知許可要求をポップアップする必要はありません。
  • 長期的な通知関係の場合、必要に応じて一般的な通知権限を要求できます。

タスク完了後に SKOverlay を表示

(10:49) ユーザーが支払いを完了したら、完全なアプリのインストールをガイドする良い機会になります。ストアキットSKOverlay.AppClipConfigurationApp Store の入り口を App Clip ビューに埋め込むことができます。 Session では、支払い確認ページの近くに配置することを推奨しています。

import SwiftUI
import StoreKit

struct ContentView : View {
    @State private var finishedPaymentFlow = false

    var body: some View {
        NavigationView {
            CheckoutView($finishedPaymentFlow)
        }
        .appStoreOverlay(isPresented: $finishedPaymentFlow) {
            SKOverlay.AppClipConfiguration(position: .bottom)
        }
    }
}

キーポイント:

  • finishedPaymentFlowユーザーが支払いプロセスを完了したかどうかを示します。 -.appStoreOverlay(isPresented:)オーバーレイの表示タイミングはSwiftUIの状態制御にお任せします。 -SKOverlay.AppClipConfiguration(position: .bottom)App Clip 固有の設定を使用します。
  • オーバーレイは注文プロセスを中断せず、確認ページで完全なアプリをインストールするようユーザーに促すのに適しています。

ログインステータスを完全なアプリに移行する

(11:32) App Clip が完全な App に置き換えられると、少量のユーザー データが安全な App グループを介して渡される可能性があります。セッション方法はApp ClipのSign in with Appleを利用します。成功した後は、credential.user共有グループコンテナに保存します。

// Automatically log in with Sign in with Apple
import AuthenticationServices

SignInWithAppleButton(.signUp, onRequest: { _ in
}, onCompletion: { result in
    switch result {
    case .success(let authorization):
        guard let secureAppGroupURL =
            FileManager.default.containerURL(forSecurityApplicationGroupIdentifier:
                "group.com.example.apple-samplecode.fruta")
            else { return };
        guard let credential = authorization.credential as? ASAuthorizationAppleIDCredential
            else { return }
        save(userID: credential.user, in: secureAppGroupURL)
    case .failure(let error):
        print(error)
   }
})

キーポイント:

  • SignInWithAppleButtonApp Clip内で登録またはログインを完了します。 -containerURL(forSecurityApplicationGroupIdentifier:)アプリ クリップと完全なアプリ共有可能なコンテナを入手します。 -ASAuthorizationAppleIDCredential安定したものを提供するuserロゴ。
  • ここにはユーザー ID のみが保存され、完全なアプリの起動後に資格情報のステータスを再度検証する必要があります。

(11:55) 完全なアプリが初めて起動された後、同じグループ コンテナー内のユーザー ID を読み取り、次を使用します。ASAuthorizationAppleIDProvider資格情報がまだ有効であることを確認します。検証に合格すると、アプリケーションはユーザーのコレクション、特典、または注文履歴を復元できます。

import AuthenticationServices

let provider = ASAuthorizationAppleIDProvider()
guard let secureAppGroupURL =
    FileManager.default.containerURL(forSecurityApplicationGroupIdentifier:
        "group.com.example.apple-samplecode.fruta")
    else { return };
let user = readUserID(in: secureAppGroupURL)
provider.getCredentialState(forUserID: user) { state, error in
    if state == .authorized {
       loadFavoriteSmoothies(userID: user)
   }
}

キーポイント:

  • 完全なアプリは、App Clip が書き込むのと同じ安全なアプリ グループを読み取ります。 -ASAuthorizationAppleIDProviderユーザー ID の認証ステータスをチェックする責任を負います。 -state == .authorized次に、ユーザー関連のデータをロードします。
  • このプロセスにより、ユーザーは App Clip から完全なアプリをインストールした後、ログイン状態に直接戻ることができます。

重要ポイント

1.ストアの QR コードに前払い認証を追加します

対処法: App Clip で食事、駐車場、レンタル用品などを注文するときは、支払い前に送金が合法な地域で行われたかどうかを確認してください。

実行する価値がある理由: Session の Fruta の例は、QR コードを置き忘れたり置き換えたりすると、ユーザーが間違った店舗に連れて行かれてしまうことを示していますが、完全な位置情報の許可を要求しなくても、位置確認によってリスクを遮断できることがわかります。

開始方法: App Clip の Info.plist で位置確認を有効にし、アクティベーション ペイロードを解析し、ストア構成に従って生成します。CLCircularRegion、次に使用しますconfirmAcquired(in:)支払いを解除するかどうかを決定します。

2.短いライフサイクル メッセージを App Clip 通知に変更

対処方法: ピックアップ、キュー、ウォークイン、および 1 回限りの予約について 8 時間分の通知を送信します。

実行する価値がある理由: ユーザーは「フルーツシェイクの準備ができた」または「駐車スペースの有効期限が近づいている」ことだけを知る必要があり、通常の通知権限では重すぎます。一時的な承認は、そのような緊急のタスクをカバーできます。

開始方法: App Clip Card で一時的な通知をリクエストし、起動後に使用しますgetNotificationSettings診る.ephemeral、長期的な関係が必要な場合にのみ、一般的な通知権限をリクエストしてください。

3.タスクが完了したら、完成したアプリをインストールします

対処方法: ユーザーが正常に支払い、バウチャーを受け取るか、予約を完了した後、次のコマンドを使用します。SKOverlayフルアプリのインストールを求めるプロンプトが表示されます。

実行する価値がある理由: Session は、ユーザーがタスクを完了した後 (支払い確認ページの横など) にオーバーレイを配置することを明確に推奨しています。この時点で、ユーザーは価値を獲得し、アプリ全体をより受け入れやすくなります。

開始方法: トランザクション完了ステータスをバインドするappStoreOverlay(isPresented:)、使用SKOverlay.AppClipConfiguration(position: .bottom)、タスクが開始される前にプロセスが中断されるのを避けるため。

4. App Clip ログインを完全なアプリに自然に移行させます

機能: ユーザーが App Clip で「Apple でサインイン」を使用してサインインした後、完全なアプリがインストールされると、ユーザーの ID が自動的に復元されます。

実行する価値がある理由: App Clip が完全な App に置き換えられると、安全な App グループが完全な App に転送されます。ユーザーは、特典、コレクション、注文履歴を確認するために再度ログインする必要はありません。

開始方法: ログインに成功した後、App Clipcredential.userグループコンテナに書き込みます。完全なアプリの起動時にこの値を読み取り、使用しますgetCredentialState(forUserID:)認証後にアカウントデータをロードします。

関連セッション

  • Explore App Clips — App Clip の入門セッションで、中心となるタスク、シナリオのトリガー、App Clip と完全なアプリの関係について説明します。
  • App Clip の構成とリンク — App Clip コード、NFC、QR コード、ユニバーサル リンク、関連ドメイン、および App Store Connect の構成について説明します。
  • 優れた App Clip をデザインする - デザインの観点から見た、高速で集中的、低摩擦の App Clip プロセスの内訳と、アプリ全体をダウンロードするためのガイド。
  • アプリ内購入の新機能 — StoreKit、SKOverlay、App Store サーバー通知、SKAdNetwork などの購入および変換機能を追加します。
  • Apple でサインインを最大限に活用する - Apple でサインインの承認リクエスト、資格情報ステータスの確認、アカウント移行について詳しく説明します。

コメント

GitHub Issues · utterances