【问题标题】:Photo size in getPhotoUrl() method Google Identity toolkitgetPhotoUrl() 方法中的照片大小 Google Identity 工具包
【发布时间】:2016-05-24 19:18:49
【问题描述】:

我使用 Google Identity Toolkit 进行了登录,我注意到 GitkitUser.UserProfile 类检索了照片 url,但是太小了。谷歌文档没有说明照片大小。

https://developers.google.com/identity/toolkit/android/reference/com/google/identitytoolkit/GitkitUser.UserProfile.html#getPhotoUrl()

以 Facebook 登录为例,getPhotoUrl() 方法返回:

https://scontent.xx.fbcdn.net/hprofile-xap1/v/t1.0-1/p50x50/12651146_10208004779813340_3124516205553866664_n.jpg?oh=efa817d10aaf9d184a767bae81a71071&oe=576850AD

例如使用 Gmail 登录,getPhotoUrl() 方法返回:

https://lh6.googleusercontent.com/-5XFRyKHh7Os/AAAAAAAAAAI/AAAAAAAABIo/Trf7GjTnFec/s96-c/photo.jpg

删除 Gmail 照片网址中的 /s96-c(或替换为 /s200-c)看起来很大,但我需要解决 Facebook 照片的问题。

【问题讨论】:

    标签: android google-identity-toolkit google-identity


    【解决方案1】:

    android 的解决方案是获取 federatedId,然后调用:

    http://graph.facebook.com/{federatedId}/picture?type=large

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.welcome);
            client = GitkitClient.newBuilder(this, new GitkitClient.SignInCallbacks() {
                @Override
                public void onSignIn(IdToken idToken, GitkitUser user) {
                    DataStorage.getInstance().setLastToken(idToken.getTokenString());
                    Configuration config = Configuration.fromMetaData(AppInfo.getAppInfo(LoginActivity.this).metaData);
                    ApiClient apiClient = new ApiClient(config.getApiKey(), AppInfo.getAppInfo(LoginActivity.this), config.getServerWidgetUrl());
                    final GetAccountInfo.Request request = apiClient.newGetAccountInfoRequest(idToken);
    
                    new AsyncTask<Void, Void, Void>() {
                        @Override
                        protected Void doInBackground(Void... params) {
                            GetAccountInfo.Response accountInfo = request.execute();
    
                            JSONArray users = accountInfo.getJsonResponse().optJSONArray("users");
                            JSONObject user = users == null ? null : users.optJSONObject(0);
                            String email = user == null ? null : user.optString("email");
                            if (email != null) {
                                JSONArray providerUserInfo = user.optJSONArray("providerUserInfo");
                                if (providerUserInfo != null && providerUserInfo.length() != 0) {
                                    for (int i = 0; i < providerUserInfo.length(); ++i) {
                                        JSONObject userInfo = providerUserInfo.optJSONObject(i);
                                        if (userInfo != null) {
                                            try {
                                                String userInfoString = userInfo.getString("federatedId");
                                                if(userInfoString.contains("facebook.com")) {
                                                    int lastSlash = userInfoString.lastIndexOf("/");
                                                    if(lastSlash != -1) {
                                                        String federatedIdFacebook = userInfoString.substring(lastSlash + 1, userInfoString.length());
                                                        Log.i("federatedIdFacebook", federatedIdFacebook);
                                                    }
                                                    break;
                                                }
                                            } catch (JSONException e) {
                                                Log.e("LoginActivity", e.getMessage());
                                            }
                                        }
                                    }
                                }
                            }
                            return null;
                        }
                    }.execute();
    
    
                }
    
                @Override
                public void onSignInFailed() {
                    Toast.makeText(LoginActivity.this, "Sign in failed", Toast.LENGTH_LONG).show();
                }
            }).build();
        }
    

    【讨论】:

      【解决方案2】:

      您可以使用 idToken 在 IDP (facebook id) 处获取用户的标识符。

      查看 users[].providerUserInfo[].federatedId https://developers.google.com/identity/toolkit/web/reference/relyingparty/getAccountInfo

      然后用facebookId获取大户口图片,用

      http://graph.facebook.com/{facebookId}/picture?type=large

      【讨论】:

      • 此解决方案适用于网络,我在 android 中,我想要一个直接的解决方案。但你给我一个想法,需要一些改变,但可以工作。
      猜你喜欢
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多