9

Utworzono punkt końcowy za pomocą zabezpieczonego backendu i używam go od marca w aplikacji, którą buduję (źródło docs here). Niedawno zainstalowałem najnowszą wersję na moim urządzeniu z Androidem 6.0 i pojawił się nieparzysty błąd (działa idealnie na 4.2.2 & 5.1).GoogleAccountCredential name ma wartość null pomimo wywołania setSelectedAccountName (Android 6.0)

Specyficzny błędu:

IllegalArgumentException: the name must not be empty: null 

Które Wywiodłem błędu z poświadczeń, można zobaczyć poniżej kod. Na koncie Android 6.0 może być "[email protected]", ale ciąg "test" okazuje się zerowy!

Czy jest coś szczególnego w wersji 6.0, która zmieniła konto GoogleAccountCredential?

public static GoogleAccountCredential getCredential(Context ctx) { 

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); 
    String account = prefs.getString(UserProfileHelper.PREF_USER_ACCOUNT, ""); 
    GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(ctx, 
      "server:client_id:MY_ACCOUNT_NUMS.apps.googleusercontent.com") 
      .setSelectedAccountName(account); 


    String test = credential.getSelectedAccountName(); 
    return credential; 
} 

Odpowiedz

13

Tak z Androidem 6.0 Marshmallow, będzie teraz musiał uprawnieniami żądanie w czasie wykonywania https://developer.android.com/training/permissions/index.html

W celu uzyskania tych poświadczeń trzeba pozwolenie GET_ACCOUNTS w grupie KONTAKT

https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous

Będziesz musiał zażądać go w swojej działalności/fragmentu i obsługiwać dowolny UX związany z Twoją aplikacją.

+0

Dodano już to uprawnienie. – easycheese

+0

czy prosisz o to, czy jest to tylko w twoim manifeście? – AndroidEnthusiast

+0

O cholera ... Nawet o tym nie pomyślałbyś, pomyślałbyś, że lint to złapie ... Albo że lepszy błąd zostanie rzucony. Prawdopodobnie masz rację, jednak to sprawdzę. – easycheese