15

Facebook Android API 3.0 のドキュメントを読んでいますが、セッションとバックグラウンド アクティビティの関係がわかりません。すべての例で、「FacebookFragment」を拡張することになっています。私のアプリ全体が「SherlockFragment」を拡張していない場合は、それでいいので、オプションとして FacebookFragment を拡張することはありません。

SessionLoginExample のコードを使用し、Facebook とまったく同じ文字列の文字列に AppID を配置すると、次のようになります。

エラー

10-22 17:04:26.464: E/AndroidRuntime(5491): FATAL EXCEPTION: main
10-22 17:04:26.464: E/AndroidRuntime(5491): java.lang.RuntimeException: Unable to start activity ComponentInfo{nl.specsavers.moodspecs/nl.specsavers.moodspecs.LauncherActivity}: java.lang.NullPointerException: Argument applicationId cannot be null

アプリがインストールされているかどうか、およびセッションが存在するかどうかの初期チェックを設定しようとしています。

 Settings.addLoggingBehavior(LoggingBehaviors.INCLUDE_ACCESS_TOKENS);

    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
        }

    } 

どうにかして App ID を実際に問題のない場所に配置できるようにする必要がありますが、配置する場所が見つかりません。

SherlockFragment を使用しているため、FacebookFragment の拡張を回避できるかどうかを知る必要があります。

Tnx。

4

2 に答える 2

54

FacebookFragment はパブリックではなく、アプリケーションによる使用を意図していません。

ただし、サンプルはほとんど FacebookActivity を使用しており、FacebookActivityを拡張する必要はありません。あなたが言及したように、SessionLoginSample はこれを示しています。FacebookActivity を使用していない場合は、セッションのシリアル化を処理し、onActivityResult をオーバーライド/転送する必要があります。

そうは言っても、あなたが直面している主な問題はapplicationIdの設定にあるようです。コードまたはメタデータで applicationId を設定できます。

コード内:

コードで設定するには、アプリ ID を含む文字列定数 MY_APP_ID を定義し、次の行を置き換えます。

session = new Session(this);

と:

session = new Session.Builder(this).setApplicationId(MY_APP_ID).build();

メタデータ:

メタデータに設定するには、次を AndroidManifest.xml の application タグ内でアクティビティ タグの外側に追加します。

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>

次に、values/strings.xml で、アプリ ID を持つ app_id の値を追加します。

<string name="app_id">1234567890</string>
于 2012-10-22T19:51:24.743 に答える
16

何からも継承する必要はありません。コードで app_id を指定しない場合は、アプリケーションのメタデータ (および string.xml) で指定する必要があります。https://developers.facebook.com/docs/reference/android/3.0/Session#APPLICATION_ID_PROPERTYを参照してください

AndroidManifest.xml に、以下を追加する必要があります。

<application android:label="@string/app_name" ...>
  ... other activity stuff here ...
  <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
</application>

次に、string.xml に app_id を文字列として追加します。

于 2012-10-22T16:46:11.910 に答える