我在Android上使用Parse和Facebook SDK。我试图请求获得许可" manage_pages"在Facebook帐户链接后。但每当我发出请求时,它都不会添加到Session.getPermissions()
中的权限列表中。但是,Facebook对话框弹出窗口要求" manage_pages"权限出现,并在facebook.com上的我的Facebook应用程序设置中列出。
在MainActivity中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e(TAG, "Receiving activity result with requestCode: " + requestCode + " resultcode: " + resultCode);
if (requestCode == 32665) // Code for when facebook is NOT linked
ParseFacebookUtils.finishAuthentication(requestCode, resultCode,
data);
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
在FacebookFragment的onCreateView()
:
connectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (user == null) {
Log.d(TAG, "User is null.");
return;
}
if (!ParseFacebookUtils.isLinked(user)) {
ParseFacebookUtils.link(user,
FacebookFragment.this.getActivity(),
new SaveCallback() {
@Override
public void done(ParseException ex) {
if (ParseFacebookUtils.isLinked(user)) {
Log.d(TAG,
"Woohoo, user logged in with Facebook!");
user.add(ParseConstants.USER_ARRAY_NETWORKS, ParseConstants.NETWORK_CODE_FACEBOOK);
user.saveInBackground();
Session session = Session.getActiveSession();
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!permissions
.contains(Permissions.Page.MANAGE_PAGES)) {
Log.e(TAG, "We don't have hte permission: " + Permissions.Page.MANAGE_PAGES + "... we have " + Arrays.toString(permissions.toArray()));
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
getActivity(),
"manage_pages");
newPermissionsRequest.setRequestCode(23232);
newPermissionsRequest.setCallback(new StatusCallback() {
@Override
public void call(
Session session,
SessionState state,
Exception exception) {
List<String> permissions = session.getPermissions();
Log.e(TAG, "CALLBACK Permissions: " + Arrays.toString(permissions.toArray()));
if (exception != null)
Log.e(TAG, "EXCEPTION: " + exception.getMessage());
}
});
session.requestNewPublishPermissions(newPermissionsRequest);
// ParseFacebookUtils.saveLatestSessionData(ParseUser.getCurrentUser());
}
showMessages();
} else {
Log.e(TAG, "Uhh user is not linked");
}
}
});
} else
Log.e(TAG, "User is already linked!");
}
});
FacebookFragment&#39; onStart
:
@Override
public void onStart() {
super.onStart();
if (ParseFacebookUtils.isLinked(user)) {
showMessages();
Session session = ParseFacebookUtils.getSession();
// Check for publish permissions
List<String> permissions = session.getPermissions();
Log.e(TAG, "Permissions: " + Arrays.toString(permissions.toArray()));
Log.e(TAG, "Permissions: " + Arrays.toString(Session.getActiveSession().getPermissions().toArray()));
}
}
这是logCat中出现的内容:
05-20 15:55:53.077: E/FacebookFragment(1887): We don't have hte permission: manage_pages... we have [public_profile] 05-20 15:55:53.337: E/FacebookFragment(1887): CALLBACK Permissions: [] 05-20 15:55:54.228: E/MainActivity(1887): Receiving activity result with requestCode: 23232 resultcode: -1 05-20 15:55:54.228: E/FacebookFragment(1887): Permissions: [public_profile] 05-20 15:55:54.228: E/FacebookFragment(1887): Permissions: [public_profile]
答案 0 :(得分:0)
我遇到与您相同的问题,遗憾的是Sessions.getPermissions()非常无用,您必须在应用程序中注销并再次登录才能更新会话对象。 我尝试了一切。
我最终做的是完全放弃session.getPermissions(),只是在线发送 / me / permissions 图谱API。
它是唯一可靠的,无需登录/退出。
答案 1 :(得分:0)
您是否尝试过Session.isPublishPermission("manage_pages")
功能?
我遇到了和你一样的问题,但是通过使用这个函数,它返回了一个正确的boolean
值。