多くのアプリケーションが電話の状態とIDを読み取る許可を必要とするのはなぜですか?


88

多くのアプリケーションが電話の状態とIDを読み取る許可を必要とするのはなぜですか?具体的には:

Phone calls
   read phone state and identity

たとえば、QuickpediaはWikipediaポータルですが、電話へのアクセスが必要です。これの説明は何ですか?

ここに画像の説明を入力してください


そのことは本当に、人々は何である「ええええ、このアプリはあなたの後ろのプレミアム番号をSMSを送信し、リングにこの権限がある」のための前提とします。以下の@Christianの答えは、頭に釘を打ちました!多くの場合、それは合法であり、開発者は許可を削ることを忘れがちです(おそらく、アプリ開発の初期からのホールドオーバー)。
t0mm13b

1
@ t0mm13b技術者やプライバシーオタク以外のアクセス許可の削減に対する要求はあまりないと思います(自己完結)。そのため、アプリメーカーが完全な一連のアクセス許可を要求することを標準にすると、消費者は多くのアクセス許可がすべてのアプリに適していると想定します。政府は彼らに最低限の許可を使用するよう圧力をかけておらず、これまでのところ市場は彼らに圧力をかけていません。すなわち、アプリが多くの許可を必要とするためにほとんどまたは全く費用がありません。
user29020

回答:


59

アプリは、携帯電話に関連付けられている一意のID(IMEIという電話識別子)を読み取ることができます。

したがって、コピー防止またはユーザー数の追跡の試行に役立ちます。


3
携帯電話からのユニークIDを取得するには、開発者のための(現時点では)最も信頼できる方法は、Read電話国家の許可が必要ですように見える、これはSO携帯電話のユニークIDを取得する方法について質問を参照してくださいstackoverflow.com/questions/2785485/...を
GAThrawn

40

これには、一意のID以外の理由もあります。アプリの半分は、これらの値にまったくアクセスしないと思います。問題は、Android 1.5までの以前のバージョンでは、この許可が存在しないことです。誰もが何かを要求することなくこれらの値にアクセスできます。

したがって、1.5と互換性のあるアプリを作成すると、Android 1.5の低いセキュリティをエミュレートするためにこの権限が自動的に追加されます。これは、互換性の問題になりやすいため、ほとんどの場合この権限を無視できるためです。


2
SDカードへのアクセスでも同じことが起こります。
デニスニコラエンコ

1
それは本当です-しかし、2.x以降のアプリが頻繁にそれを必要とする理由を説明していません。
イジー

19

その理由は、Android 1.5以前では、アプリケーションがこれらの許可を明確に要求し、自動的に許可することを要求しなかったためです。Android 1.6以降、これらのアクセス許可はアプリによって特別に要求される必要があります。ただし、Android 1.5以前のデバイスでアプリケーションを実行できるように指定した場合、その許可はデフォルトでアプリケーションに追加され、マーケットはその許可がアプリケーションによって要求されていることを示します。

要約すると、アプリケーションは実際には「電話の状態とID」にアクセスしていない可能性がありますが、開発者がアプリケーションを1.5以下のデバイスで実行できると指定した場合、その許可が表示されます。


これを示すドキュメントへのリンクはありますか?
GAThrawn


developer.android.com/reference/android/os/…は、ターゲットバージョン識別子の完全なリストと、それらの間のアクセス許可の変更(その他の違い)を提供します。
スチュワート

右。しかし、おそらく、もはや「面白い」、1.5と下位のためのアプリは非常にまれ:)だとして
イジー

18

この質問はかなり長い間私を悩ませてきました。だから、ついに、私は問題の一番下に到達することにしました。

Playstoreには、permission.READ_PHONE_STATEという名前のアプリがあります。これREAD_PHONE_STATEは、唯一の権限としてリクエストし、それを使用して、または使用せずにアクセスできるすべてのデータを出力する以外は何もしません。私はLG Optimus 4Xにそれをインストールし、Android 4.0.3に根ざし、LBEを使用して許可を取り消しました。次のスクリーンショットが示すように、結果はかなり興味深いものです。

スクリーンショット1 スクリーンショット2 スクリーンショット3
アプリの許可によって収集された情報。READ_PHONE_STATE (画像をクリックすると大きなバリエーションが表示されます)

簡単にわかるように、開発者が許可なくアクセスできないにもかかわらず、自由にアクセスできた情報もあります:私のメールボックス番号(備考:はい、正しい番号です。自分のデバイスからダイヤルするときのショートカットはプロバイダーです。自由に表示します;)最初のスクリーンショットの最後に表示されます:

  • CALL_STATE_IDLEしたがって、着信、発信、または進行中の電話はありません。着信時に自身を「バックグラウンド」にするために、この許可を必要とするアプリはありません。

モバイルデータがアクティブかどうか(DATA_DISCONNECTED;通知バーでわかるように、スクリーンショットを撮るときにWiFiを使用していました)、あなたがいる国、プロバイダー(彼に関するいくつかの技術データを含む)、 SIMカードを持っているか、ローミング中です。

