Flutter-geolocator: iOSはロケーション権限を要求しません

作成日 2019年01月25日  ·  15コメント  ·  ソース: Baseflow/flutter-geolocator

🐛バグレポート


iOSシミュレーターは、位置情報の許可を要求しません。 これでデバイスがスキップまたは「ハング」しているようです。 geolocator.getCurrentPositionを手動で(ボタンを押して)取得しようとすると、 nullが返されgeolocator.checkGeolocationPermissionStatus()を使用して場所のアクセス許可を確認しましたが、
GeolocationStatus.unknown

予想される行動

iOSシミュレーターは、位置情報サービスのユーザー権限を要求する必要があります。

複製手順

構成

バージョン: 2.1.1

プラットホーム:

  • [12.1]:iphone:iOS

最も参考になるコメント

@dstuff @kika @JStuve @StephanCassel
それを私が直した! 私はInfo.plistでこの権限NSLocationAlwaysUsageDescriptionをNSLocationWhenInUseUsageDescriptionと一緒に使用していました。 ただし、アプリはiOS 8、Flutterのデフォルトをターゲットに設定されています。 ただし、NSLocationAlwaysUsageDescriptionはiOS10以降でのみ使用する必要があります。 これは、iOSアプリの許可プロンプトを台無しにしていました。 私は削除し、それは機能し、許可を求め、私は場所を取得することができました。 これが皆さんにも役立つことを願っています。

全てのコメント15件

私が気付いたのは、アプリが最初にインストールされて位置情報サービスにアクセスすると、システムが許可を求めるダイアログをポップアップし、同時にcheckPermissionStatus()unknown返すことです。 ユーザーがアクセスを許可すると、アプリはPosition取得に進むことができます。
ユーザーがリクエストを許可または拒否するのを待つ方法が必要です。

私はまったく同じ問題を抱えています。 Androidは正常に動作しますが、iOSではNSLocationWhenInUseUsageDescriptionを追加しましたが、アクセス許可の入力を求められることはないため、 checkGeolocationPermissionsStatus()は常にunknownです。 これは、シミュレータだけでなく物理デバイスにもあります。

何時間も同じ問題。 Androidは正常に動作します。 iOSはnullを与えました。
iOSアプリをシミュレーターから削除して再起動しました。 その後、それは完璧に動作します。 うーん。
podfileに情報がないため、開始時に問題が発生しました。 問題が発生した可能性があります。

ここでも同じです。 デバイスとシミュレーターからアプリを削除し、再インストールしました。同じことです。
場所を取得しようとすると、次の例外が発生しました:ERROR_ALREADY_REQUESTING_PERMISSIONS

@dstuff @kika @JStuve @StephanCassel
それを私が直した! 私はInfo.plistでこの権限NSLocationAlwaysUsageDescriptionをNSLocationWhenInUseUsageDescriptionと一緒に使用していました。 ただし、アプリはiOS 8、Flutterのデフォルトをターゲットに設定されています。 ただし、NSLocationAlwaysUsageDescriptionはiOS10以降でのみ使用する必要があります。 これは、iOSアプリの許可プロンプトを台無しにしていました。 私は削除し、それは機能し、許可を求め、私は場所を取得することができました。 これが皆さんにも役立つことを願っています。

@cetorresついにそれを手に入れました! 推奨される変更を加えました。さらに、 checkGeolocationPermissionStatus前にgetCurrentPosition checkGeolocationPermissionStatus呼び出していたため、権限プロンプトがトリガーされませんでした。

ありがとう! :ビール:

バージョン:3.0.0iosもパーミッションアクセスのプロンプトを表示しません。

Xcodeでのデバッグから、 NSLocationAlwaysAndWhenInUseUsageDescriptionも必要であるように見えます。 ( NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescriptionだけを持っていると、Flutterでサイレントに失敗します)

同じ問題、すべてがそれが証明したと言った、そして何も機能しない。 それを解決する方法が本当にわかりません。

トン@cetorresに感謝します! 私は実際にはiOS10以降をターゲットにしていますが、それを機能させるにはNSLocationAlwaysUsageDescriptionを削除する必要がありました。 私のアプリは使用していないときは位置情報を必要としないので、これで十分です。

クレイジー! Appleはいつものように私のアプリをTestFlightに承認しました...

これで、このビルドをTestFlightテストに使用したり、AppStoreに送信したりできます。

しかしまた私にこれを送った:

アプリの最近の配信で1つ以上の問題が特定されました[編集済み] 1.0.0(12)。 配信は成功しましたが、次の配信で次の問題を修正することをお勧めします。

ITMS-90683:Info.plistに目的文字列がありません-アプリのコードが、機密性の高いユーザーデータにアクセスする1つ以上のAPIを参照しています。 アプリのInfo.plistファイルには、アプリがデータを必要とする理由を明確かつ完全に説明するユーザー向けの目的文字列を含むNSLocationAlwaysUsageDescriptionキーが含まれている必要があります。 2019年春以降、ユーザーデータにアクセスするApp Storeに送信されるすべてのアプリには、目的の文字列を含める必要があります。 外部ライブラリまたはSDKを使用している場合、それらは目的の文字列を必要とするAPIを参照する場合があります。 アプリがこれらのAPIを使用しない場合でも、目的の文字列は必要です。 ライブラリまたはSDKの開発者に連絡して、APIを含まないバージョンのコードをリリースするように依頼できます。 詳細(https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy)。

だから私はまだここで綱渡りをしているようです。 今すぐAndroidXのハードルを超えたくないので、プラグインをアップグレードできません...

あなたたちは何を提案しますか? 「問題を特定しました」というメッセージを無視しますか?

更新:info.plistに以下の3つすべてを追加するとうまくいきました。 アップルも幸せです。

NSLocationWhenInUseUsageDescription

NSLocationAlwaysAndWhenInUseUsageDescription

ヒントをありがとう、 @ vejmartin

@kbrmimbylあなたは命の恩人です。 Info.plistに「NSLocationAlwaysAndWhenInUseUsageDescription」キーがありませんでした。これが問題の原因でした。

XCodeではなくAndroidStudioでinfo.plistを変更した人を対象に:「NSLocationAlwaysAndWhenInUseUsageDescription」を削除し、代わりにXcodeで対応する「プライバシー-常に場所と使用中の使用法の説明」を選択すると機能しました。 何らかの理由で、他の人はすでにそのようにフォーマットされていますが、これはそうではありませんでした。 上記と同じ問題が発生していましたが、onErrorでは何も発生しませんでした。 非同期はただ待っていて、決して進行しませんでした。 そして、hotReloadを実行すると、ERROR_ALREADY_REQUESTING_PERMISSIONSが発生します。これは、そのアクセス許可要求への入力をまだ待機しているためです。
iOS11をターゲットにすると、Androidではすべて正常に機能しました。 今ではIOSでも同様です。

IOSデバイスのフラッターウェブで同じ問題が発生しています。
アプリケーションはIOSで許可ダイアログを表示しませんが、WindowsおよびAndroidデバイスでは機能します

このページは役に立ちましたか?
0 / 5 - 0 評価