GoogleAccountCredential name is null despite calling setSelectedAccountName (Android 6.0)

孤人 提交于 2019-11-27 06:46:50

问题


I've created an endpoint using a secured backend and have been using it since March on an app I'm building (source docs here). I recently installed the latest version to my Android 6.0 device and an odd error popped up (it works perfectly on 4.2.2 & 5.1).

The specific error is:

IllegalArgumentException: the name must not be empty: null 

Which I traced to an error with the credential, you can see the code below. On Android 6.0 account may be "user@gmail.com" but the string 'test' turns out to be null!

Is there something specific about 6.0 that changed 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;
}

回答1:


Yes with Android 6.0 Marshmallow, you will now need to request permissions at run time https://developer.android.com/training/permissions/index.html

In order to get those credentials you need the GET_ACCOUNTS permission in the CONTACTS group

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

You will have to request it in your activity/fragment and handle any UX pertaining to your app.



来源:https://stackoverflow.com/questions/33085685/googleaccountcredential-name-is-null-despite-calling-setselectedaccountname-and

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!