1

Facebook でアプリのログイン画面にアクセスしようとしています。アクティビティが開始されると、画面に facebook の読み込みページが表示されてから消え、ページが R.layout.main に設定されます。

ここでポイントを逃しているに違いありませんが、ユーザーがログインするためのアプリログインページにアクセスするにはどうすればよいですか。

https://developers.facebook.com/docs/mobile/android/build/#enablessoに基づくチュートリアルに従っています

参考までに - APP_ID を削除しました

package com.example.facebook;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;

import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;


public class MyGreatActivity extends Activity {

    Facebook facebook = new Facebook("APP_ID");
    private SharedPreferences mPrefs;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /*
         * 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);
        }

        /*
         * Only call authorize if the access_token has expired.
         */
        if(!facebook.isSessionValid()) {

            facebook.authorize(this, new String[] {}, new DialogListener() {
                @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();
                }

                @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);
    }
}

ご協力いただきありがとうございます。

4

4 に答える 4

5

お使いのモバイルには Facebook ネイティブ アプリが含まれているようです。そのため、Logcat でlogin failed invalid key エラーがスローされる可能性があります。

シングル サインオンが原因で問題が発生した場合は、Android キー ハッシュを作成し、アプリに登録する必要があります。

この手順に従ってください。

シングル ラインでシングル サインオンを無効にでき、ハッシュ キーの作成を使用する必要はありませんが、これは推奨される処理方法ではありません

-1またはFacebook.FORCE_DIALOG_AUTHauthorize()に追加します

facebookObject.authorize(context, PERMISSIONS,Facebook.FORCE_DIALOG_AUTH,new LoginListener());
于 2012-04-24T15:03:13.023 に答える
1

これをどこで読んだかわかりませんが、どこかにバグがある可能性があるので、authorize() の activityCode を -1 に設定しください

使用方法: authorize(Activity アクティビティ、String[] パーミッション、int activityCode、DialogListener リスナー)

facebook.authorize(this, new String[] {}, -1, new DialogListener(){..});

ActivityGroupsを使用する場合は、現在のアクティビティ自体ではなく、グループを使用してください。

 facebook.authorize(activity.getParent(), new String[] {}, -1, new DialogListener(){..});

(あなたの活動の親がActivityGroupであることを期待しています)

于 2012-04-24T14:58:09.690 に答える
1

変化する

facebook.authorize(this, new String[] {}, new DialogListener()..etc 

facebook.authorize(this, new String[] {}, Facebook.FORCE_DIALOG_AUTH,
                    new DialogListener())..etc

これにより、ダイアログが強制的に表示されます。

于 2012-04-24T14:59:29.423 に答える
0

<uses-permission android:name="android.permission.INTERNET"/>マニフェストに設定しましたか?最新バージョンの fb アプリがインストールされていますか? 「APP_ID」を自分の ID に (削除するだけでなく) 置き換えましたか?
さらに、logcat にエラーが記録されていますか? 通常、これは機能するはずです...あなたはuiThreadにいます、あなたのコードはsampleCodeとそれほど違いはありません...そしてねえ、それはrocketScienceではありません...

于 2012-04-24T14:42:21.057 に答える