したがって、アクセスできないのは、IMEI、SIMID、IMSI、および自分の電話番号の識別データのみです。

結論:この許可は、識別の目的でのみ必要であり、他には何も必要ありません。

なぜそんなに多くのアプリがそれを必要とするのですか?

  • 広告モジュールの場合、ほとんどの場合1
  • 開発者彼がそれを必要と考えたので(ここでいくつかの回答で指摘されているように)2
  • 問題のアプリは(また)Android 1.5以下で実行するように設計されているため(Google Playにリストされているように、簡単に見つけることができます)。

まさにこの順序での可能性、私見。


1 ダンのチャットへの投稿によるメモ:

Google Playポリシーでは、アプリがIMEIを取得して広告目的であなたを識別することを禁止しています。すべての広告ライブラリは、Google-Play-Servicesが提供する「広告ID」を使用するように更新されているため、この目的でIMEIを使用している場合は、Googleに報告する必要があります。

ユーザーがアプリでIMEIを使用している対象を特定するのは難しいので、最初に開発者に説明してもらう必要があります。


2別の開発者は、ちょうど微妙な違いに私を指摘:許可をする必要がないながら読んで(私が指摘してきたように)現在の通話状態を、登録するために必要なことがあり、リスナーをするためには、通知変更コールのステータス(参照:Androidでの着信および発信通話の検出)。システムがを呼び出すときにこれを自動的に処理する手段があるように見えますがonPause、それは必ずしも適切ではないかもしれません:目覚まし時計を考えてください。特に、プロファイルが着信音量に「ミュート」に設定されている場合は、着信コールで自動的に停止したくない場合があります。


3 ダンから修正アプリの「ターゲット」バージョンが1.5の場合にのみ、デフォルトの追加許可を取得します。後のバージョンをターゲットにしているが、最小バージョンが1.5の場合、許可は自動的に追加されません。


更新

  1. 興味深いのは、a)着信呼び出しと関連(電話)を検出するために必要なものと、識別の詳細(IMEI、IMSIなど)の2番目の許可に分割する未解決の問題(21504)があることREAD_PHONE_STATEです。2011年11月にオープンしましたが、まだ作業されていません。興味があればスターを付けてください:)
  2. そして、はい、たとえばArno Welzelが指摘したように、許可なしで同じことを行う方法(着信コールを検出する)あります。電話がかかってくると呼び出し音が鳴るので、そのイベントは特別な許可を必要とせずに使用できます:それによってトリガーされた場合、アプリはCallStateをチェックして(特別な許可が必要ない場合)、電話の着信。READ_PHONE_STATEonAudioFocusChange()

着信コールをバックグラウンドにするために、この許可が必要なアプリはないと言う部分を削除する必要があると思います。この点は脚注2ですでに述べていますが、矛盾しています。developer.android.com/reference/android/telephony/
Mikel

@Mikelあなたは部分的に正しいです。この許可を使用することは、タスクを達成するための「最も簡単な」方法ですが、それだけではありません。一部の開発者が指摘したように、それはなしで行うことができます(チャットでしたか?残念ながら、リンクを失いました)。多くのことと同様に、GoogleのAPIを使用すると、いくつかのことをはるかに簡単に実行できます(また、アプリをGoogleエコシステムにバインドします)。私は開発者ではないので、他の方法でさらに多くの作業が意味することはわかりません。
イジー

私はまだAndroid開発者でもありません。また、いくつかのユースケースはonPause()でカバーされているようです。「このアプリを許可する必要のあるアプリはありません」と言っても、私には間違っているように聞こえます。バックグラウンドで実行する場合など、「一部のアプリはこの許可を必要とする可能性があります」と思われます。また、ブロードキャストインテントを受信することは、電話の状態を繰り返しポーリングするよりも確実に効率的でなければならないことに注意してください。
ミケル

@Mikelアップデートをご覧ください。そして、はい、「まったく必要ない」は少し誇張されるかもしれません。たぶん、現在のすべてのリクエストの0.5%で、実際に必要になるかもしれませんが、代替手段はありません#Dそして、はいonPause()、それについてはチャットで議論しました!しかし、使用onAudioFocusChange()することでオーバーヘッドが少なくなる可能性があります(その場合、小さなポーリングは無視できる場合があります)。
イジー

10

多くの広告発行者は、この許可を使用して、あらゆる種類の追跡目的で電話IDを取得します。一意のIDを取得する方法は他にもありますが、残念ながら古いAndroidバージョンではバグがあります(話はもっと複雑です。たとえば、https//stackoverflow.com/questions/2785485/is-there-a-unique-android-詳細については、device-idまたはhttp://android-developers.blogspot.com/2011/03/identifying-app-installations.htmlをご覧ください)。

そのため、アプリが広告を使用する場合、アプリ自体が実際にREAD_PHONE_STATE権限を必要とせず、広告プロバイダーのみが必要とする可能性がかなりあります。


1
それが私見のすべての背後にある主な問題です!よくわかった。
イジー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.