7

インターネット接続が利用できない状態でユーザーが [Login with Facebook] ボタンをクリックするとどうなるかを確認するまで、すべてが正常に機能していました。

次のような乾杯のメッセージが表示されました。

ログインに失敗しました。このアプリのメーカーに連絡して、問題 #1118578 を Facebook に報告するよう依頼してください。

logcat には次のものがあります。

D/Facebook-authorize(2824): ログインがユーザーによってキャンセルされました。

このトーストを取り除き、メソッドに独自のエラー メッセージを表示しようとしましたが、onCancel()そのトーストを無効にする方法が見つかりません。WiFi を再度有効にしたら、シングル サインオンが機能しなくなりました。

これの原因は何ですか?

    private void fbLogin() {
    facebook.authorize(this, new String[] { "email" }, new DialogListener() {
        @Override
        public void onComplete(Bundle values) {
            app.save("fb_token", facebook.getAccessToken());
            app.save("fb_expire", facebook.getAccessExpires());
            mAsyncRunner.request("me", new meRequestListener());
        }
        @Override
        public void onFacebookError(FacebookError error) {}
        @Override
        public void onError(DialogError e) {}
        @Override
        public void onCancel() {}
    });
}

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

    facebook.authorizeCallback(requestCode, resultCode, data);
}

編集:

私自身の質問に答えるために、#1118578 の問題を解決しandroid:launchMode="singleInstance"たマニフェストから削除します。<activity>

android:launchMode="singleInstance"ただし、ブラウザは新しいインテントを介してデータをアクティビティに戻すため、Twitter OAuth ログインには が必要です。マニフェストで提供android:launchMode="singleInstance"しないと、新しいアクティビティが開始され、OAuth ベリファイアを受け取りません。

同じアクティビティで Facebook と Twitter のログインを使用する方法はありますか? 私が考える唯一の解決策は、 で Twitter4j のダミーアクティビティを使用することsingleInstanceです。

4

1 に答える 1

2

これを克服する私の方法は、Twitter のコールバックを「twitter://callback」から「http://localhost/callback」に変更し、android:launchMode="singleInstance" と Twitter のインテント フィルターを削除することでした。マニフェスト。

(以前のように onResume() ではなく) WebView で応答を取得できます。

yourwebview.setWebViewClient(new WebViewClient() {
  @Override
  public void onPageFinished(WebView view, String url) {
    // your_callback == http://localhost/callback
    if(url == null || !url.startsWith(your_callback))
      return;

    Uri         uri = Uri.parse(url);
    String      ov  = uri.getQueryParameter("oauth_verifier");
    AccessToken at  = null;
    ...
于 2012-10-12T12:11:31.487 に答える