2010-02-11 104 views
66

您如何在代碼中訪問用戶的Google帳戶ID /用戶名?我正在構建一個將調用Web服務來存儲數據的應用程序,並且我想要確定提交數據的人員的身份。通過Android訪問Google帳戶ID /用戶名

+3

獲取谷歌帳戶的用戶名和電子郵件 http://stackoverflow.com/a/31538053/4395114 – 2015-07-21 11:51:03

+0

也有在Android的[這裏](HTTP賬戶管理庫:// stackoverflow.com/questions/24227274/how-to-add-programmatically-a-custom-account-in-android/39686087#39686087)。 – 2016-09-25 11:56:52

回答

39

我遇到同樣的問題,解決了我這兩個環節:

第一個是這一個:How do I retrieve the logged in Google account on android phones?

呈現了用於檢索與電話相關聯的賬戶代碼。基本上,你需要這樣的事情:

AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE); 
Account[] list = manager.getAccounts(); 

而且在AndroidManifest.xml中添加的權限

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

此外,如果您使用的是仿真器下面的鏈接將幫助您設置它與帳戶:Android Emulator - Trouble creating user accounts

基本上,它說,你必須創建一個基於API級別的Android設備,而不是SDK版本(通常是這樣做)。

+0

使用此: - http://stackoverflow.com/a/31538053/4395114 – 2015-07-21 11:56:45

+0

我怎樣才能獲得帳戶頭像?非常感謝你' – Urchin 2015-08-11 19:13:49

+0

@Urchin這個問題有點超出了這個問題的範圍,但我相信這另一個可以幫助你。 http://stackoverflow.com/questions/17905066/get-user-name-avatar-from-google-account – 2015-08-13 00:00:52

0

有一個來自google的示例,它列出了現有的Google帳戶並在選擇時生成訪問令牌,您可以將該訪問令牌發送到服務器以從中檢索相關詳細信息以識別用戶。

您也可以從訪問令牌獲得的電子郵件ID,對於需要修改的範圍

請通過My Post

8

這種方法來獲得谷歌用戶名:

public String getUsername() { 
    AccountManager manager = AccountManager.get(this); 
    Account[] accounts = manager.getAccountsByType("com.google"); 
    List<String> possibleEmails = new LinkedList<String>(); 

    for (Account account : accounts) { 
     // TODO: Check possibleEmail against an email regex or treat 
     // account.name as an email address only for certain account.type 
     // values. 
     possibleEmails.add(account.name); 
    } 

    if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) { 
     String email = possibleEmails.get(0); 
     String[] parts = email.split("@"); 
     if (parts.length > 0 && parts[0] != null) 
      return parts[0]; 
     else 
      return null; 
    } else 
     return null; 
} 

簡單此方法調用....

並在Gmail中獲取Google用戶ID:

accounts = AccountManager.get(this).getAccounts(); 
    Log.e("", "Size: " + accounts.length); 
    for (Account account : accounts) { 

     String possibleEmail = account.name; 
     String type = account.type; 

     if (type.equals("com.google")) { 
      strGmail = possibleEmail; 

      Log.e("", "Emails: " + strGmail); 
      break; 
     } 
    } 

在清單中添加權限後;

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

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

爲什麼要求網際網路和訪問網絡狀態權限? – Chitrang 2015-12-09 12:10:26

-3
String name = android.os.Build.USER; 

if (!TextUtils.isEmpty(name)) { 
    nameEdit.setText(name); 
} 
+2

那麼,我試過這個,它返回給我「dpi」。顯然不是用戶的名字。 – 2015-08-02 08:27:16

2
if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { 
    Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); 
    String userid=currentPerson.getId(); //BY THIS CODE YOU CAN GET CURRENT LOGIN USER ID 
} 
+0

你在使用什麼庫,我得到'Plus' _無法解析符號_? – Choletski 2016-05-23 07:58:33

+0

這是基於使用對大多數開發人員來說可能太異乎尋常的G​​oogle+ API – GregD 2016-05-24 01:11:54

3

檢索的登錄用戶 使用GoogleSignInResult.getSignInAccount方法來請求對當前登錄用戶的個人資料,個人資料信息。 登錄意圖成功後,您可以調用getSignInAccount方法。

GoogleSignInResult result = 
Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
GoogleSignInAccount acct = result.getSignInAccount(); 
String personName = acct.getDisplayName(); 
String personGivenName = acct.getGivenName(); 
String personFamilyName = acct.getFamilyName(); 
String personEmail = acct.getEmail(); 
String personId = acct.getId(); 
Uri personPhoto = acct.getPhotoUrl(); 
相關問題