CustomTabActivity в FacebookSDK не запускается

Пытаюсь интегрировать Facebook SDK в своё приложение и сделал все как было написано в документации. Но немогу справиться с одной проблемой. При попытке входа то вместо того чтобы перекидывать в CustomTabActvity открывается обычное окно для входа в Facebook где написано сообщение что вход через этот браузер (WebView насколько я понял) не поддерживается.

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

    <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name" />
    <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>
    callbackManager = CallbackManager.Factory.create();
        LoginManager loginManager = LoginManager.getInstance();
        loginManager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        try {
                            String email = object.getString("email");
                        } catch (JSONException e) {
                            Toast.makeText(context, "Произошла ошибка", Toast.LENGTH_SHORT).show();
                        }

                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "email");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onCancel() {
                Toast.makeText(context, "Вход в аккаунт Facebook был отменён", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(context, "Похоже произошла неизвестная ошибка", Toast.LENGTH_SHORT).show();
            }
        });
        Button facebookAuthBtn = view.findViewById(R.id.facebook_button);
        facebookAuthBtn.setOnClickListener(v -> {
            if (isCustomTabsAllowed(context)) {
                loginManager.logInWithReadPermissions(this, Collections.singletonList("email"));
            } else {
                Toast.makeText(context, "Обновите или установите самую новую версию Chrome", Toast.LENGTH_SHORT).show();
            }
        });

Нашёл был также в интернете как сделать проверку доступны ли эти вкладки и при проверке они доступны.

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.println(Log.ERROR, "FACEBOOK ERROR", "isCustomTabsEnabled false");
        isCustomTabsAllowed = false;
    }

    if (!isChromeCustomTabsSupported(context)) {
        Log.println(Log.ERROR, "FACEBOOK ERROR", "isChromeCustomTabsSupported false");
        isCustomTabsAllowed = false;
    }

    if (!Validate.hasCustomTabRedirectActivity(context)) {
        Log.println(Log.ERROR, "FACEBOOK ERROR", "hasCustomTabRedirectActivity false");
        isCustomTabsAllowed = false;
    }
    return isCustomTabsAllowed;
}

private boolean isCustomTabsEnabled(Context context) {
    final String appId = Utility.getMetadataApplicationId(context);
    final FetchedAppSettings settings = FetchedAppSettingsManager.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 всё ещё перекидывает в обычный WebView вместо вкладок в браузере?


Ответы (1 шт):

Автор решения: Snuiper228

Смог решить проблему. Оказалось что я использовал не самую новую версию Facebook SDK. Почему-то в официальной документации от Facebook говорится что нужно вставить такую зависимость implementation 'com.facebook.android:facebook-login:[8.1)'. Я был вставил делал как всё было написанно в документации но без успешно окно входа в Facebook всё ещё открывалось в WebView. После долгих поисков я решил зайти в GitHub на Facebook страничку (https://github.com/facebook/facebook-android-sdk) и там почитав увидел что в INSTALLATION отсеке было написано какие зависимости нужно добавить. Я добавил эту т. к. мне нужно было только вход по Facebook: implementation 'com.facebook.android:facebook-login:latest.release' и затем попробывал запустить приложение и о чудо всё работает как надо! Досих пор не понимаю почему ихняя документация вводит в заблуждение.

→ Ссылка