Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Facebook请求发布权限';s安卓SDK?_Android_Facebook_Facebook Graph Api_Facebook Sdk 4.0 - Fatal编程技术网

Android 如何使用Facebook请求发布权限';s安卓SDK?

Android 如何使用Facebook请求发布权限';s安卓SDK?,android,facebook,facebook-graph-api,facebook-sdk-4.0,Android,Facebook,Facebook Graph Api,Facebook Sdk 4.0,在不使用任何UI/按钮的情况下,如何使用Facebook的Android SDK请求Facebook应用程序的发布权限?我目前正在使用这段代码,但它注册了两次回调,并给出了重复的结果。请求发布权限的正确方法是什么 List<String> basicPermissions = Arrays.asList("user_friends", "user_games_activity"); List<String> publishPermissions = Arr

在不使用任何UI/按钮的情况下,如何使用Facebook的Android SDK请求Facebook应用程序的发布权限?我目前正在使用这段代码,但它注册了两次回调,并给出了重复的结果。请求发布权限的正确方法是什么

    List<String> basicPermissions = Arrays.asList("user_friends", "user_games_activity");
    List<String> publishPermissions = Arrays.asList("publish_actions");

    mCallbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().logInWithReadPermissions(this, basicPermissions);
    LoginManager.getInstance().logInWithPublishPermissions(this, publishPermissions);

    LoginManager.getInstance().registerCallback(mCallbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResults) {

                    new GraphRequest(
                            AccessToken.getCurrentAccessToken(),
                            "/{my-app-id}/scores",
                            null,
                            HttpMethod.GET,
                            new GraphRequest.Callback() {
                                public void onCompleted(GraphResponse response) {
                                    // my code
                                }
                            }
                    ).executeAsync();

                }

                @Override
                public void onCancel() {

                    Log.e("dd","facebook login canceled");

                }

                @Override
                public void onError(FacebookException e) {



                    Log.e("dd", "facebook login failed error");

                }
            });
List basicPermissions=Arrays.asList(“用户朋友”、“用户游戏”活动);
List publishPermissions=Arrays.asList(“发布操作”);
mCallbackManager=CallbackManager.Factory.create();
LoginManager.getInstance().logInWithReadPermissions(这是基本权限);
LoginManager.getInstance().logInWithPublishPermissions(此为publishPermissions);
LoginManager.getInstance().registerCallback(mCallbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(登录结果登录结果){
新格力探索(
AccessToken.getCurrentAccessToken(),
“/{my app id}/scores”,
无效的
HttpMethod.GET,
新建GraphRequest.Callback(){
未完成公共空白(图形响应){
//我的代码
}
}
).executeAsync();
}
@凌驾
公开作废{
Log.e(“dd”,“facebook登录已取消”);
}
@凌驾
公共无效onError(FaceBook例外e){
Log.e(“dd”,“facebook登录失败错误”);
}
});

根据FB,在用户成功从读取权限请求返回之前,您不应请求发布权限。所以你必须把它改成这样:

private boolean publishPermissionsRequested = false;
private LoginResult readResultSuccess;

private void loginWithFacebook(){
    LoginManager.getInstance().registerCallback(mCallbackManager,
        new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResults) {
                if(!publishPermissionsRequested){
                    publishPermissionsRequested = true;
                    readResultSuccess = loginResults;

                    LoginManager.getInstance()
                            .logInWithPublishPermissions(this, publishPermissions);

                    return;
               }

               onFacebookLoginSuccessful(loginResults);
            }

            @Override
            public void onCancel() { 
                if(publishPermissionsRequested && readResultSuccess != null)
                    onFacebookLoginSuccessful(readResultSuccess);
            }

            @Override
            public void onError(FacebookException e) { { 
                if(publishPermissionsRequested && readResultSuccess != null)
                    onFacebookLoginSuccessful(readResultSuccess);
            }
        });

    LoginManager.getInstance()
            .logInWithReadPermissions(this, basicPermissions);
}

