私のグーグルマップアプリは、デバッググーグルマップAPIキーを備えたデバイス上で正常に動作しますが、リリースグーグルマップAPIキーを使用してアプリの署名付きapkを作成すると、マップが表示されません。リリースモードgoogle API KEYを生成するには、キーストアでSHA1フィンガープリントを使用しています。そして、developer.Android.com( http://developer.Android.com/tools/publishing/app-signingで説明されているように、プロジェクト設定で「署名とビルドタイプ」も定義しています.html )。
考えられるすべての解決策を試してみました(apkを削除し、再インストール、デバイスの再起動、プロジェクトのクリーニングよりも)。うまくいきませんでした。誰もが私の問題に対する良い解決策を持っています助けてください。 FYI Android studiosプラットフォームを使用しています。
2つのgoogle_maps_api.xmlファイルがあるかもしれません。1つはapp/src/debug/res/valuesフォルダーにあり、もう1つはapp/src/release/res/valuesフォルダーにありますが、APIキーが含まれているのはデバッグファイルだけです。
APIキーはAndroid Manifestにハードコーディングする必要があり、別のリソースXMLファイルにある場合は機能しません。
デバッグ証明書は、実動証明書とはdifferentです。 APIコンソールのGoogleマップキーエントリにbothをseaparate行として追加する必要があります。それぞれが同じpackageIdを持ちますが、SHA1ハッシュは自然に異なります。
[〜#〜] edit [〜#〜]
単一のGoogle Mapsキーに割り当てられる証明書のフィンガープリントとパッケージ名の数に制限はありません。したがって、これを分離する必要がない限り、同じキーを使用して開発ビルドと本番ビルドの両方を作成することはまったく問題ありません。 Googleコンソールでは、次のようになります(1つのsha1は、このIDEを使用してビルドするすべてのアプリで同じデバッグ証明書からのものであり、他は本番証明書です)。
83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foo.bar
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar
または(ただし、異なるアプリに同じキーを使用することはお勧めしません):
83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foobar.myapp
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar
EF:3B:59:7E:19:FB:83:10:58:57:AE:4F:5E:1D:F0:2B:28:DE:9E:01;net.something.otherapp
私はこの問題を抱えていて、これらの手順を実行しましたこの方法は完璧で完全だと思います
Android Studio:
これを機能させるには、覚えておくべきことが2つあります。
ビルドバリアントのデバッグ
ビルドバリアントのリリース
AndroidManifest.xmlで次の行を追加します。
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_maps_key" />
デバッグとリリースの通常の手順に従ってください。シームレスに動作するはずです。
返信が遅くなってすみません。これが将来に役立つことを願っています。このソリューションを使用して同じ問題を解決します。開発中にGoogleマップを使用している場合、パスワードのないデフォルトのdebug.keystoreが使用されます。 Playストアにアップロードするapkファイルを作成すると、新しいSHA-1キーが作成されるため、そのための新しいdebug.keystoreを作成する必要があります。そのSHA-1の新しいAPIキーを作成する必要があります。ソリューションによると OAuth 2.0 on Androidでの署名証明書フィンガープリント(SHA1)の取得方法 エクスポートされたapkファイルに対してSHA-1を取得できます。
その後、Androidマニフェストを以前のものとしてマニフェストで使用し、完了です。
EDIT 1-
これを行う手順
1)プロジェクトの「Androidマニフェスト」ファイルの「エクスポートウィザードを使用」を使用してapkファイルを作成します。
2)キーを挿入した後、終了する前に、MD5キーとSHA1キーがこのように表示されますpic ---(http://i.stack.imgur.com/SldEv.png )
3)Android project in https://console.developers.google.com の新しいAPIキーを作成します。新しいSHA1はポイントで取得されます。 2)。
4)以下に示すように、マニフェストファイルでそのAPIキーを使用します
5)プロジェクトをクリーンアップし、ポイント1)に従ってAPKファイルを再度ビルドします。
6)そのAPKでGoogleマップを表示できるようになりました。
リリースのデバッグで使用したのと同じキーを使用することはできません。それらは異なる機能を持っています。この問題を解決するには、リリースコピーで使用しているキーストアから新しいGoogleマップキーAPIキーを生成する必要があります。詳細については、このビデオを参照してください https://www.youtube.com/watch?v= xLJ0jDFdUZ
APIキーを作成したGoogle Apiコンソールでは、同じキーに複数の指紋を追加するオプションがあります。デバッグキーストアとリリースキーストアに2つのSHA1フィンガープリントを追加し、同じAPIキーが機能しました。
以下はUbuntu専用のものです。
以下のコマンドを使用して、デバッグ用のSHA1を取得します
keytool -list -v -keystore ~/.Android/debug.keystore -alias androiddebugkey -storepass Android -keypass Android
リリース用のSHA1を取得するには、コマンドが次のように変更されます。
keytool -list -v -keystore /home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks -alias test -storepass password -keypass password
どこ
/home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks
は、署名されたapkのキーストアファイルが存在するパスです
test
は、署名付きキーストアの生成中に使用されるキーエイリアス名です。
password
はapkの署名中に使用されるパスワードです
お役に立てれば。ハッピーコーディング:)
リリースAPI SHA1フィンガープリントを取得するにはどうすればよいですか:
署名されたAPKをPlaystoreからインストールするか、単に電話にコピーします。
実際の電話の場合はUSBケーブルを差し込み、Android Studio。
初めてマップを取得しようとすると、ログエントリに次のように表示されます。
E/Google Maps Android API: In the Google Developer Console (https://console.developers.google.com)
Ensure that the "Google Maps Android API v2" is enabled.
Ensure that the following Android Key exists:
API Key: AIzaS<YOUR KEY YOUR KEY YOUR KEY YOUR KEY>
Android Application (<cert_fingerprint>;<package_name>): 56:AF:B2:<THIS IS WHAT YOU ARE LOOKING FOR>;br.com.tinx.<your package>
次に、それらの指示に従って、開発者コンソールで新しいエントリを作成します。
先物参照の場合---私の場合--- google apiキーを配置する必要があるgoogle_maps_api.xmlファイルが2つあります。そのうちの1つだけでYOUR_API_KEYを置き換えるミスを非常に簡単に行うことができます(特に、Google API /アプリを削除して新しいものを作成した場合)
create another Maps API key (to put in your manifest) corresponding with you release
keystore for release.
カスタムキーストアからSHA1コードを作成する場合は、リリースモードで同じコードを使用します。または、同じキーストアとテストで署名してapkを生成します。
その前に、アプリのデータを消去する必要があります(設定->アプリ-アプリの消去-データの消去->アンインストール)。これは私のために働いた。パッケージ名がGoogle開発者コンソールのものと同じであることを確認してください。
同様の問題がありました:同じタイプ(「リリース」)でいくつかの新しいフレーバー(「無料」と「プレミアム」)を備えた新しいバリアントビルドをいくつか作成した後、Googleマップフラグメントにマップが表示されなくなり、画面が表示されました完全に空白です。 logcatでは、次のエラーメッセージ「 https://clients4.google.com/glm/mmap/api に対する予期しない応答コード400」しか表示されませんでした。アクセス。
もちろん、すべてのGoogle Cloud APIプロセスを再度確認して、APIキーの資格情報に何かが欠けているかどうかを確認しましたが、何も問題はありませんでした。実際、新しいAPKの場合、まだ有効な同じAPIキーを継承するために、既存のプロジェクト認証情報にビルド情報(名前+指紋)を追加することが示されています。
読むことができる指示は非常に明確です:「パッケージ名とSHA-1署名証明書の指紋を追加して、使用をAndroidアプリに制限します。AndroidManifest.xmlファイルからパッケージ名を取得します。次に、次のコマンドを使用して指紋を取得します:keytool -list -v -keystore mystore.keystore "。
私の場合の問題は、新しいバリアント「パッケージ名」がマニフェストパッケージ名(「com.example.app_name.release」)に存在するものではなかったことです。実際、新しいフレーバーのために、マニフェスト名は同じでしたが、2つの新しい「実際の」パッケージ名:「com.example.app_name.free.release」と「com.example.app_name.premium.release」。これらの名前は、フレーバーが定義されているGradle構成(私の場合は「applicationIdSuffix」属性)に対応しているため、マニフェストファイルには書き込まれていません。 Gradleの「アプリケーションID」がマニフェストの「パッケージ名」と重なってはならないため、これは非常に混乱しています。しかし、すべてのAndroidドキュメントを注意深く読むと、「マニフェストパッケージ名がGradle applicationIdと異なる場合、ビルドは最終マニフェストファイルのアプリケーションIDをコピーします」を読むことができます。もちろん、両方のバリアント両方がまだ同じビルドタイプ(「リリース」)であるため、同じフィンガープリントを持ちます。
そのため、解決策は、同じプロジェクトクレデンシャルに2つの新しいバリアントエントリを追加して、同じAPIキーを継承することでした。
元のエントリ(削除する必要はありません):パッケージ名= "com.example.app_name.release"-SHA-1証明書のフィンガープリント= "xxxxx"
新規エントリ1:パッケージ名= "com.example.app_name.free.release"-SHA-1証明書のフィンガープリント= "xxxxx"変更なし、これまでと同じ
新規エントリ2:パッケージ名= "com.example.app_name.premium.release"-SHA-1証明書のフィンガープリント= "xxxxx"変更なし、これまでと同じ
最後に、マップフラグメントまたはアクティビティの正しい更新された動作を実際に監視していることを確認するために、ビルドをクリーンアップする必要がある場合があります。
残りの推奨事項については、私の場合、それらを適用する必要はありませんでした-マニフェストでAPIキーをハードコーディングする必要はありません-新しいバリアントAPKの新しいAPIキーを作成する必要はありません-google_maps_apiを使用する必要はありませんxmlファイル