1

こんにちは私は現在Android用のFacebookSDK3.0を使用しています。ここに最初にいくつかの事実があります。

  • app_idをAndroidManifest.xmlに配置する代わりに、プログラムでJavaコードにその値を設定します。したがって、セッションを処理するときは、次のヘルパーメソッドのようなものを使用します。

    if (session == null || session.isClosed()) {
        String applicationId = Persistent.getString(null, SocialUtil.FACEBOOK_APP_ID);
        session = new Session.Builder(Utils.ctx).setApplicationId(applicationId).build();
        Session.setActiveSession(session);
    }
    
  • ユーザーがFacebookでログインすると、セッションは多くのアクティビティで使用されるため、セッションのアプリケーションコンテキストを提供しました。

セッションのコンテキストでわかるように、アプリケーションオブジェクトであるUtils.ctxを提供します。Facebook SDKのネイティブUiLifecycleHelperは、セッションが存在しないときにActivityを使用してセッションを作成するため、元のUiLifeCycleHelperに対処し、切り替えるだけで、独自のFBIUiLifecycleHelperを作成しました。

    session = new Session(activity);

    String applicationId = Persistent.getString(null, SocialUtil.FACEBOOK_APP_ID);
    session = new Session.Builder(Utils.ctx).setApplicationId(applicationId).build();

ただし、アクティビティでセッション状態が変更されるたびに、コールバック関数がまったく呼び出されないようです。セッションを扱うときに、アクティビティコンテキストではなくアプリケーションコンテキストを使用したためだと思います。

私の質問は、1。セッションのコンテキストにアプリケーションコンテキストまたはアクティビティコンテキストを提供する場合、どのように異なりますか?2.いつ推奨される方法はどれですか?なぜ?3.ユーザーログインがアクティビティコンテキストでセッションを作成したとしましょう。このセッションがsetActiveSession()によって設定されると、getActiveSession()を呼び出すことにより、このセッションを他のアクティビティで使用できますか?たぶん、セッションコンテキストにアプリケーションコンテキストを実際に使用する必要はありませんか?

ありがとう!

4

1 に答える 1

1

1.および2.の場合、セッションを作成するコンテキストは重要ではなく、任意のコンテキスト(アプリ、サービス、またはアクティビティ)にすることができます。ただし、open *メソッドのいずれかを呼び出す場合は、OpenRequestを介してそこにアクティビティまたはフラグメントを渡す必要があります。セッションが状態間を移行していない場合は、そこに問題があります(実際にセッションを開いているときにコードを追加して、アクティビティまたはフラグメントのいずれかでonActivityResultメソッドをオーバーライドしていることを確認してください)。

3.の場合、はい、どこからでもgetActiveSessionを呼び出すことができます(アクティビティ、フラグメント、またはアプリ内の他のコード)。

于 2013-02-25T23:07:30.560 に答える