Android: концепция KeyHash для Facebook SDK?

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

// Add code to print out the key hash
        try {
            System.out.println("Inside try for keyhash");
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.myapp.facebookint", 
                    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));
                System.out.println("KeyHash:"+Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
        } catch (NameNotFoundException e) {
            System.out.println("keyhash name not found");
        } catch (NoSuchAlgorithmException e) {
            System.out.println("keyhash algo not found");
        }

Он дал мне хеш-ключ, который я вставил в настройки приложения Facebook, без разрешения! Теперь мне интересно узнать о концепции использования keyhash, как ее идентифицирует Facebook? и что произойдет, если я просто загружу приложение, используя ключ отладки?

У меня сложилось впечатление, что facebook сопоставляет хеш-ключ с подписями самого приложения, и если оба они подписаны с одним и тем же хранилищем ключей, то это позволяет приложению пройти аутентификацию, но, похоже, это не так. Когда я экспортировал приложение, как будто готовил его к выпуску, загрузил apk в телефон через проводник и попытался установить и запустить оттуда, это было так же, как в режиме отладки.

Может ли кто-нибудь пролить свет на это.


person Hammad Tariq    schedule 31.07.2013    source источник


Ответы (1)


Да, это действительно так. Facebook знает подписи ваших приложений и проверяет их, чтобы узнать, является ли приложение, пытающееся аутентифицироваться, правильным. Я предполагаю, что что-то в моем System.out.println было неправильным, я использовал следующий код из https://stackoverflow.com/a/9600642/243354

Вы можете вставить этот код, экспортировать apk, поскольку вы подписываете его для выпуска, затем загрузить этот apk в эмулятор и проверить logcat на наличие тега хеш-ключа, как только он будет найден, обновить настройки facebook.

person Hammad Tariq    schedule 31.07.2013