7

次のコードを使用して、 Facebook の AuthToken ( Facebook for Android で保存) を取得しようとしています。

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccountsByType("com.facebook.auth.login");
if (accounts.length > 0) {          
    for(int j = 0; j < accounts.length; j++) {
        Account account = accounts[j];
        if(account.type != null && account.type.equals("com.facebook.auth.login")) { 
            Log.e(RuntimeVars.MY_NAME, "FACEBOOK-TYPE FOUND");
            am.getAuthToken(account, "com.facebook.auth.login", null, ConversationList.this,
                new AccountManagerCallback<Bundle>() {
                    public void run(AccountManagerFuture<Bundle> arg0) {
                        try {
                            Bundle b = arg0.getResult();
                            Log.e(RuntimeVars.MY_NAME, "THIS AUTHTOKEN: " + b.getString(AccountManager.KEY_AUTHTOKEN));
                        }
                        catch (Exception e) {
                            Log.e(RuntimeVars.MY_NAME, "EXCEPTION@AUTHTOKEN");
                        }
                    }
                }, null);
            }
        }
    }

ログイン認証情報が見つかり、FACEBOOK-TYPE FOUNDが LogCat に書き込まれますが、THIS AUTHTOKEN: [...]EXCEPTION@AUTHTOKENもログに記録されません。だから私am.getAuthTokenは決して呼び出されないと思います。

私は何が欠けていますか?

一般的に、Android アカウントから Facebook authtoken を取得するためのより良い (そして少なくとも機能する) 方法があれば、私に知らせてください。

助けてくれてどうもありがとう!


Sさん、よろしくお願いします。

4

4 に答える 4

6

Facebook SDK を使用しないのはなぜですか?

その中のFacebookクラスには、OAuth 2.0 アクセス トークンを取得するためのメンバーがあります (それが必要な場合) getAccessToken()

于 2011-01-10T16:14:35.127 に答える
2

どちらのログ ステートメントにも達していないという事実を説明するには、次のことを考慮してください。

行 ~8:

        am.getAuthToken(account, "com.facebook.auth.login", null, ConversationList.this,

... トークンがすぐに利用できる場合はトークンを返すことができます。多分それはあなたが探している答えですか?AccountManager のドキュメントを引用します。

以前に生成された認証トークンがこのアカウントとタイプに対してキャッシュされている場合は、それが返されます。それ以外の場合、保存されたパスワードが使用可能な場合は、それがサーバーに送信されて新しい認証トークンが生成されます。それ以外の場合、ユーザーはパスワードの入力を求められます。

于 2011-06-17T22:53:31.507 に答える
1

AccountManager.blockingGetAuthToken代わりに電話してみてください。それがうまくいけば、ここでもっと面白いことがあります...

また、マニフェストにUSE_CREDENTIALS権限が正しく設定されていることを確認してください。

于 2011-01-08T15:25:03.087 に答える
0

try { を am.getAuthToken の前に追加し、このメソッド宣言が終了する場所で例外をキャッチします。これにより、例外が発生する理由と場所がわかります

于 2011-01-04T13:12:27.737 に答える