12

実行時に変更できるアプリ設定に基づいて、別のFacebookアプリ(別のアプリケーションID)に接続する必要があるネイティブAndroidアプリがあります。

アプリがDEV、TEST、またはPRODを指すように設定できると想像してください。DEVを指す場合、FBアプリケーションIDは「1」である必要があります。TESTを指す場合、FBアプリケーションIDは「2」である必要があります。等

問題は、Facebook SDKのUiLifecycleHelperが、onCreateフェーズ中にAndroidManifest.xmlから「com.facebook.sdk.ApplicationId」を自動的に読み取ることです。これをプログラムで設定する方法はないようです。

UiLifecycleHelperを使用して、実行時に別のアプリケーションIDを指すことは可能ですか、それともセッションの手動管理にフォールバックする必要がありますか?

4

5 に答える 5

26

こんにちは私が知っているすべての上記の答えは正しいですolder sdk versionが、クラスfacebook sdk 4はありませんSession

この1行のコードを使用して簡単に行うことができます。

FacebookSdk.setApplicationId(APP_ID);

ありがとう!

于 2015-04-14T08:32:56.597 に答える
13

ここで私がプログラムでアプリケーションIDを設定するために使用したもの

    private Session.StatusCallback statusCallback = new SessionStatusCallback();

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String s=""+R.string.app_id;

    Session session = new Session.Builder(getBaseContext()).setApplicationId(s).build();

    Session.setActiveSession(session);

    if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
    }
}

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        // TODO Auto-generated method stub
        if(session.isOpened()){
            //Do your task
        }
    }
}
于 2013-06-10T02:16:16.713 に答える
3

GitHubでfacebook-android-sdkプロジェクトをフォークし、必要な変更を加えることにしました。誰かが興味を持っている場合は、変更を含むプルリクエストを送信しました、https://github.com/facebook/facebook-android-sdk/pull/294

于 2013-02-26T06:39:26.503 に答える
3

はい、プログラムで設定できます。Sessions $ Builderクラスを使用すると、プライベートコンストラクターの1つを使用せずにセッションを構築できます。

Session session = new Session.Builder(context).setApplicationId(applicationId).build();
于 2013-04-08T22:58:28.760 に答える
2

これを行うには、静的メソッドsetApplicationIdを呼び出すだけの簡単な方法があると思います。com.facebook.Settings.setApplicationId(facebookID);

そして、あなたは行ってもいいです。Builderを使用して手動でセッションを作成し、それをアクティブセッションとして設定する必要はありません。

欠陥の詳細:

設定クラスで設定したfacebookIDはgetMetadataApplicationIdcom.facebook.internal.Utility

public static String getMetadataApplicationId(Context context) {
        Validate.notNull(context, "context");

        Settings.loadDefaultsFromMetadata(context);

        return Settings.getApplicationId();
    }

これは、セッションを作成するためのすべての呼び出しで使用されます。

Session(Context context, String applicationId, TokenCachingStrategy tokenCachingStrategy,
            boolean loadTokenFromCache) {
        // if the application ID passed in is null, try to get it from the
        // meta-data in the manifest.
        if ((context != null) && (applicationId == null)) {
            applicationId = Utility.getMetadataApplicationId(context);
        }

        Validate.notNull(applicationId, "applicationId");
.
.
.
}

乾杯。

于 2014-11-12T16:14:20.477 に答える