2

Google Play でアプリをリリースしようとしています。アプリに Facebook ログインがあります。昨日まで、アプリケーションを実行するまではすべて正常に機能していましたdebug.keystore。しかし、自分のリリース キーを使用してアプリケーションに署名すると、Facebook がログインせず、その理由がわかりません。

このリンクをたどり、すべての方法を実行しました: so:key-hash-for-android-facebook-app

マシンを変更し、プラットフォーム (windows および mac osx ML) も変更して解決しましたが、同じ問題が発生しました。ログインしません。以下のコードは、debug.keystore を使用するときに適切なハッシュ キーを提供します。異なるキーを使用してもアプリケーションに署名すると、同じハッシュキーが得られます (これは、取得したキーが間違っているという多くの試行錯誤の末に結論に達したものです)。 )

PackageInfo info;
try {
    info = getPackageManager().getPackageInfo("com.you.name", PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md;
        md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String something = new String(Base64.encode(md.digest(), 0));
        //String something = new String(Base64.encodeBytes(md.digest()));
        Log.e("hash key", something);
    }
} catch (NameNotFoundException e1) {
    Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
    Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
    Log.e("exception", e.toString());
}

リリース キーを使用してアプリケーションに署名するときに必要な追加の手順はありますか。助けてください。

4

5 に答える 5

7

デバッグ環境とリリース環境を管理するための素晴らしいソリューションを見つけました。

1.次のコマンドを使用して、デバッグ用に 2 つのハッシュを生成します。

keytool -exportcert -alias androiddebugkey -keystore c:\Users\YourUser\.android\debug.keystore | openssl sha1 -binary | openssl base64

そして、これはリリース用です:

keytool -exportcert -alias "yourAliasUsedWhenYouGeneratedTheKey" -keystore "C:\Users\YourUser\AppData\Local\Android\android-studio\key.jks" | openssl sha1 -binary | openssl base64

2.Facebook アプリケーションに移動し、「あなたのアプリケーション」と「あなたのアプリケーション (デバッグ)」の 2 つのアプリケーションを作成します。次に、デバッグ ハッシュをデバッグ アプリケーションに割り当て、リリース ハッシュを通常のアプリケーションに割り当てます (当然)。

3.両方のアプリケーション ID を取得し、strings.xml ファイルに次のように書き込みます。

<string name="app_id">123456789</string>
<string name="app_id_debug">987654321</string>

4.最後に、コードで、次のように Facebook ログイン フラグメントにプログラムで appId を登録します。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    uiHelper = new UiLifecycleHelper(getActivity(), callback);
    uiHelper.onCreate(savedInstanceState);

    String appId;

    try {
        ApplicationInfo appinfo = getActivity().getPackageManager().getApplicationInfo(getActivity().getPackageName(), 0);
        boolean isDebugMode = (0 != (appinfo.flags &= ApplicationInfo.FLAG_DEBUGGABLE));

        if (isDebugMode)
            appId = getString(R.string.app_id_debug);
        else
            appId = getString(R.string.app_id);
    } catch (PackageManager.NameNotFoundException e) {
        appId = getString(R.string.app_id);
    }

    Session session = new Session.Builder(getActivity().getBaseContext()).setApplicationId(appId).build();
    Session.setActiveSession(session);

    return inflater.inflate(R.layout.fragment_facebook_login, container, false);
}

このようにして、何も変更せずに、すべての環境で適切な appId と適切なアプリケーションを使用できます!!

于 2014-02-28T07:08:16.637 に答える