我正在开发一个用于共享图像的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();
}
});
任何人都可以帮我找到问题吗?提前致谢。