2015-04-12 18 views
3

我想基於google-fit製作一個android應用程序。如何找到哪個帳戶(電子郵件)用戶用於登錄到我的谷歌健身的Android應用程序?

我想要實現的是,只要用戶選擇使用該應用程序的帳戶,就可以在我的網站上爲用戶創建一個帳戶。

這裏是我想在建立代碼庫(這僅僅是基本的註冊代碼示例)https://github.com/ishanatmuz/GoogleFitTest/tree/829051b7739ee9d8871c3ba9e5f21dfb17f4f3d7

onConnected當用戶已經成功地簽署和提供的權限被調用。我calling my own function做進一步的工作,基本上是這樣的:

  1. 獲取誰剛登錄的用戶的信息(至少電子郵件)
  2. 將用戶發送到我的服務器註冊。
  3. 繼續與應用程序的其餘部分。

我需要幫助搞清楚怎麼做步驟1.

任何幫助將不勝感激。

回答

0

在您onConnected()方法,你可以得到它:

Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); 
String personName = currentPerson.getDisplayName(); 
String accountName = Plus.AccountApi.getAccountName(mGoogleApiClient); 
+0

我能夠成功獲取AccountName,但沒有DisplayName。我得到java.lang.NullPointerException:嘗試調用空對象引用上的接口方法'java.lang.String com.google.android.gms.plus.model.people.Person.getDisplayName()' – Ishan

+0

這裏是變化我提出https://github.com/ishanatmuz/GoogleFitTest/commit/967df7bd214fe2f0d8125fd44c2fb877adb5a582 – Ishan

+0

'Plus.PeopleApi.getCurrentPerson()'可能返回null,因爲您沒有權限查看用戶的詳細信息。在構建'GoogleApiClient'時,請確保添加正確的範圍。看到這裏:https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.Builder.html – Anyonymous2324

2

隨着@ Anyonymous2324的幫助下,我找到了解決方案。除了下面的答案中提到的內容,還有更多的事情要做。所以我認爲對未來在這裏磕磕絆絆的人是最好的;如果我把它放在一起。

要獲得帳戶名(電子郵件)或顯示名稱(用戶名),所需的代碼是由@ An​​yonymous2324

Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); 
String personName = currentPerson.getDisplayName(); 
String accountName = Plus.AccountApi.getAccountName(mGoogleApiClient); 

但要得到這個工作,有幾件事情是提到的相同需要完成。

  1. 轉到Developer's console並添加Google+的API爲你的項目(這是需要使用任何Google+的相關工作,在我們的情況下,它收集用戶名)。
  2. 我們需要添加權限以訪問設備的帳戶,方法是在清單中添加<uses-permission android:name="android.permission.GET_ACCOUNTS" />
  3. 在你GoogleApiClient.Builder加上加API這樣.addApi(Plus.API)
  4. 我們還需要添加一些範圍,以使getDisplayName可以工作。這些是.addScope(Plus.SCOPE_PLUS_LOGIN).addScope(Plus.SCOPE_PLUS_PROFILE)

要提及heregetCurrentPerson方法可以返回null如果未指定的需要的範圍或有一個網絡故障。因此最好在調用getDisplayName之前檢查currentPerson對象。然後 完整的代碼如下:

Person currentPerson = Plus.PeopleApi.getCurrentPerson(mClient); 
if(currentPerson != null) { 
    String currentPersonName = currentPerson.getDisplayName(); 
    Log.d(TAG, currentPersonName); 
    logStatus(currentPersonName); 
} 

由於文檔中提到的返回值可以在網絡錯誤的情況下空;爲INTERNET添加權限似乎是一個好主意。但在我的手機上,它沒有連接互聯網。我想這是從我手機上的Google+應用中獲取信息,而不是完全上網,所以我不必使用互聯網。

但不要拿我的話來測試自己。

+0

謝謝,作品像魅力 我錯過了提供'.addScope(Plus.SCOPE_PLUS_LOGIN)'和'.addScope(Plus.SCOPE_PLUS_PROFILE) ' – zIronManBox

相關問題