Firebaseでいろいろな条件を使ってPush通知をする
はじめに
普段Firebaseを使ってPush通知を実現していますが、全員宛のPush通知を使うばかりでした。 調べてみるといろいろ条件を指定することができるのがわかったのでちょっと調べてみました。
すでにFirebaseを実装済みの前提で話を進めます。
基本的な導入方法は公式ドキュメントを見てください firebase.google.com
準備
今回はイベントとユーザープロパティを使った条件を試すので、アプリにイベントとプロパティを送信するための実装を追加します
Swift func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Firebaseの初期化処理 FirebaseApp.configure() // ユーザープロパティの送信 Analytics.setUserProperty("test_male", forName: "test_gender") return true } : : @IBAction func eventTapped(_ sender: AnyObject) { // イベントの送信 Analytics.logEvent("test_event", parameters: nil) }
イベントを条件としたPush通知の方法
さきほどのコードのtest_event
を送ったユーザーに対してPush通知を送信してみます。
イベントを条件にするにはオーディエンスを作成してそれを条件に指定します。
- Firebase管理画面から
Audiences
画面を表示します オーディエンス
ボタンを選択し、カスタムオーディエンスを作成する
を選択します- 条件を指定します。
イベント
からtest_event
を選択します。 有効期間は今回は30日を選択します 無題のオーディエンス
にtest_audience
と名称を入力して保存を選択しますAudiences
画面に追加されました。 注意:オーディエンスのユーザーの反映はリアルタイムではなく24時間〜48時間かかります。- あとはPush通知を送信するときのターゲットとして
ユーザーオーディエンス
にtest_audience
を指定して送信します。
ユーザープロパティを条件としたPush通知の方法
test_gender
がtest_male
のユーザーを対象にPush通知を送信してみます。
- Push通知を送信するときのターゲットとしてユーザープロパティの
test_gender
がtest_male
を含む場合を条件にして送信します。
休眠ユーザーを条件としたPush通知の方法
一定期間アプリを起動していないいわゆる休眠ユーザーにPush通知を送信してみます。
前回のアプリエンゲージメント
を条件にすることで実現できます
- Push通知を送信するときのターゲットとして
前回のアプリエンゲージメント
を選択し日数を指定して送信します。
最後に
今回の内容以外にもいろいろな条件を指定することができます。そういったものを利用するとPush通知の利用の幅が広がります。有効に使っていきたいと思います
参考資料
FlutterでBundleID・ApplicationIDの変更方法
はじめに
FlutterでBundleID・ApplicationIDの変更する方法がよくわからなかっためちょっと調べてみました
iOS(BundleID)の場合
TARGETS
-General
-Bundle Identifer
を変更します。通常のiOSアプリと同じですね。
Android(ApplicationID)の場合
1. gradleの変更
android/app/build.gradle/build.gradle
のapplicationId
を変更します
defaultConfig { applicationId "com.flutter.test" minSdkVersion 16 targetSdkVersion 29 versionCode flutterVersionCode.toInteger() versionName flutterVersionName }
2. マニフェストファイルの変更
以下の3つのファイルのpackageを変更します android/app/src/main/AndroidManifest.xml android/app/src/profile/AndroidManifest.xml android/app/src/debug/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.flutter.test"> : : </manifest>
3. MainActivityパッケージの変更
パッケージ名に合わせてMainActivity.ktファイルの場所を変更します。
パッケージ名がcom.flutter.test
の場合
android/app/src/main/kotlin/com/flutter/test/MainActivity.kt
MainActivity.kt
の内のpackage
を変更します
package com.flutter.test class MainActivity: FlutterActivity() { : : }
参考文献
OSアプリでCrashlyticsをカスタマイズしてログを保存する
最初に
Firebaseにはアプリのクラッシュを監視するCrashlyticsという機能があります。ただ標準クラッシュ以外も監視したいとなると自分でいろいろ実装する必要が出てきます。ということでいろいろ調べてみました。
Crashlyticsの基本的な導入部分は公式ドキュメントを見て実装してください。
Crashlytics公式ドキュメント https://firebase.google.com/docs/crashlytics?hl=ja
クラッシュに情報を追加する
以下のような実装をするとクラッシュした際に情報を追加することができます。
[swiftのソース] func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() // key value形式での情報 Crashlytics.crashlytics().setCustomValue("str_value", forKey: "str_key") // dictionary形式での情報 let keysAndValues = [ "str_key1" : "str_value1", "str_key2" : "str_value2"] Crashlytics.crashlytics().setCustomKeysAndValues(keysAndValues) // 単純なテキスト(ログ) Crashlytics.crashlytics().log("log text") // ユーザーID Crashlytics.crashlytics().setUserID("nao123456") return true }
こんな感じで追加した情報が出てきます
クラッシュ以外のタイミングで情報を送信する
クラッシュ以外のタイミングでも送信することができます
let error = NSError(domain: NSCocoaErrorDomain, code: -123, userInfo: nil) Crashlytics.crashlytics().record(error: error)
非致命的なイベントとしてこんな感じで出てきます
まとめ
普段Crashlyticsを使っていれば簡単に実装できます。 クラッシュを監視したりもできるので今後は積極的に使っていきたいと思います。
より詳しいことを知りたい方は公式ドキュメントをご覧ください
Firebase Crashlytics のクラッシュ レポートのカスタマイズ(公式ドキュメント) https://firebase.google.com/docs/crashlytics/customize-crash-reports?authuser=0&platform=ios