9

私のアプリでFacebook SDKバージョン4.11.0を使用しています。Android SDKを使用したFacebookログイン用Chromeカスタムタブの有効化

Official docs pageに記載されている手順に従い、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'FB + APP_ID'

認証プロセスがどの問題なく正常に動作している値でstrings.xmlに追加されます。
ログインボタンをクリックするだけですが、ログインダイアログはChromeのカスタムタブでは表示されませんが、通常のウェブビューのダイアログ形式で表示されます。

Chromeカスタムタブを有効にするためにプロジェクトに追加されていないものがありますか?

クロームカスタムタブは、このスニペットでは動作しませんなぜあなたがチェックすることができ
+0

端末にインストールされているChromeのバージョンでChromeのカスタムタブがサポートされていますか? –

+0

はい!私はFacebookのSDK 4.11も使用しているプレイストアからダウンロードした別のアプリを持っています。そのアプリでfacebookログインボタンをクリックすると、カスタムクロームタブで開きます。しかし、私の場合はありません。 – Droidwala

答えて

9

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()); 
} 

これらはクロームカスタムタブ打ち上げ前のFacebook SDKによって呼び出されるメソッドですので、単にあなたが何を理解することができますisCustomTabsAllowedを呼び出しますあなたのアプリで間違っている。

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

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

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

+0

はい、 'fb_login_protocol_scheme'は値' fbAPP_ID'で正しいです。すべての認証プロセスが正常に動作しています。プロジェクト設定で開発キーのハッシュを使用しているためChromeカスタムタブが機能しません。つまり、アプリケーションはプレイストアにデプロイされていません? **注:**また、フェイスブックアンドロイドアプリが電話にインストールされている場合、Facebookのアンドロイドアプリ内のフェイスブックログインページにリダイレクトされます。貴重な時間をありがとう! :) – Droidwala

+0

私はちょうど答えを更新しました。あなたのテストの結果を教えてください! –

+0

'isCustomTabsAllowed'がfalseを返しています(' isCustomTabsEnabled'メソッドがfalseを返すため)。なぜ 'isCustomTabsEnabled'がfalseを返すのかを少し詳しく調べる必要がありますか?あなたの助けをありがとう。本当に感謝します!あなたがそのメソッドがfalseを返す理由を知ることができれば、私に教えてください。もう一度ありがとう! – Droidwala

関連する問題