在没有app secret的情况下禁用图形api调用

时间:2015-06-20 10:53:24

标签: android facebook facebook-graph-api

我正在开发一个用于共享图像的Android应用程序。我希望在应用中集成 Facebook SDK

我从应用程序获取用户访问令牌。然后,将使用此令牌从服务器下载并在我们的服务器中存储图像。 我想让用户的信息安全。如果他们以某种方式从我的应用程序访问该令牌,我不希望其他人获取用户信息。

我在Facebook应用程序仪表板中启用了Require App Secret,但是当我从我的计算机调用带有此访问令牌的图形api时,它正在给我一个有效的响应(即我能够使用令牌提取用户信息不使用app_secret)在应用外部。但是,当我从开发人员仪表板访问Test用户的令牌并尝试调用图API时,我得到了:

"error": {
  "message": "The access token could not be decrypted",
  "type": "OAuthException",
  "code": 190
}

这正是我想要的。所以当我收集用户的令牌时,我做错了。以下是我的登录代码:

loginButton.setReadPermissions(Arrays.asList("public_profile, email, user_birthday, user_photos, user_friends"));

loginButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {

            private ProfileTracker mProfileTracker;

            @Override
            public void onSuccess(final LoginResult loginResult) {
                mProfileTracker = new ProfileTracker() {
                    @Override
                    protected void onCurrentProfileChanged(Profile profile1, Profile profile) {
                        /**
                         * Getting userId and storing to SP as long
                         */
                        final String userId = loginResult.getAccessToken().getUserId();

                        /**
                         * Getting facebook profilePic, Name and token and storing to SP
                         */
                        String profileImgUrl = "https://graph.facebook.com/" + userId + "/picture?type=large";
                        final String token = loginResult.getAccessToken().getToken();
                        if (profile == null) return;
                        String name = profile.getName();
                    }
                };
                mProfileTracker.startTracking();
            }

            @Override
            public void onCancel() {
                Log.d("facebook - onCancel", "cancelled");
                Snackbar.make(findViewById(android.R.id.content), "Login failed! Please try again.",
                        Snackbar.LENGTH_SHORT).show();
            }

            @Override
            public void onError(FacebookException e) {
                Log.d("facebook - onError", e.getMessage());
                Snackbar.make(findViewById(android.R.id.content), "Login failed! Please try again.",
                        Snackbar.LENGTH_SHORT).show();
            }
        });

任何人都可以帮我找到问题吗?提前致谢。

0 个答案:

没有答案