3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FlutterにFirebaseのIn-App Messagingを入れるとiOSビルドが失敗する

Last updated at Posted at 2020-07-11

FlutterアプリにFirebaseのIn-App Messagingを入れようとして、iOSビルドが出来なくてハマったのでその解決方法をメモとして共有します。

環境など

ツールなど バージョンなど
MacBook Air Early2015 macOS Mojave 10.14.6
Android Studio 3.6.1
Java 1.8.0_131
Flutter 1.12.13+hotfix.9
Dart 2.7.2
Xcode 11.3.1

導入手順

In-App Messagingは、基本的にライブラリを導入するだけで、コーディングはする必要が無いものです。(受け取って標準的な表示をするだけなら)

なので、以下だけでやりました。

1.依存関係を追加

Flutter用のパッケージはこちらにあります。
https://pub.dev/packages/firebase_in_app_messaging

pubspec.yaml
  firebase_in_app_messaging: ^0.1.2

pub getして、ビルドしました。

2.キャンペーンを作成

Firebaseの以下のページからキャンペーンを作成します。

inappmessaging.png

「新しいキャンペーンの作成」をクリックすると、以下のような画面になります。

iam_campagin.png

画像が必須なので頑張って何か入れてください。
(横向き用に画像が潰れるのはなんとかならないのか・・・)

ところで、In-App Messagingって、まだベータ版なんですね・・・

Androidは、これで基本的には上手くいきます。
私はService fetch error: PERMISSION_DENIED: Firebase In-App Messaging API has not been usedというエラーが出てしばらく表示されなかったのですが、google-services.jsonをダウンロードし直してきたら直り、無事表示が出来ました。

エラー内容

問題は、iOSで表示しようとビルドしたときです。
以下のようにビルドエラーが出ました。

duplicate symbol '_OBJC_CLASS_$_ "FIRIAMDefaultDisplayImpl'"

どうやら、以下のパッケージで同じクラス定義がありシンボルが重複しているというエラーのようです。

  • FirebaseInAppMessaging
  • FirebaseInAppMessagingDisplay

解決方法

いろいろググって辿り着いたのが、FirebaseのIssuesページです。

こちらにある、FirebaseとIn-App Messagingのバージョンを強制的に指定することで解決しました。
※ダウングレードしていることになるので、他のFirebaseのパッケージが整合性取れなくなる可能性があります。対応にはご注意下さい。

具体的には、以下のバージョンを強制的に指定することにします。

  • Firebase (6.15.0)
  • FirebaseInAppMessaging (0.16.0)

(1)Podfileを編集する

どうするかというと、Podfileファイルを編集します。

# avoiding to duplicate symbol error
pod 'Firebase', '6.15.0'
pod 'FirebaseInAppMessaging', '0.16.0'

(2) Podfile.lockを削除

Podfile.lockはプロジェクトフォルダのiosフォルダ下にあります。

Podfile.png

(3) flutter cleanを実行

$ flutter clean

(4) pod installを実行

$ pod install

(5) Flutterでビルド、実行する

これで無事ビルドが通り、メッセージもちゃんと表示出来ることを確認しました。

2.修正状況

関連の修正PRは出ているようですので、注視しておくと良いかも知れません。

https://github.com/FirebaseExtended/flutterfire/pull/1957
https://github.com/FirebaseExtended/flutterfire/pull/2701

In-App Messagingのススメ

Push通知(Firebase Cloud Messaging)と違って、アプリを起動したときにしか表示してくれませんが、Pushよりずっと楽に導入できるので、アプリのアップデートの案内とか、アップデートした後の新機能の紹介とか、アプリを起動した上でのメッセージ表示で十分な場合は、かなりオススメです。

特にiOSの場合、証明書の更新とかも不要になるので、運用的にかなり助かるのではないでしょうか。

と言うことで、頑張ってPush通知を導入するより、In-App Messaging導入、いかがでしょうか?

今回、In-App Messagingを入れることにしたのは理由があって、アプリの強制アップデートのためにRemote Configを使っているのですが、iOS9.3のiPadで、一度読み込んだらその後値を一切再取得してくれないという不具合に気付き、そこで、iOS10未満の端末向けに、最初はPush通知を入れようかと思ったのですが、証明書やらでハードルが高いので、お手軽そうなIn-App Messagingを試してみた、という次第です。

というか、これで、自前の強制アップデートダイアログの表示も不要になりますね。
ナンテコッタイ\(^o^)/

まあ、まだベータなので・・・というところが、業務で導入するには躊躇うところでしょうか^^;

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?