web-dev-qa-db-ja.com

Android APIキーのGoogleプレイスはPlayストアのアプリでは機能しません

私は最近 Android app を起動しました。これはGoogleプレイスのオートコンプリートウィジェット/ APIを使用します。この構成の一部として、APIキーをAndroidのマニフェストファイル:

<application>
    ...
    <meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="MY_KEY_HERE"/>
</application>

さらに、Google Developers Consoleで、このAPIキーをAndroidデバイスのみに有効にしましたが、特定のAPIに限定しませんでした。また、正しいパッケージ名とSHA-1ハッシュを入力しました。 app。次の問題があります。

  • Android電話から直接Android Studioに電話をかけると、Google APIはすべて機能します。デバッグモードとリリースモードのどちらのバリアントを使用しても同じです。 。
  • 同じコードからPlayストアにAPKを公開してからアプリをインストールすると、GoogleオートコンプリートAPI以外のすべてが機能しなくなります。アクセスしようとすると、すぐに閉じます。

Playストアにデプロイしたものは、ローカルで実行されている同じアプリであると確信しています。これは、最近いくつかのマイナーなUIパッチを作成し、それらもストアバージョンに表示されたためです。正しいキーがマニフェストファイルに表示されるものであることを数回確認しました。

私はこれを説明するのに途方に暮れています。すべてがAndroid Studioで機能するため、デバッグに進んで例外をキャッチしようとすることはできません。)この問題は特に困難です。

Android=およびオートコンプリートに関する専門知識があり、このような問題が発生した場合は、お答えします。

12
Tim Biegeleisen

@NullPointerによる答えは機能的に正しく、実際に私の問題を解決します。しかし、私自身の質問に対してより直接的な回答を与えるために、問題の根本的な原因は、Androidアプリとリリースのローカルデバッグバージョン用にGoogle APIを構成するための大幅に異なる手順に関係しています同じアプリのバージョン。

ここでの混乱の一部は、Googleコンソール自体に関係しています。

次に、次のコマンドを使用して(SHA-1)フィンガープリントを取得します。

keytool -list -v -keystore mystore.keystore

アプリをローカルでデバッグモードでビルドしてテストする場合、実際にはデバッグキーストアファイルに対してkeytoolを実行し、SHA-1ハッシュをGoogleコンソールに貼り付けると、APIが機能します。コードベースに数か月以上座っていて、APIが非常に安定しているように見えた後、リリースAPKでこれらの手順を繰り返すと、次に何が起こるかは驚くべきことになります。

同じ手順を実行してもリリースアプリでは機能しないため、これは驚きです。これは、Google Playストアが実際にAPKを別のキーで再署名するため、SHA-1ハッシュが異なるためです。使用する必要があるSHA-1ハッシュを見つけるには、Google PlayコンソールでRelease management -> App signingにアクセスします。これは、アプリを公開し、更新されるまで10〜15分程度待ってから行います。次に、このSHA-1をGoogle APIコンソールに貼り付け直してください。

ちなみに、私の質問は Playストアで公開されたアプリがGoogle Maps APIやFacebook APIと通信できない とよく似ていますが、Google APIが動作する理由についてはあまり強調されていませんデバッグモードですが、Playストアにはありません。ちなみに、この質問へのリンクを含むコメントを貼り付けた@RohitChauhanを紹介します。

1
Tim Biegeleisen

問題のステートメント===>アプリの正しいパッケージ名とSHA-1ハッシュも入力しました

問題:実際には、これまではアップロードキーでアプリに署名するだけですPlayストアの場合は、Googleが作成したSHA-1が必要です。

ここに詳細な説明があります

Google Playによるアプリ署名の仕組み。[ Document Link ]

ステップ1:アップロードキーを作成します

ステップ2:リリースを準備する

ステップ3:署名済みアプリをアップロードします

ステップ4:アプリ署名キーをAPIプロバイダーに登録します

アプリがユーザーに配信される前に、Google Playはアップロードの鍵署名を削除し、新しい鍵で再署名します。

これは、アップロード鍵でアプリに署名することを意味します。次に、Googleはアップロードの鍵署名を検証して削除します。最後に、Googleは提供された元のアプリ署名鍵でアプリに再署名し、アプリをユーザーに配信します。

問題を解決するには、アプリをGoogle Playにアップロードし、アプリを送信して承認した後、これらの追加手順を実行する必要がありました

  1. Google Play Consoleからアプリを選択し、[開発ツール]-> [リリース管理]-> [アプリの署名]に移動します。

  2. アプリをアップロードした後、Google Playが発行した最初のSHA-1証明書をコピーします。

  3. Googleコンソールに移動し、プロジェクトに移動します。

  4. APIキーを選択し、パッケージ名の後にSHA-1を貼り付けます。

5
NullPointer

あなたはこの異なる解決策を試すことができます、多分それはあなたのための仕事です

ソリューション-1

onErrorOnPlaceSelectedなどのすべてのイベントのログをテキストファイルに保存してみます、onConnectionFailedOnConnection次に、アプリをプレイストアにアップロードして、アプリとログファイルを確認するそれが機能していない場合は、ログファイルに問題を表示する必要があります

ソリューション-2

APKのリリースとAPKのデバッグには、GoogleサービスのSHA1とAPIキーが異なります。それらの両方をコンソールに追加する必要があります

ソリューション-3

または今、オートコンプリート機能のインテントを使用できます

int PLACE_AUTOCOMPLETE_REQUEST_CODE = 1;
...
try {
Intent intent =
        new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                .build(this);
startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE);
} catch (GooglePlayServicesRepairableException e) {
// TODO: Handle the error.
} catch (GooglePlayServicesNotAvailableException e) {
// TODO: Handle the error.
} 

詳細については、こちらをご覧ください- https://developers.google.com/places/Android-sdk/autocompleteand よくお読みください

ソリューション-4最後に、場所名をToastとしてカスタムで表示しようとしますオートコンプリートなしの緯度と経度。サーバーからデータを受信して​​いるかどうかを確認します

これがあなたのために役立つことを願っています

1

私の問題は、あなたがすでにAPIの場所をアクティブにした場所であるあなたのGoogleコンソールでSHA-1が欠落していることにあると思います。リリースSHA-1(キー)を追加する場所があるはずです。その後、別のデバイスでGoogleプレイスを表示できます。

SHA-1を生成するには、Android studioにGradleスクリプトがあります。Android Studioの右側にあるGradleバーをクリックします。名前を選択しますアプリのtasks>Android>signingReport。すべてのSHA-1キーを出力します。

enter image description here

0
deadfish