简体   繁体   English

如何使用Facebook的Android SDK请求发布权限?

[英]How to request publish permissions using Facebook's Android SDK?

Without using any UI/Button, how to ask for publish permissions for Facebook app using Facebook's Android SDK? 如果不使用任何UI / Button,如何使用Facebook的Android SDK请求Facebook应用程序的发布权限? I'm currently using this code but it registers the callback twice giving me duplicate results. 我目前正在使用此代码,但它注册了两次回调,给我重复的结果。 What is the correct way to ask for publish permissions? 请求发布权限的正确方法是什么?

    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");

                }
            });

According to FB, you shouldn't request the publish permissions until after the user has successfully returned from the read permissions request. 根据FB,在用户从读取权限请求成功返回之前,您不应该请求发布权限。 So you'd have to change it to something like so: 所以你必须把它改成这样的东西:

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();
}

This way it will still continue as a success if they accept the read permissions but reject (or fail out of) the publish permissions request. 这样,如果它们接受读取权限但拒绝(或失败)发布权限请求,它仍将继续成功。

Hopefully that will point you in the right direction. 希望这会指出你正确的方向。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM