Невозможно использовать собственное приложение Facebook с Gigya Social Login в Android

Мне трудно интегрировать нативную версию Facebook с входом в социальную сеть Gigya. Я уже могу аутентифицировать пользователя, если он проходит через браузер.

Я использую код, аналогичный примерам приложений, представленным в документации Gigya.

Я попытался заменить ключи API и идентификаторы приложений в образце приложения своими ключами и идентификаторами, и я заставил собственное приложение Facebook работать, когда я использую presentNativeLogin(), поэтому я исключил, что это мой идентификатор приложения Facebook.

Файл build.gradle уровня приложения

//Gigya
implementation files('src/main/java/com/example/myproj/libs/gigya-android-sdk-4.0.1.aar')

//Facebook
implementation 'com.facebook.android:facebook-android-sdk:4.41.0'

//Google Sign In
implementation 'com.google.android.gms:play-services-auth:16.0.1'

Манифест

<meta-data
    android:name="com.facebook.sdk.ApplicationId"
    android:value="MY APP ID" />

<meta-data
    android:name="apiKey"
    android:value="MY API KEY" />

<meta-data
    android:name="apiDomain"
    android:value="MY DOMAIN"/>

<meta-data
    android:name="googleClientId"
    android:value="MY CLIENT ID" />

<activity
    android:name="com.gigya.android.sdk.ui.HostActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:theme="@style/Theme.AppCompat.Translucent" />

<activity
    android:name="com.gigya.android.sdk.ui.WebLoginActivity"
    android:allowTaskReparenting="true"
    android:launchMode="singleTask"
    android:theme="@style/Theme.AppCompat.Translucent">
    <intent-filter android:label="web_login_redirect">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:host="gsapi"
            android:pathPrefix="/com.example.myproj/login_result"
            android:scheme="gigya" />
    </intent-filter>
</activity>

<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"
    tools:replace="android:theme" />

onCreate в моем классе приложений

public void onCreate() {
    super.onCreate();

    //Gigya Implementation
    // Allow WebViews debugging.
    WebView.setWebContentsDebuggingEnabled(true);

    // Enable Gigya logs in debug mode.
    GigyaLogger.setDebugMode(true);
    // Crucial. Call before first instantiation of the SDK.
    Gigya.setApplication(this);
    Gigya.getInstance(MyAccount.class);
}

Процесс входа

private val gigya: Gigya<MyAccount> = getInstance(MyAccount::class.java)

fun processGigyaLogin(loginProvider: String) {
    val providers = listOf(FACEBOOK, GOOGLE)
    gigya.socialLoginWith(providers, HashMap<String, Any>(), object : GigyaLoginCallback<MyAccount>() {
        override fun onSuccess(obj: MyAccount) {
            // Success
            Log.i("GIGYA-CDC", "Logged in using" + obj.socialProviders + " as: " + obj.profile!!.firstName + " " + obj.profile!!.lastName + ", " + obj.profile!!.email)
        }

        override fun onConflictingAccounts(response: GigyaApiResponse, resolver: ILinkAccountsResolver) {
            Log.d("GIGYA-CDC", "onConflictingAccounts")
            resolver.linkToSocial(resolver.conflictingAccounts.loginProviders[0])
        }

        override fun onPendingRegistration(response: GigyaApiResponse, resolver: IPendingRegistrationResolver) {
            Log.d("GIGYA-CDC", "onPendingRegistration")
        }

        override fun onError(error: GigyaError) {
            Log.e("GIGYA-CDC", error.localizedMessage + " Status Code: " + error.statusCode + " Error Code: " + error.errorCode)
        }
    })
}

Я также пытался сделать это в коде Java и получил те же результаты. Итак, моя текущая проблема заключается в том, что пример приложения работает с моими ключами, но когда я пытаюсь реализовать тот же код, он не работает.


person kobowo    schedule 02.08.2019    source источник


Ответы (1)


Я нашел исправление. Вам необходимо использовать strings.xml для определения идентификатора вашего приложения, иначе приложение Facebook не откроется. До этого я жестко кодировал его, так как в конечном итоге мне нужно было использовать gradle.properties, чтобы скрыть строку. Это создает для меня новую проблему, потому что теперь мне нужно защитить идентификатор приложения от strings.xml.

Итак, из:

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

Это стало:

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

Чтобы было ясно, в документации упоминалось, что его рекомендовалось поместить в файл strings.xml, но никогда не говорилось, что это требуется.

person kobowo    schedule 05.08.2019