WWDC Quick Look 💓 By SwiftGGTeam
Meet the Location Button

Meet the Location Button

元の動画を見る

ハイライト

iOS 15 では CLLocationButton が導入されています。ユーザーは、従来のシステム許可ポップアップ ウィンドウを経由せずに、ボタンをクリックしてアプリケーションに 1 回限りの位置認証を与えることができ、「時折測位のみが必要な」シナリオでのユーザー エクスペリエンスの負担を軽減できます。

主要内容

多くのアプリケーションは、特定の瞬間にユーザーの位置を 1 回取得するだけで済みます。近くの公園を検索し、最寄りの店舗を確認し、チェックインして打刻する - これらのシナリオでは、ユーザーの動きを継続的に追跡する必要はありません。

ただし、従来の位置認証プロセスは、これらのシナリオには適していません。アプリを起動するとすぐに許可リクエストがポップアップ表示されます。ユーザーには、「使用中は許可する」、「一度のみ許可する」、「許可しない」の 3 つの選択肢が表示されます。アプリが位置データをどのように使用するかわからないため、拒否することを選択することがよくあります。 「許可しない」をクリックすると、それ以降のアプリケーションの位置情報機能はすべて使用できなくなり、ユーザーは設定に移動して手動で位置情報機能をオンにする必要があります。

iOS 15 の CLLocationButton はこのフローを変更します。

開発者は、ユーザーが位置情報を明示的に必要とするインターフェイスの横に、「近くの公園を探す」ボタンなどのボタンを配置します。ユーザーがクリックすると、システムは 1 回限りの許可を直接付与し、アプリケーションはすぐに位置データを取得します。邪魔なポップアップウィンドウもなく、ユーザーの心理的負担も少ない。

このボタンは、ユーザーがこれが位置関連の操作であることを認識できるように、システムによって標準の位置矢印アイコンと「現在の位置」ラベルが表示されます。ステータス バーの位置矢印が一時的に青色に変わり、ユーザーが位置情報へのアクセスを承認したことを示します。

以前に「許可されない」を選択したユーザーの場合、位置情報ボタンをクリックするとガイド付きプロンプトがトリガーされ、アプリのステータスを「未決定」にリセットし、位置情報ボタンを使用して位置情報を再度取得する機会がユーザーに与えられます。これにより、誤って強制終了されたアプリケーションに「復活」する機会が与えられます。

watchOS 8 では、地域ベースのユーザー通知も追加されています。これにより、ユーザーが特定の場所に到着したときに、「常に」位置認証を必要とせずにアプリケーションが通知をプッシュできるようになります。

詳細

UIKit の CLLocationButton

(04:09) CLLocationButton は CoreLocationUI フレームワークに属し、UIControl から継承し、通常の UIButton と同様に使用されます。

