質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

ロケーション

ロケーションとは物理的スペースにおける特定の場所を表します。または緯度と経度を用いて示される地球上の座標をロケーションと呼びます。

Q&A

1回答

5856閲覧

iOSで位置情報の要求ダイアログが出る条件は?

flaumig

総合スコア67

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

ロケーション

ロケーションとは物理的スペースにおける特定の場所を表します。または緯度と経度を用いて示される地球上の座標をロケーションと呼びます。

0グッド

1クリップ

投稿2016/02/29 02:28

編集2016/03/01 05:18

iOSで位置情報を利用するアプリを作成しています。
初回起動時(CLLocationManagerから取得したステータスがkCLAuthorizationStatusNotDeterminedの場合)に位置情報の要求ダイアログを表示し、
以降はアプリキルからの起動時、下記のようにユーザが位置情報をOFFにしている場合(ステータスがkCLAuthorizationStatusDenied)は、再度位置情報の要求ダイアログを表示するようにしています。

Objective

1CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; 2if (kCLAuthorizationStatusDenied == status) { 3 // 位置情報サービスをOFFにしている場合、設定変更を促す 4 if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 5 [self.locationManager requestAlwaysAuthorization]; 6 } 7}

ところが、位置情報をONのままにしている状態でも、まれに位置情報要求ダイアログが表示されることがあります。
これは何故でしょうか?
(再現する条件は現在のところ不明です)

位置情報の設定を変更していない場合は、位置情報要求ダイアログを表示しないようにしたいのですが、
実装や設定で何かを変更する必要があるのでしょうか?

確認端末:iPhone6s
OSバージョン:iOS 9.0.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

まず、

位置情報をONのままにしている状態でも、まれに位置情報要求ダイアログが表示されることがあります。

ONのままにしている状態であれば、ステータスがkCLAuthorizationStatusAuthorizedAlwaysのときの処理を通っているはずですが、その中でrequestAlwaysAuthorizationは呼び出していないですよね?ということはステータスが変化してしまっているということです。まずは、ステータスが何になっているのか確認するところから始めて下さい。

その他、気になる点として、

以降はアプリキルからの起動時、下記のようにユーザが位置情報をOFFにしている場合

アプリキルからの起動時は、常にkCLAuthorizationStatusNotDeterminedになるんじゃないでしょうか?

ユーザが位置情報をOFFにしている場合(ステータスがkCLAuthorizationStatusDenied)は、再度位置情報の要求ダイアログを表示するようにしています。

kCLAuthorizationStatusDeniedの状態でrequestAlwaysAuthorizationを呼び出してもダイアログは表示されなくないですか?ここでは、ユーザ自身で設定を変更するようにメッセージなどを表示すべきではないでしょうか?

投稿2016/03/02 01:13

fuzzball

総合スコア16733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

flaumig

2016/03/03 01:07

ご回答ありがとうございます。 > まずは、ステータスが何になっているのか確認するところから始めて下さい。 おっしゃる通りなのですが、この不具合は複数のテスターから上がってきているもので 私の環境では再現したことがありません。 再現条件も不明な状態ですので、そういったことが他の方の環境でも起こるものなのか?と思いこちらで質問させて頂いた次第です。 > アプリキルからの起動時は、常に`kCLAuthorizationStatusNotDetermined`になるんじゃないでしょうか? いいえ。アプリキルから起動してステータスを確認すると、 位置情報がONのままの場合は`kCLAuthorizationStatusAuthorizedAlways`ですし、 「設定」から位置情報サービスをOFFにして起動すると`kCLAuthorizationStatusDenied`が返ってきます。 私の中では`kCLAuthorizationStatusNotDetermined`は初回起動時のみに返ってくるステータスという認識でおりました。 > `kCLAuthorizationStatusDenied`の状態で`requestAlwaysAuthorization`を呼び出してもダイアログは表示されなくないですか?ここでは、ユーザ自身で設定を変更するようにメッセージなどを表示すべきではないでしょうか? 手元の環境では アプリキル→「設定」を開く→プライバシー→位置情報サービス→OFFに変更→アプリ起動 とした場合、ステータスは`kCLAuthorizationStatusDenied`となり、位置情報の設定変更を求めるダイアログが表示されております。 ただ、この場合表示されるメッセージが初回起動時の権限を要求するダイアログとは異なっております。 ●初回起動時 ”(アプリ名)”を使用していないときでも位置情報の利用を許可しますか? 「許可しない」/「許可」 ●位置情報サービスがOFFの場合の再起動時 ”(アプリ名)”で位置情報を利用できるようにするには位置情報サービスをオンにしてください 「設定」/「キャンセル」 テスターの環境でどちらのメッセージが表示されていたかも、現在は不明の状態です。
fuzzball

2016/03/03 01:27 編集

>>位置情報がON これはアプリ単位のもの(許可/不許可)ではなく、大元のON/OFFの話のようですね。勘違いしていました。時間が取れたら調べ直してみます。 >>テスター テスターの言うことは鵜呑みにせず‥という話は置いておいて、(テスターさん達の間では)それなりに再現するのでしたら、何らかの情報を出力するものを用意してテストしてもらってはどうでしょうか? 【追記】 「アプリキル」についても勘違いしていました。端末から削除することだと思っていたのですが、バックグラウンドから消すだけなんですね。
fuzzball

2016/03/03 02:31 編集

>>手元の環境では >>アプリキル→「設定」を開く→プライバシー→位置情報サービス→OFFに変更→ >>アプリ起動とした場合、ステータスは`kCLAuthorizationStatusDenied`となり、 >>位置情報の設定変更を求めるダイアログが表示されております。 これですが、そのダイアログが出たあと、キャンセル → アプリキル → 再起動 → ダイアログで再度キャンセル → アプリキル → 再起動 → ダイアログが出ない!、という謎の結果になりました。 同じことを繰り返していると結果が変わるということは、逆のパターンで、ダイアログが出ることもある‥かも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問