首页 > 解决方案 > 无法在 Android 中将 Facebook 原生应用程序与 Gigya Social Login 一起使用

问题描述

我很难将 Facebook 原生与 Gigya 社交登录集成。如果他们通过浏览器继续,我已经能够对用户进行身份验证。

我正在使用类似于 Gigya 文档中提供的示例应用程序的代码。

我尝试用我的密钥和 ID 替换示例应用程序上的 API 密钥和应用程序 ID,并且当我使用 Facebook 原生应用程序时,presentNativeLogin()我已经排除了它是我的 Facebook 应用程序 ID。

应用级 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 代码中执行此操作并得到相同的结果。所以我目前的问题是示例应用程序可以使用我的键,但是当我尝试实现相同的代码时它不起作用。

标签: androidfacebookgigya

解决方案


我找到了解决办法。您需要使用strings.xml来定义您的应用程序 ID,否则它不会打开 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文件中,但从未说过它是必需的。


推荐阅读