用facebook授权android

时间:2012-05-29 14:09:06

标签: android facebook

我正在尝试用Facebook授权我的移动应用程序,但是当facebook授权窗口关闭时,它不会回到我的应用程序的continueLoading(1)方法.. 无法理解为什么:

private void authorizeFacebook(final Loader loader) {       
    String[] permissions = new String[] {"friends_status", "user_status"};
    facebook.authorize(this, permissions , new DialogListener() {
        @Override
        public void onComplete(Bundle values) {
            Log.e("finish", "oncomplete");
            //SharedPreferences.Editor editor = mPrefs.edit();
            //editor.putString("access_token", facebook.getAccessToken());
            //editor.putLong("access_expires", facebook.getAccessExpires());
            //editor.commit();                
            loader.continueLoading(1);
        }

        @Override
        public void onFacebookError(FacebookError error) { 
            Log.i("FacebookAuthorize", error.toString());               
            app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader);      
        }

        @Override
        public void onError(DialogError e) { 
            Log.i("FacebookAuthorize", e.toString());               
            app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader);
        }

        @Override
        public void onCancel() {
            Log.i("FacebookAuthorize", "onCancel");
            app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader);
        }
    });

}

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebook.authorizeCallback(requestCode, resultCode, data);
}

装载机的第一步:

   private void continueLoading(int step) {     
    switch(step)
    {
            //loading current user facebook profile
    case 1: progressBar.incrementProgressBy(750);               
            loadingStatus.setText("Getting user's facebook details");                               
            facebookRunner = new AsyncFacebookRunner(facebook);         
            facebookConnection = new FacebookConnection(this, 1);
            facebookRunner.request("me",facebookConnection);   
            app.setFacebook(facebook);
            app.setFacebookRunner(facebookRunner);
            break;

而不是回到我的应用程序,它只是关闭所有内容..

1 个答案:

答案 0 :(得分:0)

facebook android sdk有两种不同的身份验证流程:

1)如果用户在同一设备上安装了facebook应用程序,将使用SSO。 如果是这种情况,那么您正在使用的Facebook sdk将启动Facebook应用程序的新意图,以针对您的应用程序对用户进行身份验证。 为了能够知道何时完成,您需要添加:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebook.authorizeCallback(requestCode, resultCode, data);
}

2)如果设备没有安装facebook应用程序,那么SDK将打开它自己的用户身份验证对话框,在这种情况下,将使用传递给DialogListener方法的authorize实现

您需要同时拥有(DialogListeneronActivityResult)来处理这两种情况。