3

FacebookログインをKindleFireAndroidアプリに統合しました。ほとんどの場合、問題なく動作します。ただし、一部のユーザーがFacebookログインを使用して登録しようとすると、「APpがFacebookログイン用に正しく構成されていません」というエラーで失敗することがあります。ハッシュキー、パッケージ名などを確認しましたが、すべて正しいです。私が言ったように、それはユーザーの95%のために働きます。それらのユーザーにとっては失敗し、繰り返し失敗します。Facebookの誰かがこの問題を解決するのを手伝ってくれる?感謝。(ところで、AndroidアプリのGoogle Playバージョンにも同じFacebookアプリを使用しており、ハッシュキーも異なります。GooglePlayアプリでこの問題が発生することはありませんでした。AmazonからKindleのハッシュキーを取得しました。)いずれかのデバイスで失敗し、一部のランダムなユーザーのデバイスでのみ失敗すると、デバッグメッセージを取得できませんでした。

PS:私はすでにスレッドアプリがFacebookログイン用に正しく構成されていないことを読みました:AndroidFacebook統合の問題。私は新しいユーザーです。あちらでこの質問をすることはできませんでした。

4

5 に答える 5

2

Amazon アプリストアのアプリの 1 つで同じ問題が発生しました。私たちの場合、次の 3 つの条件が真である場合にのみ問題が発生することがわかりました。

  • キンドル ファイア HD
  • Facebook アプリがインストールされ、ユーザーがログインしている
  • ユーザーは、[設定] -> [マイ アカウント] -> [ソーシャル アカウントの管理] から facebook にもログインしました

それは、あなたの場合、それが5%のケースでしか起こらない理由を説明するかもしれません.

私たちが知る限り、Amazon は .apk を辞任し、Facebook の Android アプリ キー ハッシュ チェックを破っています。

解決策は次のとおりです。

  1. アプリの Amazon .apk を取得する (送信したものではなく、Amazon アプリストアによって配布されたもの)
  2. .apk ファイルから署名証明書を抽出します
  3. エンコードされた証明書の SHA ダイジェストを Base64 エンコードする
  4. 結果の Base64 キー ハッシュを Facebook アプリの設定に追加します。

これで問題は解決しました。

.apk を取得するのは難しいことがわかりました。アプリケーションは、デバイスのファイル システムの /data/app フォルダーにあります。ただし、このディレクトリはリストに表示されないように保護されているため、探しているファイルの名前を知らない限り、うまくいきません。もちろん、デバイスをルート化できます。または、成功するまで、adb pull /data/app/<app-id><suffix>.apkサフィックスが空の文字列または-1,などのいずれかである場合、盲目的な運を試すことができます。-2例えば:

$ adb pull /data/app/com.example.game.apk
remote object '/data/app/com.example.game.apk' does not exist
$ adb pull /data/app/com.example.game-1.apk
remote object '/data/app/com.example.game-1.apk' does not exist
$ adb pull /data/app/com.example.game-2.apk
3658 KB/s (1085140 bytes in 0.289s)

このアプローチが失敗した場合、ルート化が唯一の選択肢になる可能性があります。

.apk ファイルを取得したら、以下のコードを使用してキー ハッシュを取得できます。として保存しMain.java、でコンパイルしjavac Main.javaて実行しますjava Main <APK>。例:

$ javac Main.java
$ java Main com.example.game-1.apk
com.example.game-1.apk: 478uEnKQV+fMQT8Dy4AKvHkYibo=

478uEnKQV+fMQT8Dy4AKvHkYibo=Facebook アプリ設定のキー ハッシュに追加すると、問題が解決します。私たちが得たのと同じハッシュを他の人が見つけるかどうか興味があります (これは、すべての Amazon ゲームが同じキーで署名されていることを意味します)。私たちの場合、ハッシュはwwYPegrz....

コードは次のとおりです。

import java.security.MessageDigest;
import java.security.cert.Certificate;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

import sun.misc.BASE64Encoder;

public class Main {
    public static void main(String[] args) throws Exception {
        for (String jarFilename : args)
            extractHash(jarFilename);
    }

    private static void extractHash(String jarFilename) throws Exception {
        BASE64Encoder base64 = new BASE64Encoder();
        MessageDigest sha1 = MessageDigest.getInstance("SHA");
        Set<Certificate> certificates = new HashSet<Certificate>();
        JarFile jarFile = new JarFile(jarFilename);
        for (JarEntry jarEntry : Collections.list(jarFile.entries())) {
            jarFile.getInputStream(jarEntry).skip(Long.MAX_VALUE);
            Certificate[] certs = jarEntry.getCertificates();
            if (certs == null)
                continue;
            certificates.addAll(Arrays.asList(certs));
        }
        System.out.printf("%s:", jarFilename);
        for (Certificate cert : certificates) {
            byte[] digest = sha1.digest(cert.getEncoded());
            System.out.printf(" %s", base64.encode(digest));
        }
        if (certificates.isEmpty())
            System.out.printf(" NOT SIGNED!");
        System.out.println();
        jarFile.close();
    }
}
于 2013-03-13T23:31:14.517 に答える
2

@Blanka の答えは技術的には正しいですが、もっと簡単な方法を見つけました。Amazon 開発者コンソールに移動して、赤い四角形で強調表示した値をコピーするだけです。SHA1 ベース 64

于 2014-03-21T20:26:03.820 に答える
1

ブランカのソリューションが機能します。

ただし、Kindle Fire で問題を再現できる場合は、別の簡単な解決策があります。

Facebook から送信された認証要求を LogCat から取得します。

03-13 15:21:19.360: D/WebCore(26863): *-* Total load time: 1535.31 ms, thread time: 287.00 ms for
https://m.facebook.com/dialog/oauth?android_key=XXXXXXXXXXXXX&calling_package_key=<app_package_id>
&client_id=YYYYYYYYYYYY&display=touch&redirect_uri=fbconnect%3A%2F%2Fsuccess&scope=email%
2Cpublish_stream&type=user_agent&_rdr

android_keyパラメータはHash Keyアプリのです。このキーを Facebook ダッシュボードに追加する必要があります。

注意: https リクエストのハッシュのエンコード形式は、Facebook が必要とするものとは異なる場合があることに注意してください。

于 2013-03-14T14:35:57.330 に答える
0

ハッシュキーの問題だと思いますが、私も同じ問題に直面しました。ダウンロードしたopensslと生成されたハッシュによってこれを解決しました。次の回答で試して くださいhttps://stackoverflow.com/a/14826036/1258999

于 2013-03-14T05:10:43.917 に答える
0

Kindle またはその他のデバイスでこれを処理するさらに簡単な方法を発見しました。FB アプリがインストールされていて (私の場合、他のサインイン パスは試していませんが、うまくいくのでしょうか?)、使用しているログインが、developer.facebook.com の FB アプリで開発者としてリストされている場合は、問題のアプリ、ハッシュは、アプリ自体で表示されるエラー メッセージに表示されます。「ハッシュ キー xxxxxxxxxxxxxxxxx が認識されませんでした。アプリ ID yyyyyyyyyyyy のデベロッパー ポータルでハッシュ キーを管理してください」という趣旨のメッセージが表示されます。

テキストが正しくない場合は申し訳ありません。問題を自分で修正する前にスクリーンショットを撮っていませんでしたが、それが要点です。

于 2015-04-13T05:02:57.203 に答える