[Flutter/dart] firebaseを開発環境と本番環境で分けてgoogle_sign_inを使用する(Android)
概要
firebaseを使用している場合、開発用の環境と本番用の環境を分けたいですよね。
Flutterの場合は基本的にはこの記事を見て設定してもらえばいいのですが、Androidのgoogle_sing_inで躓きました。
詳細
開発用と本番用2つのfirebaseプロジェクトを作成し、デバッグモードで起動します。すると、google_sign_inで以下のエラーが出ます。
Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
これは、google_sing_inでは(firebaseでは?)アプリケーションid(com.***みたいなやつ)とSHA1フィンガープリントの組み合わせは重複できないためです。
(詳細はここを参照してください。ただし、ここに書いてある対策をしてもエラーは治りませんでした。)
対応案
対応案としては、デバッグモードの時はアプリケーションidを変更しましょう。
/android/app/build.gradleに以下のように記述します。
defaultConfig {
applicationId "com.xxx.yyy"
・・・
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
・・・
}
また、/android/app/src/debug/google-service.jsonも以下のように修正します。
"client": [
{
"client_info": {
・・・
"android_client_info": {
"package_name": "com.xxx.yyy.debug"
}
},
ここを修正しないと
Execution failed for task ':app:processDebugGoogleServices'.
> No matching client found for package name 'com.xxx.yyy
というエラーが出ます。
以上の対策をすると無事googleでサインインできました。
最新記事
すべて表示現象 アプリ内にAdmobを追加して、アプリを起動すると、下記のエラーが発生 java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider 原因 AndroidManifestの書き方が誤っていた。 <meta-data>はactivityと同じ階層にある必要が
概要 Uriを持っていて、Urlに変換したい場合の方法で少し手惑ったので共有します 方法 String url = uri.toString(); これだけです。 最後に ページを開くだけだとUriでもUrlでもいいんですが、WebViewはUrlを要求してくるんですよね。
問題 以前、日本語を含むURLを開くためには、エンコーディングしてやる必要がある、という記事を書きました。 しかし、すでにエンコーディングされているURLを再度エンコーディングしてしまうと、別のURLになってしまいます。 つまり、URLを開く処理の前に、 ・エンコーディングが必要なURLか ・すでにエンコーディングがされているか を判定しないといけないことになります。これは中々煩雑な処理です。 発