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 шт):
Смог решить проблему. Оказалось что я использовал не самую новую версию 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' и затем попробывал запустить приложение и о чудо всё работает как надо! Досих пор не понимаю почему ихняя документация вводит в заблуждение.