2013-08-26 119 views
40

我有一個應用程序,實施了推送通知。使用GCM時的GET_ACCOUNTS權限 - 爲什麼需要這樣做?

我想理解爲什麼我們需要「GET_ACCOUNTS」(android.permission.GET_ACCOUNTS),同時實現GCM?一些用戶正在對此權限提出擔憂。我在清單中使用了此許可,因爲它在官方網站here中給出。

此權限有多安全?如果我從我的清單中刪除這個推送通知的工作?

+0

你有沒有試過* *推送通知沒有GET_ACCOUNTS許可?看起來,嘗試它比詢問和等待答覆要快。一旦知道,請將結果發佈爲答案。 – 323go

+0

GET_ACCOUNT用於驗證用戶是否同步了移動版Google帳戶,併爲每個用戶(每個Google帳戶)生成關鍵值。如果設備運行的版本低於Android 4.0.4,則這是必需的。 –

+0

Okie ..除此之外,還有其他方式可以做到嗎? –

回答

57

它使用Google服務的現有連接。對於3.0 之前的設備,這需要用戶在其 移動設備上設置Google帳戶。運行Android 4.0.4或更高版本的設備 上不需要Google帳戶。

所以這是允許

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

閱讀谷歌帳戶的要求的原因。

瞭解更多關於這個GCM Overview


谷歌帳戶登錄時不再需要GCM工作。所以你不需要android.permission.GET_ACCOUNTS權限。

如果您使用GCG API和GoogleCloudMessaging.register),則不再需要在任何Android版本上配置Google帳戶。但是,如果您使用的是過時的庫(GCMRegistrar.register),則舊版本(ICS之前)仍需要Google帳戶。

更多詳情,請登錄https://groups.google.com/forum/#!topic/android-gcm/ecG-RfH-Aso。另一個similer線程是Why google Account login is required for GCM to work for devices below 4.0.4 OS?

+0

Okie ..有沒有其他的方式來做到這一點,沒有在明確表明這一點? –

+5

@VamsiChalla:所有權限必須位於清單中。但是,如果您的'android:minSdkVersion'設置爲14或更高,我會將該文檔解釋爲意味着您不需要此權限。 – CommonsWare

+0

@CommonsWare,感謝您的信息.. –

0

GET_ACCOUNT是驗證用戶是否同步了手機中的Google帳戶,併爲每個用戶(每個Google帳戶)生成鍵值。如果設備運行的版本低於Android 4.0.4,則這是必需的。

1

我不認爲這是事實。我使用新的Gmail帳戶在新設的工廠重置薑餅設備上進行了測試,未經許可即可收到GCM消息。所以文檔是錯誤的。

12

GCM不再需要GET_ACCOUNTS權限才能工作。它曾經是向GCM註冊所必需的,但最近的Play服務更新甚至在Froyo和Gingerbread上使用Google帳戶停止。如果您正在使用Play服務註冊GCM(即使用GoogleCloudMessaging.register),則不再需要任何Android版本的此權限。如果您使用的是過時的庫(GCMRegistrar.register),則仍然需要4.0.4版之前的Google帳戶,該帳戶需要該權限。

Source(由谷歌開發者在Android-GCM谷歌集團發佈):

一些背景資料:

升級Froyo和薑餅登記在 GoogleServicesFramework實現,使用谷歌賬號註冊。 這對於賬戶 未處於良好狀態的用戶會導致很多身份驗證錯誤。

從ICS開始,GCM不依賴或使用Google帳戶 - 您可以在添加帳戶或沒有任何帳戶之前使用它。

「播放服務」更新實施新方案對所有 設備 - 但似乎設備少數有 這個問題,我們正在調查 - 但數字遠遠高於 低與舊計劃。

3

當您使用

編譯 'com.google.android.gms:發揮服務:7.5.0' 添加的build.gradle文件意味着GET_ACCOUNT權限自動添加。

  • forexample如果開發人員必須使用只在項目的AdMob只是意味着指定的build.gradle文件 編譯此權限「com.google.android.gms:發揮服務的廣告:7.5.0」 如果有任何其他的澄清看到此鏈接https://developers.google.com/android/guides/setup
6

其他人一樣在這裏說,需要爲Android設備比4.0.4低GET_ACCOUNT

如果你和我一樣,都安裝了一個庫,自動將此權限,但你不需要它,你可以告訴AndroidManifest通過將許可與tools:node="remove"屬性,像這樣刪除的權限:

在你AndroidManifest.xml文件,確保xmlns:tools屬性在您manifest標籤定義,然後用remove集添加權限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      ...> 

    ... 

    <uses-permission android:name="android.permission.GET_ACCOUNTS" tools:node="remove" /> 

    ... 

</manifest> 

Word或警告,這實際上從未對我的作品,但我知道它爲別人工作。如果你能看到我可能做錯了什麼或有任何更多的信息,請評論!

*編輯:有一個bug報告開得到這個功能工作: https://bugzilla.xamarin.com/show_bug.cgi?id=48153

+0

似乎是舊帖子,但它不適合我。所以我做的是在閱讀Android文檔後,在用戶權限android:maxSdkVersion =「某些您不支持的API」以及工具:node =「remove」中添加了這個附加屬性。它有效。 – Devesh

+0

@Devesh非常感謝您的額外信息。我還編輯了我的文章並添加了此功能的錯誤報告。 – hvaughan3