簡體   English   中英

使用Android SDK為Facebook登錄啟用Chrome自定義標簽

[英]Enabling Chrome Custom Tabs for Facebook login using Android SDK

我在我的應用程序中使用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_scheme被添加到strings.xml ,其值為'fb + app_id'

身份驗證過程正常,沒有任何問題。
唯一值得關注的是,當我點擊登錄按鈕時,登錄對話框不會在Chrome自定義選項卡中打開,而是以通常的webview對話框格式打開。

此處是否缺少某些內容可添加到項目中以啟用Chrome自定義標簽?

您可以查看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即可了解您的應用程序出了什么問題。

如果isCustomTabsEnabled為false,則表明您的應用配置存在問題。 App Review下的Facebook控制台上驗證應用程序是否正常並可供公眾使用。

如果isChromeCustomTabsSupported為false,則可能是您的舊版Chrome不支持Chrome自定義標簽,請嘗試更新到最新版本的Chrome。

如果hasCustomTabRedirectActivity為false,則集成中存在一些問題,請驗證您是否正確遵循了指南中指示的所有步驟。 同時驗證APP_ID與字符串facebook_app_id使用的相同,否則登錄對話框將不使用Chrome自定義選項卡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM