Android Facebook密钥哈希 - “remote_app_id与存储的ID不匹配”

时间:2013-09-11 21:06:38

标签: java android facebook hash app-id

我正在尝试实施Facebook登录,然后允许用户通过应用发布状态更新并向Facebook分享详细信息。我(想)用户无法成功登录Facebook。以下是用户经历的过程:

  • 用户点击“登录”按钮
  • 用户成功登录
  • 向用户显示以下窗口

status pic

  • 当用户点击Share按钮时,会显示以下错误消息:(#404) remote_app_id does not match stored id

我已经使用以下2个命令行获得了调试密钥库和释放密钥库的密钥哈希值。

调试密钥库

keytool -exportcert -alias androiddebugkey -keystore C:\Users\lyonsmg\.android\debug.keystore | C:\OpenSSL-Win64\bin\openssl.exe sha1 -binary | C:\OpenSSL-Win64\bin\openssl.exe base64

发布密钥库

keytool -exportcert -alias C:\Users\lyonsmg\matt\_keystores_and_passwords\BibleTriviaLite_keystore -keystore C:\Users\lyonsmg\matt\_keystores_and_passwords\BibleTriviaLite_keystore | C:\OpenSSL-Win64\bin\openssl.exe sha1 -binary | C:\OpenSSL-Win64\bin\openssl.exe

我使用android作为调试密钥库的密码,使用我的私有密码作为发布密钥库。我在Facebook的开发者设置和Facebook App Dashboard中放置了两个产生的关键哈希值。它是Facebook Android SDK文档告诉我的两个地方。

我的app_id位于Android Manifest的Facebook App Dashboard中。下面是我的Android Manifest,您可以看到我的app_id找到的2个点。您可以在代码中找到@string/app_id

Android Manifest

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="matt.lyons.bibletrivia.lite"
    android:versionCode="13"
    android:versionName="2.1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:icon="@drawable/icon_blue_bg"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.google.android.gms.games.APP_ID"
            android:value="@string/app_id" />
        <activity
            android:name=".SplashScreen"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />
                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity 
            android:name="com.google.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
        <activity
            android:label="@string/app_name"
            android:name=".About"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".Categories"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".Question"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".Quiz"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".QuestionView"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".Results"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".Highscores"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".DatabaseHelper"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".ComingSoon"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".MainMenu"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".MyApplication"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".Levels"
            android:screenOrientation="portrait" />
        <activity
            android:label="@string/app_name"
            android:name=".GameType"
            android:screenOrientation="portrait" />
        <meta-data android:value="@string/app_id" android:name="com.facebook.sdk.ApplicationId"/>
        <activity android:label="@string/app_name" android:name="com.facebook.LoginActivity"></activity>
    </application>

    <uses-permission 
        android:name="android.permission.INTERNET" />
    <uses-permission 
        android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission 
        android:name="com.android.vending.BILLING" />
</manifest>

抱歉,我写了这么多,但我只是想覆盖我的所有基础并彻底!我的问题是,我做错了什么?为什么告诉我我的“remote_app_id”与我的“存储ID”不匹配?

2 个答案:

答案 0 :(得分:1)

您对value="@string/app_id"com.google.android.gms.games.APP_ID使用相同的com.facebook.sdk.ApplicationId

您的Facebook应用ID不可能与您的Google应用ID相同。您需要从Facebook App Dashboard获取Facebook应用程序ID。

答案 1 :(得分:0)

我遇到了同样的问题,我通过openssl生成的哈希码是错误的,然后我使用了这个功能,它有所帮助。希望它也能帮助你。

private void printKeyHash() {
    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo("YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {
        Log.e("KeyHash:", e.toString());
    } catch (NoSuchAlgorithmException e) {
        Log.e("KeyHash:", e.toString());
    }
}

使用日志中打印的哈希码并享受。快乐编码:)