Android 只能通过一个帐户登录,在facebook上登录时不使用其他id

Android 只能通过一个帐户登录,在facebook上登录时不使用其他id,android,facebook,Android,Facebook,在我的应用程序中,我可以通过我的facebook id登录,如果我输入另一个id,它不会像我的id那样获取数据。我不明白问题出在哪里。当我输入另一个id时,它会显示正在加载,之后只会看到空白的facebook页面 main活动 public class MainActivity extends Activity { Facebook fb; Button login,getData,logout; ImageView ig; String app_id; private Asyn

在我的应用程序中,我可以通过我的facebook id登录,如果我输入另一个id,它不会像我的id那样获取数据。我不明白问题出在哪里。当我输入另一个id时,它会显示正在加载,之后只会看到空白的facebook页面

main活动

public class MainActivity extends Activity {
    Facebook fb;
Button login,getData,logout;    
ImageView ig;
String app_id;
private AsyncFacebookRunner mAsyncRunner;

private SharedPreferences mPrefs;
SharedPreferences.Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
     app_id= getString(R.string.app_id);
     fb= new Facebook(app_id);
        login=(Button) findViewById(R.id.login);
        logout=(Button) findViewById(R.id.logout);
        getData=(Button) findViewById(R.id.getData);
        // ig= (ImageView) findViewById(R.id.profile_pic);
         login.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    loginToFacebook();
                }
            });

getData.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        getProfileInformation();
    }
});
     logout.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
    if(fb.isSessionValid()){
        logoutFromFacebook();
    }

}
});
mAsyncRunner = new AsyncFacebookRunner(fb);
//updateButtonImage();
try {

    PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);

    for (Signature signature : info.signatures)
    {
     MessageDigest md = MessageDigest.getInstance("SHA");
     md.update(signature.toByteArray());
     Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }

   } catch (NameNotFoundException e) {
    Log.e("name not found", e.toString());
   } catch (NoSuchAlgorithmException e) {
    Log.e("no such an algorithm", e.toString());
   }    
    }




    @SuppressWarnings("deprecation")
    public void loginToFacebook() {

        mPrefs = getPreferences(MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

        if (access_token != null) {
            fb.setAccessToken(access_token);

            login.setVisibility(View.VISIBLE);

            // Making get profile button visible
            getData.setVisibility(View.VISIBLE);

            Log.d("FB Sessions", "" + fb.isSessionValid());
        }

        if (expires != 0) {
            fb.setAccessExpires(expires);
            Toast.makeText(getApplication(), "already login", Toast.LENGTH_LONG).show();
            //logoutFromFacebook();
        }

        if (!fb.isSessionValid()) {
            fb.authorize(this,
                    new String[] { "email", "publish_stream" },
                    new DialogListener() {

                        @Override
                        public void onCancel() {
                            // Function to handle cancel event
                        }

                        @Override
                        public void onComplete(Bundle values) {
                            // Function to handle complete event
                            // Edit Preferences and update facebook acess_token
                         editor = mPrefs.edit();
                            editor.putString("access_token",
                                    fb.getAccessToken());
                            editor.putLong("access_expires",
                                    fb.getAccessExpires());
                            editor.commit();

                            // Making Login button invisible
                            login.setVisibility(View.VISIBLE);

                            // Making logout Button visible
                            getData.setVisibility(View.VISIBLE);


                        }

                        @Override
                        public void onError(DialogError error) {
                            // Function to handle error

                        }

                        @Override
                        public void onFacebookError(FacebookError fberror) {
                            // Function to handle Facebook errors

                        }

                    });
        }
    }

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


    @SuppressWarnings("deprecation")
    public void getProfileInformation() {
        mAsyncRunner.request("me", new RequestListener() {
            public void onComplete(String response, Object state) {
                Log.d("Profile", response);
                String json = response;
                try {
                    // Facebook Profile JSON data
                    JSONObject profile = new JSONObject(json);

                    // getting name of the user
                    final String name = profile.getString("name");

                    // getting email of the user
                    final String email = profile.getString("email");

                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show();

                        }

                    });


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

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

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

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

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

    }

当你在Facebook上创建应用程序时。您可能已经启用了测试和沙箱模式,如图所示。您需要禁用它

注意:不要查看其他设置。这是web应用程序,同样,移动应用程序也有沙盒选项。
我也有同样的问题。我是这样修好的

转到Facebook开发者页面

应用程序-->“YourApp”->“状态和查看”->“启用”(“是否要使此应用程序及其所有实时功能对公众可用?”)

像这样


您的代码没有更新为最新的Facebook SDK 3.8,现在Facebook提供了登录、共享、从Facebook导入照片等默认类。请点击此链接

你能告诉我你遇到了什么错误吗?@Rahul Gupta我没有收到任何错误,首先它不会注销,如果我在重新安装应用程序后尝试输入另一个id,它会获取id和密码,但在那之后,只有带有facebook标题的空白facebook页面才可见,而如果我在登录后输入我的id,它会显示我的个人资料图片和我的name@Himani试试我的答案。@anuruddhika是的,它有用。。谢谢:)@anuruddhika你能告诉我注销时有什么问题吗。。请@Mehul Joisar在我的高级设置中没有字段名沙盒模式。我认为版本不同