2013-05-09 184 views
2

我按照this tutorial做一个小应用程序登录并说hello +用户名。如何使用其他Facebook帐户登录?

问题是:我只能使用我的帐户登录,但无法使用其他帐户登录。 有些示例代码需要像HelloFacebookSample或Scrumptious一样登录才会发生此问题。 Logcat不显示任何错误。

所以请帮助我使用其他帐户登录。提前致谢!

EDIT(解决): 我只是找到了症结:我的应用程序在沙盒模式,只要停用沙盒模式解决的问题。感谢任何人的帮助。

我的代码:

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // start Facebook Login 
    Session.openActiveSession(this, true, new Session.StatusCallback() { 

     // callback when session changes state 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
     if (session.isOpened()) { 

      // make request to the /me API 
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

      // callback after Graph API response with user object 
      @Override 
      public void onCompleted(GraphUser user, Response response) { 
       if (user != null) { 
       TextView welcome = (TextView) findViewById(R.id.welcome); 
       welcome.setText("Hello " + user.getName() + "!"); 
       } 
      } 
      }); 
     } 
     } 
    }); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
    } 

} 

截图时登录我的帐户:显示你好+我的名字(阮越映) first screen second screen when click OK

截图时登录其他账号:白色屏幕 When login use other account

+0

它不是您的帐户,是你的FB应用。所以,请尝试使用不同的用户ID登录。 – 2013-05-09 04:47:35

+0

@DhawalSodha是的,我的意思是如何使用不同的Facebook用户ID登录?我尝试使用我的朋友Facebook用户ID登录,但它不起作用。 – VAdaihiep 2013-05-09 06:08:16

回答

1

你可以用不同的Facebook用户ID登录,在那之后:

  • 前往developers.facebook.com
  • 从顶部选择应用
  • 选择想要的应用程序从左侧
  • 选择编辑应用
  • 禁用沙盒模式
1

这是预期的行为。基本上Facebook的登录是SSO(单点登录),因此强烈期望用户在其设备上只有一个帐户。

我自己试图找到一种方法让Facebook SDK允许用户登录到不同的帐户,但它不起作用。

也许可以通过清除缓存来改变它,但这不会帮助在手机上使用真正Facebook应用的用户。

我最后做的是去了web工作流程,而不是原生应用程序。我可以推荐抄写员完成这项任务。

https://github.com/fernandezpablo85/scribe-java

如果你选择使用抄写员,这是我在洛活动

public class FacebookScribeLogin extends FragmentActivity{ 
private static final String TAG = FacebookScribeLogin.class.getSimpleName(); 
private final static String CALLBACK = "http://localhost:3000/"; 

private WebView mWebView; 
private ProgressDialog mProgressDialog; 

private OAuthService mAuthService; 
private SyncStatusUpdaterFragment mSyncStatusUpdaterFragment; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.webview); 

    mWebView = (WebView) findViewById(R.id.webview); 

    new GetLoginPage().execute(); 
} 

private class GetLoginPage extends AsyncTask<Void, Void, String> { 
    @Override 
    protected String doInBackground(Void... voids) { 
     //set up service and get request token as seen on scribe website 
     //https://github.com/fernandezpablo85/scribe-java/wiki/Getting-Started 
     mAuthService = new ServiceBuilder() 
       .provider(FacebookApi.class) 
       .apiKey(getString(R.string.facebook_api_key)) 
       .apiSecret(getString(R.string.facebook_api_secret)) 
       .scope("read_stream, publish_stream, manage_notifications, publish_actions, manage_pages") 
       .callback(CALLBACK) 
       .build(); 

     return mAuthService.getAuthorizationUrl(null); 
    } 

    @Override 
    protected void onPostExecute(String authURL) { 
     //send user to authorization page 
     android.webkit.CookieManager.getInstance().removeAllCookie(); 

     mWebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       //check for our custom callback protocol otherwise use default behavior 
       if (url.startsWith(CALLBACK)) { 
        GetAccessToken getAccessToken = new GetAccessToken(url); 
        getAccessToken.execute(); 

        return true; 
       } 

       if(mProgressDialog == null){ 
        mProgressDialog = ProgressDialog.show(FacebookScribeLogin.this, null, 
         String.format(getString(R.string.talking_to_x), getString(R.string.facebook)), true, false); 
       } 

       return super.shouldOverrideUrlLoading(view, url); 
      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 
       if(mProgressDialog != null){ 
        mProgressDialog.hide(); 
        mProgressDialog = null; 
       } 
      } 
     }); 
     mWebView.loadUrl(authURL); 

    } 
} 

private class GetAccessToken extends AsyncTask<Void, Void, Void>{ 
    private String mUrl, mToken, mSecret; 

    private GetAccessToken(String url) { 
     mUrl = url; 
    } 

    @Override 
    protected Void doInBackground(Void... voids) { 
     Uri uri = Uri.parse(mUrl); 

     String verifierStr = uri.getQueryParameter("code"); 
     Verifier verifier = new Verifier(verifierStr); 

     //save this token for practical use. 
     Token accessToken = mAuthService.getAccessToken(null, verifier); 
     mToken = accessToken.getToken(); 
     mSecret = accessToken.getSecret(); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void s) { 
     //mToken - save your mToken somehwere and perhaps use a graph API call for user details 
    } 
} 



} 
相关问题