Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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错误在用户撤销权限时不调用授权_Android_Facebook - Fatal编程技术网

Android-Facebook错误在用户撤销权限时不调用授权

Android-Facebook错误在用户撤销权限时不调用授权,android,facebook,Android,Facebook,我对用户撤销权限后重新授权用户的问题感到困惑。当用户撤销应用程序的权限时,尝试在facebook上发布等操作时会显示一个错误对话框。但是,authorize()未被调用。我的代码有问题吗 public void doAuthentication() { // here all your FB authentication related stuff. mPrefs =

我对用户撤销权限后重新授权用户的问题感到困惑。当用户撤销应用程序的权限时,尝试在facebook上发布等操作时会显示一个错误对话框。但是,
authorize()
未被调用。我的代码有问题吗

                public void doAuthentication()
            {
                    // here all your FB authentication related stuff.

                mPrefs = getPreferences(MODE_PRIVATE);
                String access_token = mPrefs.getString("access_token", null);
                long expires = mPrefs.getLong("access_expires", 0);
                if(access_token != null) {
                    facebook.setAccessToken(access_token);
                }
                if(expires != 0) {
                    facebook.setAccessExpires(expires);
                }

                /*
                 * Only call authorize if the access_token has expired.
                 */
                if(!facebook.isSessionValid()) {

                facebook.authorize(Cats.this, new String[] { "publish_stream", "read_stream", "publish_checkins", "offline_access"}, new DialogListener() {
                    @Override
                    public void onComplete(Bundle values) 
                    {
                        SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token", facebook.getAccessToken());
                        editor.putLong("access_expires", facebook.getAccessExpires());
                        editor.commit();
                    }

                    @Override
                    public void onFacebookError(FacebookError error) {}

                    @Override
                    public void onError(DialogError e) {}

                    @Override
                    public void onCancel() {}
                });
            }

            public void onActivityResult(int requestCode, int resultCode, Intent data)     {

    super.onActivityResult(requestCode, resultCode, data);
    facebook.authorizeCallback(requestCode, resultCode, data);
}

你这里有什么问题?无法将用户发送回身份验证流?是。一旦用户撤销权限并尝试共享/发布信息,facebook错误对话框就会出现,并且不会再次请求权限。对不起,我对Android SDK不够熟悉;在一般情况下,要求用户重新验证应该没有问题(假设他们没有完全阻止应用程序,只是删除了权限),但我不太了解android SDK上的验证流程,不知道为什么它对您不起作用
    public void share(){
    if (! facebook.isSessionValid()) {
        loginAndPostToWall();
    }
    else {
        postToWall(messageToPost);
    }
}
   public void loginAndPostToWall(){
    facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener());
}

     public void postToWall(String message){
    Bundle parameters = new Bundle();
    parameters.putString("message", message);
    parameters.putString("description", "topic share");
    try {
        facebook.request("me");
        String response = facebook.request("me/feed", parameters, "POST");
        Log.d("Tests", "got response: " + response);
        if (response == null || response.equals("") ||
                response.equals("false")) {
            showToast("Blank response.");
        }
        else {
            showToast("Message posted to your facebook wall!");
        }
        finish();
    } catch (Exception e) {
        showToast("Failed to post to wall!");
        finish();
    }
}
   class LoginDialogListener implements DialogListener {
    public void onComplete(Bundle values) {
        saveCredentials(facebook);
        if (messageToPost != null){
            postToWall(messageToPost);
        }
    }
    public void onFacebookError(FacebookError error) {
        showToast("Authentication with Facebook failed!");
        finish();
    }
    public void onError(DialogError error) {
        showToast("Authentication with Facebook failed!");
        finish();
    }
    public void onCancel() {
        showToast("Authentication with Facebook cancelled!");
        finish();
    }
}

private void showToast(String message){
    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
private void clearCredentials() {
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);
    mAsyncRunner.logout(FacebookStatus.this, new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {

            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    saveCredentials(facebook);
                    Log.i("facebook session2", ""+facebook.isSessionValid());
                    showToast("You Succesfully logged out of the app");
                    finish();

                }
            });

        }

        @Override
        public void onIOException(IOException e, Object state) {}

        @Override
        public void onFileNotFoundException(FileNotFoundException e,
                Object state) {}

        @Override
        public void onMalformedURLException(MalformedURLException e,
                Object state) {}

        @Override
        public void onFacebookError(FacebookError e, Object state) {}
    });

}