12

アプリで Facebook SDK バージョン 4.11.0 を使用しています。

公式ドキュメント ページに記載されている手順に従って、マニフェスト ファイル内に次のものを追加して、Chrome カスタム タブを有効にしました。

<activity
    android:name="com.facebook.FacebookActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<activity
    android:name="com.facebook.CustomTabActivity"
    android:exported="true">
    <intent-filter>
       <action android:name="android.intent.action.VIEW" />
       <category android:name="android.intent.category.DEFAULT" />
       <category android:name="android.intent.category.BROWSABLE" />
       <data android:scheme="@string/fb_login_protocol_scheme" />
    </intent-filter>
</activity>

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

fb_login_protocol_schemestrings.xml「fb+app_id」で追加されます

認証プロセスは問題なく正常に機能しています。
唯一の懸念は、ログイン ボタンをクリックすると、ログイン ダイアログが Chrome カスタム タブではなく、通常の Web ビュー ダイアログ形式で開かれることです。

Chrome カスタム タブを有効にするためにプロジェクトに追加する必要があるものはありますか?

4

1 に答える 1

10

このスニペットで Chrome カスタム タブが機能しない理由を確認できます。

private static final String CUSTOM_TABS_SERVICE_ACTION = "android.support.customtabs.action.CustomTabsService";
private static final String CHROME_PACKAGE = "com.android.chrome";

private boolean isCustomTabsAllowed(Context context) {
    boolean isCustomTabsAllowed = true;

    if (!isCustomTabsEnabled(context)) {
        Log.d(TAG, "isCustomTabsEnabled false");
        isCustomTabsAllowed = false;
    }

    if (!isChromeCustomTabsSupported(context)) {
        Log.d(TAG, "isChromeCustomTabsSupported false");
        isCustomTabsAllowed = false;
    }

    if (!Validate.hasCustomTabRedirectActivity(context)) {
        Log.d(TAG, "hasCustomTabRedirectActivity false");
        isCustomTabsAllowed = false;
    }

    return isCustomTabsAllowed;
}

private boolean isCustomTabsEnabled(Context context) {
    final String appId = Utility.getMetadataApplicationId(context);
    final Utility.FetchedAppSettings settings = Utility.getAppSettingsWithoutQuery(appId);
    return settings != null && settings.getCustomTabsEnabled();
}

private boolean isChromeCustomTabsSupported(final Context context) {
    Intent serviceIntent = new Intent(CUSTOM_TABS_SERVICE_ACTION);
    serviceIntent.setPackage(CHROME_PACKAGE);
    List<ResolveInfo> resolveInfos =
            context.getPackageManager().queryIntentServices(serviceIntent, 0);
    return !(resolveInfos == null || resolveInfos.isEmpty());
}

これらは、Chrome カスタム タブを起動する前に Facebook SDK によって呼び出されるメソッドであるため、呼び出すだけisCustomTabsAllowedでアプリの問題点を理解できます。

が false の場合isCustomTabsEnabled、アプリの構成に問題があります。Facebook コンソールの[アプリ レビュー]セクションで、アプリが公開されて公開されていることを確認します。

が false の場合isChromeCustomTabsSupportedは、Chrome カスタム タブをサポートしていない古いバージョンの Chrome を使用している可能性があります。最新バージョンの Chrome に更新してみてください。

が false の場合hasCustomTabRedirectActivity、統合にいくつかの問題があります。ガイドに示されているすべての手順に正しく従ったことを確認してください。また、APP_ID が文字列で使用されているものと同じであることを確認してください。facebook_app_idそうしないと、ログイン ダイアログで Chrome カスタム タブが使用されません。

于 2016-05-06T09:48:38.613 に答える