我想询问我的 Android 应用程序的用户是否允许在按下自定义共享按钮(它只是一个 ImageView)时在 Facebook 上发布。在按钮的 OnClick
方法上,我执行此 block :
CallbackManager facebookCallbackManager;
...
facebookCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(facebookCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
shareContent(activity, content, true);
}
@Override
public void onCancel() { }
@Override
public void onError(FacebookException error) { }
});
LoginManager.getInstance().logInWithPublishPermissions(activity, Collections.singletonList("publish_actions"));
然后我覆盖:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebookCallbackManager.onActivityResult(requestCode, resultCode, data);
}
问题是请求永远不会到来:出现了一个永恒的旋转轮,并且没有回调(既没有成功,也没有取消,也没有错误)被调用。
一个。用户已经登录,根据:
public static boolean isLoggedIn() {
AccessToken accessToken = AccessToken.getCurrentAccessToken();
return accessToken != null;
}
FacebookSdk.isInitialized()
为真
根据以下内容,未授予发布权限:
private static boolean hasPublishPermissions() {
AccessToken accessToken = AccessToken.getCurrentAccessToken();
return accessToken != null && accessToken.getPermissions().contains("publish_actions");
}
FB SDK 的其他用途是通过应用程序使用并且它们正在运行。
我是 FB 仪表板上的应用程序管理员
对这个问题有什么想法吗?
重要提示:
由于 Facebook 的 API 非常稳定,根据一天中的时间或星星的位置,无需更改代码我有三种可能的结果:
如前所述,一个永恒的万向轮。
回调触发
onCancel
方法,无需用户交互。它在不要求确认的情况下分享内容 - 这给了我一个很好的不需要的视频发布在我的个人 FB 上,而我没有注意到 :) -
PS2: 即使是经典的
LoginManager.getInstance().logInWithReadPermission
现在也有同样的问题。它以前从未有过。
最佳答案
然后你可以在没有永久旋转器的情况下分享内容
LoginManager.getInstance().registerCallback(mCallbackManagerFacebook, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
System.out.println("Success");
if (loginResult.getRecentlyGrantedPermissions().contains("publish_actions")) {
new shareContent(activity, content, true);
} else {
//Toast.makeText(youractivity.this, "Successfully Connected to Facebook.", Toast.LENGTH_LONG).show();
GetFacebookPublishPermissions();
}
}
@Override
public void onCancel() {
//Log.d(TAG_CANCEL, "On cancel");
LoginManager.getInstance().logOut();
}
@Override
public void onError(FacebookException error) {
Toast.makeText(youractivity.this, "Looks like we are unable to connect to Facebook Servers.", Toast.LENGTH_LONG).show();
LoginManager.getInstance().logOut();
// Log.d(TAG_ERROR, error.toString());
}
});
并获得FacebookShare权限
public void GetFacebookPublishPermissions(){
if(LoginManager.getInstance()!=null)
{
LoginManager.getInstance().logInWithPublishPermissions(youractivity.this, Arrays.asList("publish_actions"));
}
}
Update
你可以像下面这样调用这个函数
AccessToken token = com.facebook.AccessToken.getCurrentAccessToken();
if(token!=null)
{
if (token.getPermissions().contains("publish_actions")) {
new shareContent(activity, content, true);
}else{
GetFacebookPublishPermissions();
}
}else{
LoginManager.getInstance().logInWithReadPermissions(this,
Arrays.asList("public_profile", "email", "user_birthday"));
}
关于android - Facebook SDK 的 logInWithPublishPermissions 卡在永久微调器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652014/