web-dev-qa-db-ja.com

iOS 11の位置情報アクセス要求

アプリでユーザーの場所をリクエストしています。

locationManager.requestAlwaysAuthorization()

このコード行は、次のアラートメッセージを返す必要があります。

enter image description here

ただし、ユーザーに「許可しない」と「常に許可する」のどちらかのみを選択してほしい。 「アプリの使用中のみ」オプションを削除するにはどうすればよいですか?

これがinfo.plistに含まれていることを認識し、info.plistのこれら3つの行から行を削除すると、アプリでこのアラートがまったく表示されなくなります。

enter image description here

8
mahdi

オプションではなくなりました。

iOS 11がリリースされたため、アプリケーションがロケーションを常にオンにするように要求した場合(locationManager.requestAlwaysAuthorization())、ユーザーには3つのオプションすべてが自動的に与えられます。

以前のiOSバージョンとは異なり、すべてのオプションがユーザーに表示される必要があります。つまり、両方のオプションのキーを追加する必要があります。

Apple's Article-Requesting Always Authorization から転載:

アプリのInfo.plistファイルにNSLocationWhenInUseUsageDescriptionおよびNSLocationAlwaysAndWhenInUseUsageDescriptionキーを含める必要があります。 (アプリがiOS 10以前をサポートしている場合、NSLocationAlwaysUsageDescriptionキーも必要です。)これらのキーが存在しない場合、認証リクエストすぐに失敗します。

参照: Location Technologiesの新機能 ビデオセッション。

9
Ahmad F

ロケーションテクノロジーの更新に関する WWDC 2017セッション71 によると、常に承認をリクエストする場合は、iOS 11以降とリンクするときに常に使用中の説明を含める必要があります。さらに、iOSは、使用時モードの場所を使用するオプションをさらに表示します。

セッションの筆記録から引用。

したがって、iOS 11の場合、常にアプリを要求するすべての開発者に、WhenInUse承認モードをさらにサポートするように依頼します。この変更は遡及的であり、将来を見越したものであるため、ユーザーがiOS 11に更新すると、代わりにAlwaysInUse承認モードを常に承認するよう要求するアプリを承認できます。 iOS 11 SDKにリンクする場合は、WhenInUseUsageDescriptionを提供する必要があります。そうしないと、アプリはAlways認証をリクエストできなくなります。さらに、アプリがAlways承認をリクエストすると、代わりにアプリにWhenInUse承認を付与するオプションが表示されます。これらの新しい3つのオプションプロンプトでは、新しいUsageDescription文字列も使用できます。アプリは、AlwaysAndWhenInUse UsageDescriptionを提供する必要があります。これは別のキーなので、新しいiOS 11 SDKにリンクするときにアプリが提供する必要があります。 iOS 11以降にリンクされたアプリの場合、コアロケーションは古いNSLocationAlways UsageDescriptionキーを使用しません。

3
Jack Oborin

設定されていない場合、デバッグコンソールで次のようなメッセージをキャッチします。

アプリのInfo.plistには、NSLocationAlwaysAndWhenInUseUsageDescriptionキーとNSLocationWhenInUseUsageDescriptionキーの両方が含まれている必要があり、アプリがこのデータをどのように使用するかをユーザーに説明する文字列値が含まれています

  1. Info.plistをソースコードとして開く enter image description here

  2. 次のxmlチャンクを追加します。

<key>NSLocationAlwaysUsageDescription</key>
<string>Location always usage description</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Location always and when in usage description</string>
<key>NSLocationUsageDescription</key>
<string>Location usage desription</string>