MAUIにてFirebase使用にあたり困ったこと ~VSのビルドアクションの選択肢にGoogleServicesJsonが出て来ない~

先日、MAUIのAndroidアプリにてプッシュ通知を実現するため、
Firebase Cloud Messagingを用いる方法を調査していました。
その際に詰まったことがあったので共有します。

Firebaseから取得した設定ファイル google-services.json をプロジェクトに含める必要があるのですが、
含めた後にプロパティからビルドアクションをGoogleServicesJsonに変更しないと
Firebaseの処理が動作しません。

しかしビルドアクションの選択肢にGoogleServicesJsonが出てきませんでした。

これは定番の困りごとのようで、調べてみると解決策がいくつか出てきたのですが
自分の環境ではどれも上手く行かず、ようやく上手く行ったのは以下の手順による方法でした。

1. nugetで以下のパッケージをインストール
※1つずつ試してはないので不要なもの含まれている可能性有

Xamarin.Firebase.Common
Xamarin.Firebase.Config
Xamarin.Firebase.Iid
Xamarin.GooglePlayServices.Base
Xamarin.GooglePlayServices.Basement
Xamarin.GooglePlayServices.Tasks

2. .csprojに以下を直接記述して、対象のパッケージの.targetファイルをインポート


<Import Project="C:\Users\<my user>\;.nuget\packages\xamarin.googleplayservices.basement\118.3.0.1\buildTransitive\net7.0-android33.0\Xamarin.GooglePlayServices.Basement.targets" Condition="Exists('C:\Users\<my user>\.nuget\packages\xamarin.googleplayservices.basement\118.3.0.1\buildTransitive\net7.0-android33.0\Xamarin.GooglePlayServices.Basement.targets')" />

3. 2の記述にてnugetフォルダパスが個人のローカルパスになっているため、マクロに置き換え
※個人プロジェクトなら不要です

C:\Users\<my user>\.nuget\packages\ → $(NuGetPackageRoot)


<Import Project="$(NuGetPackageRoot)xamarin.googleplayservices.basement\118.3.0.1\buildTransitive\net7.0-android33.0\Xamarin.GooglePlayServices.Basement.targets" Condition="Exists('$(NuGetPackageRoot)xamarin.googleplayservices.basement\118.3.0.1\buildTransitive\net7.0-android33.0\Xamarin.GooglePlayServices.Basement.targets')" />

これで無事ビルドアクションの選択肢にGoogleServicesJsonが出て来て、
Firebaseのプッシュ通知を動作させることができました。

以下のページにより解決に辿り着けました。感謝します。
xamarin – Can't set Build Action to GoogleServiceJson – Stack Overflow

コメントを残す