Android 只能通过一个帐户登录,在facebook上登录时不使用其他id
在我的应用程序中,我可以通过我的facebook id登录,如果我输入另一个id,它不会像我的id那样获取数据。我不明白问题出在哪里。当我输入另一个id时,它会显示正在加载,之后只会看到空白的facebook页面 main活动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
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在我的高级设置中没有字段名沙盒模式。我认为版本不同