我按下自定义按钮,让用户为我的Android应用程序(Facebook SDK 4.18.0)授予发布权限。有用。它转到facebook片段,其中提示用户向应用程序授予发布权限,然后它返回到按下按钮的活动。问题是我运行了调试器并且它永远不会通过回调函数,我需要在用户接受之后做我需要做的事情。
听众:
permissionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
permissionButton.startAnimation(rotation);
JSONObject userCredentials = new JSONObject();
//ask for facebook publishing permissions
if(facebook_connected) {
CallbackManager callbackManager = CallbackManager.Factory.create();
facebookLoginWithPublishPermissions(callbackManager);
}
}
});
我的自定义函数'facebookLoginWithPublishPermissions'打算获取具有发布权限的令牌(我是否需要一个新的或旧的工作,因为我已被授予此用户的“publish_actions”权限,因为我'我已登录并拥有access_token,但只有使用firebase ui auth module for android的基本权限)?如果我转到用户的Facebook页面,我可以看到已经设置了正确的权限,所以一切正常。代码:
private void facebookLoginWithPublishPermissions(CallbackManager callbackManager) {
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d("FACEBOOK_LOGIN_RESULT", "facebook login success");
Log.d("LOGIN_RESULT", loginResult.getAccessToken().getToken());
}
@Override
public void onCancel() {
Log.d("FACEBOOK_LOGIN_RESULT", "facebook login canceled");
}
@Override
public void onError(FacebookException exception) {
Log.e("FACEBOOK_LOGIN_RESULT", "facebook login error");
exception.printStackTrace();
}
});
LoginManager.getInstance().logInWithPublishPermissions((Activity) mContext, Arrays.asList("publish_actions"));
}
1 - 如何获得新令牌(如果您要求其他权限,是否需要续订令牌)? 2 - 在授予publish_actions权限后,如何使回调函数能够执行操作?
非常感谢你的帮助!
编辑:有关Facebook API /权限政治的未来参考,Facebook提供与您使用基本权限登录时首次提供的令牌不同的令牌。他们必须检查您的应用程序,以查看您是否仅在需要时使用权限,还要检查您是否“以防万一”这些权限,以避免对其服务器发出不必要的请求。此外,他们希望确保让用户知道发生了什么,他们必须接受发布权限,这就是为什么你必须做2个请求,首先是你第一次连接到facebook时的读取权限,以及第二个写入请求( publish_actions)权限。除非您已经要求首先阅读权限,否则您无法要求发布权限....
答案 0 :(得分:1)
您是否在代码中添加了以下方法?
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
Log.d("TAG: 5. ", "I´m at onActivity result");
}