4 つの排他的な属性:

  • icon: 矢印の種類を設定します (arrowFilledarrowOutline
  • label:ボタンラベルの設定(.currentLocation.sendCurrentLocation.none
  • cornerRadius: フィレットサイズ
  • fontSize:ラベルのフォントサイズ

UIButton から CLLocationButton への移行の比較:

// 原来的 UIButton 方式
let button = UIButton()
button.setTitle("Current Location", for: .normal)
button.addTarget(self, action: #selector(showNearbyParks), for: .touchUpInside)

func showNearbyParks() {
    locationManager.requestWhenInUseAuthorization()
    locationManager.startUpdatingLocation()
    // ... 渲染地图
}
// 新的 CLLocationButton 方式
let locationButton = CLLocationButton()
locationButton.label = .currentLocation
locationButton.addTarget(self, action: #selector(showNearbyParks), for: .touchUpInside)

func showNearbyParks() {
    // 不需要再调用 requestWhenInUseAuthorization
    // 点击按钮时系统自动授予一次性授权
    locationManager.startUpdatingLocation()
    // ... 渲染地图
}

キーポイント:

  • UIButtonの代わりにCLLocationButtonを作成します
  • 設定labelプロパティはボタンのテキストを定義します
  • もう電話は必要ありませんrequestWhenInUseAuthorization、ボタンをクリックすると自動的に認証が処理されます
  • その他のビジネス ロジックは変更されません。

SwiftUI の LocationButton

(06:30) SwiftUI はネイティブの LocationButton を提供します。

import CoreLocationUI

struct ParkFinderView: View {
    @StateObject var locationManager = LocationManager()

    var body: some View {
        LocationButton(.currentLocation) {
            locationManager.requestLocation()
        }
        .symbolVariant(.fill)
        .tint(.blue)
    }
}

キーポイント:

  • LocationButtonSwiftUI のネイティブ ビューです
  • 最初のパラメータはラベルのタイプで、クロージャはクリック後のビジネス ロジックです。
  • .symbolVariant(.fill)実線の矢印アイコンを設定します
  • .tint(.blue)ボタンの背景色を設定する

カスタムスタイルと制限事項

(06:53) CLLocationButton はカスタムの外観をサポートしていますが、システムは読みやすさをチェックします。

let button = CLLocationButton()
button.icon = .arrowFilled
button.tintColor = .black
button.backgroundColor = .white
button.cornerRadius = 25.0

キーポイント:

  • デフォルトのスタイル: 白いテキスト、青い背景、「現在の場所」ラベル
  • 前景色、背景色、角の丸さを変更できます
  • 幅と高さが等しく、cornerRadiusが幅の半分の場合、丸いボタンが得られます

以下の場合、システムは認証をブロックし、ログを出力します。

  • ボタンのサイズが小さすぎるか、テキストがボタンの範囲を超えています
  • 透明度(アルファ)が低すぎるため、可読性に影響します
  • 前景色と背景色のコントラストが不十分です

Xcode の Issue Navigator は、開発者のデバッグを容易にするために、これらの可読性の問題をリアルタイムで表示します。

認証ステータスの対話

(10:55) ロケーション ボタンが既存の認証ステータスに及ぼす影響:

現在の認可ステータスロケーションボタン使用後の動作
未決定最初のクリック時に確認プロンプトが表示され、その後のクリックごとに 1 回限りの認証が直接付与されます。
使用中既存の認証には影響せず、通常のボタンと同じように動作します。
許可しないでくださいクリックするとブート プロンプトが表示され、ステータスを NotDetermined

キーポイント:

  • ロケーションボタンは基本的に 1 回限りの許可です
  • ユーザーにはプライバシー設定に「共有するとき」オプションが表示されます
  • すでに「使用期間」権限を持っているアプリケーションには影響しません
  • 永久に拒否されたアプリは、ロケーションボタンを使用して「復活」できます

重要ポイント

  • 近くの検索機能の最適化: 「近くのレストラン/ガソリン スタンド/充電スタンドを見つける」というシナリオでは、CLLocationButton を使用して従来の認証ポップアップ ウィンドウを置き換えます。ユーザーがボタンをクリックしたときにのみ位置情報が要求され、起動時のポップアップ ウィンドウよりもコンバージョン率が高くなります。入口API:CLLocationButton() + startUpdatingLocation()

  • チェックインおよび打刻シナリオ: 出席、旅行の打刻、運動記録などの「ワンタイム測位」シナリオでは、打刻ボタンの隣に位置ボタンを配置します。ユーザーは、クリックすると位置が取得されることが明確にわかり、心理的な受容性が高くなります。協力するCLGeocoder逆引き解決されたアドレスは、確認のためにユーザーに表示されます。

  • 無効なアプリの呼び出し: ユーザーによって以前に位置情報の許可を拒否されたアプリの場合、位置情報を必要とするインターフェイスに位置情報ボタンを表示します。ユーザーがクリックすると、システムは認証ステータスをリセットするよう案内し、アプリケーションに 2 回目のチャンスを与えます。これは、ユーザーに設定で手動でオンにするよう依頼するよりもはるかに簡単です。

  • watchOS ジオフェンス通知: Apple Watch アプリで地域ベースの通知を使用すると、ユーザーはジムに到着したら運動を開始し、帰宅したら犬に餌を与えるように通知されます。 「常に」認証は必要ありません。システムは地理位置情報を監視し、ユーザーに代わって通知をトリガーします。

関連セッション

コメント

GitHub Issues · utterances