private void onFacebookLoginSuccessful(LoginResult loginResults){
    new GraphRequest(
            AccessToken.getCurrentAccessToken(),
            "/{my-app-id}/scores",
            null,
            HttpMethod.GET,
            new GraphRequest.Callback() {
                 public void onCompleted(GraphResponse response) {
                      // Your code
                 }
            }
    ).executeAsync();
}
private boolean publishPermissionsRequested=false;
私人登录结果ReadResultAccess;
私有void loginWithFacebook(){
LoginManager.getInstance().registerCallback(mCallbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(登录结果登录结果){
如果(!要求发布许可){
publishPermissionsRequested=真;
ReadResultAccess=loginResults;
LoginManager.getInstance()
.logInWithPublishPermissions(此为publishPermissions);
返回;
}
onFacebookLoginSuccessful(登录结果);
}
@凌驾
public void onCancel(){
if(publishPermissionsRequested&&ReadResultsAccess!=null)
OnFaceBookLoginSuccess(readResultSuccess);
}
@凌驾
公共无效onError(FacebookException e){
if(publishPermissionsRequested&&ReadResultsAccess!=null)
OnFaceBookLoginSuccess(readResultSuccess);
}
});
LoginManager.getInstance()
.logInWithReadPermissions(这是基本权限);
}
私有void onfacebook登录成功(LoginResult loginResults){
新格力探索(
AccessToken.getCurrentAccessToken(),
“/{my app id}/scores”,
无效的
HttpMethod.GET,
新建GraphRequest.Callback(){
未完成公共空白(图形响应){
//你的代码
}
}
).executeAsync();
}
这样,如果他们接受读取权限但拒绝(或失败)发布权限请求,则仍将继续成功


希望这将为您指明正确的方向。

根据FB的说法,在用户成功从读取权限请求返回之前,您不应该请求发布权限。因此,您必须将其更改为类似以下内容:

private boolean publishPermissionsRequested = false;
private LoginResult readResultSuccess;

private void loginWithFacebook(){
    LoginManager.getInstance().registerCallback(mCallbackManager,
        new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResults) {
                if(!publishPermissionsRequested){
                    publishPermissionsRequested = true;
                    readResultSuccess = loginResults;

                    LoginManager.getInstance()
                            .logInWithPublishPermissions(this, publishPermissions);

                    return;
               }

               onFacebookLoginSuccessful(loginResults);
            }

            @Override
            public void onCancel() { 
                if(publishPermissionsRequested && readResultSuccess != null)
                    onFacebookLoginSuccessful(readResultSuccess);
            }

            @Override
            public void onError(FacebookException e) { { 
                if(publishPermissionsRequested && readResultSuccess != null)
                    onFacebookLoginSuccessful(readResultSuccess);
            }
        });

    LoginManager.getInstance()
            .logInWithReadPermissions(this, basicPermissions);
}

private void onFacebookLoginSuccessful(LoginResult loginResults){
    new GraphRequest(
            AccessToken.getCurrentAccessToken(),
            "/{my-app-id}/scores",
            null,
            HttpMethod.GET,
            new GraphRequest.Callback() {
                 public void onCompleted(GraphResponse response) {
                      // Your code
                 }
            }
    ).executeAsync();
}
private boolean publishPermissionsRequested=false;
私人登录结果ReadResultAccess;
私有void loginWithFacebook(){
LoginManager.getInstance().registerCallback(mCallbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(登录结果登录结果){
如果(!要求发布许可){
publishPermissionsRequested=真;
ReadResultAccess=loginResults;
LoginManager.getInstance()
.logInWithPublishPermissions(此为publishPermissions);
返回;
}
onFacebookLoginSuccessful(登录结果);
}
@凌驾
public void onCancel(){
if(publishPermissionsRequested&&ReadResultsAccess!=null)
OnFaceBookLoginSuccess(readResultSuccess);
}
@凌驾
公共无效onError(FacebookException e){
if(publishPermissionsRequested&&ReadResultsAccess!=null)
OnFaceBookLoginSuccess(readResultSuccess);
}
});
LoginManager.getInstance()
.logInWithReadPermissions(这是基本权限);
}
私有void onfacebook登录成功(LoginResult loginResults){
新格力探索(
AccessToken.getCurrentAccessToken(),
“/{my app id}/scores”,
无效的
HttpMethod.GET,
新建GraphRequest.Callback(){
未完成公共空白(图形响应){
//你的代码
}
}
).executeAsync();
}
这样,如果他们接受读取权限但拒绝(或失败)发布权限请求,则仍将继续成功

希望这能为你指明方向