Хэш ключа Android Facebook remote_app_id не соответствует сохраненному идентификатору

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

  • Пользователь нажимает кнопку входа
  • Пользователь успешно входит в систему
  • Ниже окно отображается для пользователя

статусное фото

  • Когда пользователь нажимает кнопку Share, появляется следующее сообщение об ошибке: (#404) remote_app_id does not match stored id

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

Отладка хранилища ключей

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. Это 2 места, которые документы Facebook Android SDK говорят мне разместить.

У меня есть app_id, который находится на панели приложений Facebook в моем Android Manifest. Ниже приведен мой манифест Android, и вы можете увидеть 2 места, где находится мой app_id. Вы можете найти его в коде как @string/app_id.

Манифест Android

<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» не соответствует моему «сохраненному идентификатору»?


person Matt    schedule 11.09.2013    source источник
comment
Я застрял в той же проблеме... Пожалуйста, дайте мне знать, если вы ее решите! :)   -  person Angudroid    schedule 07.10.2013
comment
@AdrienCerdan, я так и не исправил это. Я просто должен был сдаться и взять его на время.   -  person Matt    schedule 06.12.2013
comment
я починил это !! Для режима выпуска ваш -alias - это не путь, а имя ключа, которое вы видите при экспорте подписанного приложения с помощью eclipse, это имя вашего псевдонима !!   -  person Angudroid    schedule 06.12.2013


Ответы (2)


Вы используете один и тот же value="@string/app_id" для com.google.android.gms.games.APP_ID и com.facebook.sdk.ApplicationId.

Ваш идентификатор приложения Facebook не может совпадать с идентификатором вашего приложения Google. Вам необходимо получить идентификатор приложения Facebook из панели управления приложениями Facebook.

person Mirko N.    schedule 11.09.2013
comment
Такое же сообщение об ошибке появляется после того, как я исправил 2 указанных вами app_id. И спасибо за исправление! Я уверен, что это исправило будущую ошибку, которая у меня была бы. - person Matt; 12.09.2013

Я столкнулся с той же проблемой, хеш-код, который я сгенерировал через 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());
    }
}

Используйте хеш-код, который печатается в логах, и наслаждайтесь. Удачного кодирования :)

person Syed Raza Mehdi    schedule 15.08.2014