0

Facebook にログインできる小さな Android アプリがあり、携帯電話にも Facebook アプリがインストールされています。Facebook ログインのコードは次のとおりです。

    if(access_token != null && access_token != "")
        facebook.setAccessToken(access_token);

    if(expires != 0)
        facebook.setAccessExpires(expires);

    if(!facebook.isSessionValid()) 
    {
        facebook.authorize(this, new String[] { "email", "publish_checkins", "publish_stream" }, new DialogListener() 
        {
            public void onComplete(Bundle values) 
            {
                /*
                if (GlobalData.user != null)
                {
                    GlobalData.user.fbToken = facebook.getAccessToken();
                    GlobalData.user.fbTokenExpires = facebook.getAccessExpires();
                    dataSource.addUser(GlobalData.user);
                }
                else */

                gatherFacebookData();
            }

            public void onFacebookError(FacebookError error) 
            {
                Toast.makeText(context, "Error: " + error, Toast.LENGTH_SHORT).show();
                return;
            }

            public void onError(DialogError e) 
            {
                Toast.makeText(context, "Error: " + e, Toast.LENGTH_SHORT).show();
                return;
            }

            public void onCancel() 
            {
                Toast.makeText(context, "Canceled", Toast.LENGTH_SHORT).show();
                return;
            }
        });
    }
    else
        this.gatherFacebookData();

Facebook アプリをインストールする前は、アプリ内で Facebook SSO を問題なく使用できました。しかし、「Facebookでログイン」ボタンをクリックすると、ポップアップウィンドウがロード画面で点滅し、すぐに消えます。DialogListener 関数は呼び出されないため、何が起こるかわかりません。Logcat はまったくエラーを表示しません。

私は何を間違っていますか?

ありがとう!

4

2 に答える 2

3

このコード facebook.authorize(this, permissions, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener()); を使用してください。

于 2013-05-30T04:12:42.070 に答える
0

access_token を保存するには、次のコード スニペットをメソッドに追加しますonComplete(メソッドが含まれていないため、メソッドが何であるかはわかりませんgatherFacebookData()

            @Override
            public void onComplete(Bundle values) {
                SharedPreferences.Editor editor = mPrefs.edit();
                editor.putString("access_token", facebook.getAccessToken());
                editor.putLong("access_expires", facebook.getAccessExpires());
                editor.commit();
            }

ご覧のとおり、ユーザーの access_token を SharedPreferences に保存して、をチェックする前にonCreateメソッドで次のことを行います。if (!facebook.isSessionValid())

    /*
     * Get existing access_token if any
     */
    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);
    if(access_token != null) {
        facebook.setAccessToken(access_token);
    }
    if(expires != 0) {
        facebook.setAccessExpires(expires);
    }

それが役立つかどうか教えてください。

于 2012-08-02T06:42:09.990 に答える