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_Android_Facebook - Fatal编程技术网

android授权与facebook

android授权与facebook,android,facebook,Android,Facebook,我正试图用facebook授权我的移动应用程序,但当facebook授权窗口关闭时,它不会返回到我的应用程序的ContinueLoad(1)方法。。 不明白为什么: private void authorizeFacebook(final Loader loader) { String[] permissions = new String[] {"friends_status", "user_status"}; facebook.authorize(this, pe

我正试图用facebook授权我的移动应用程序,但当facebook授权窗口关闭时,它不会返回到我的应用程序的ContinueLoad(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;

它没有返回到我的应用程序,而是关闭所有内容。

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

1) SSO-如果用户已在同一设备上安装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将打开自己的对话框进行用户身份验证,在这种情况下,将使用传递给
authorize
方法的
DialogListener
实现


您需要同时使用(
DialogListener
onActivityResult
)来处理这两种情况。

这一行将做什么?装载机。连续装载(1);它将继续加载。。。登录成功后,如果您需要移动到新活动(如活动_1),我会将其添加到我的问题中,然后添加这行startActivity(新意图(this,Activity_1.class));但一切都是在同一个活动中发生的。。我希望它在相同的活动中继续。只需在继续加载()之前打印一条日志消息。并删除continueLoading()方法中的所有开关盒。并在continueLoading()中再打印一条日志消息。。进行测试,看看你的方法是否在调用,你是说我应该在对话侦听器中为没有facebook应用的用户使用continueLoading方法,为有facebook应用的用户使用onActivityResult方法。因此,如果我理解正确,我也应该在onActivityResult中添加continueLoad(1)?否。您只能调用
facebook。授权
,然后sdk决定是使用其“对话框”还是使用意图。如果使用了意图,则执行
onActivityResult
方法,然后通知sdk(
facebook.authorizeCallback
),然后sdk应调用您提供的
对话框侦听器的
onComplete
实现。您需要做的就是添加onActivityResult方法。。我一直。。我甚至把它粘贴到我的代码片段中。很抱歉我错过了。。。将日志记录放在这两个方法中,以查看它是否到达authorize和中的任何一个,而不是onActivityResults,然后什么都没有。。。