KOSEN{BLOG}について

[SwiftUI]Firebase Analyitcsのカスタムイベント・ユーザープロパティーを実装する

にとろん

Firebase AnalyticsのログデータがDebugViewに表示されない人カスタムイベントやカスタムユーザープロパティーを実装したい人を対象に記事を書きました!

 

この記事の最終的なゴールは、以下です。

  • SwiftUIでiOSアプリに「カスタムイベント」と「ユーザプロパティ」を仕込む
  • Firebase の DebugVeiw ページを確認

  • 「カスタムイベント」や「カスタムユーザープロパティー」の受信の確認

 

Firebaseでの初期設定

Firebaseの手順に従う

  • Firebaseにアクセスして新規プロジェクトを作成 https://console.firebase.google.com/u/0/
  • プロジェクト名 (例)FirebaseDemo
  • Googleアナリティクスを有効にする
  • Google アナリティクスの構成

  • Google アナリティクス アカウントを選択または作成

    FirebaseDemo
  • アナリティクスの地域

    日本 データ共有の設定と Google アナリティクスの利用規約

    同意するを選択
  • プロジェクトを作成を選択

 

XcodeProjectの初期設定

iOSアプリを新規作成します。今回はSwiftUIで作成したいと思います。

FirebaseとiOSアプリを紐づける

先ほど作成したFirebaseプロジェクトにアクセスします。

以下のような画面になると思うので選択をクリック

あとは画面の指示に従っていく流れになります。

アプリの登録

バンドル ID は、

Xcode でアプリのプライマリTARGETS→Generalタブを開くと確認できます。

アプリのニックネームApp Store IDは省略可

設定ファイルのダウンロード

プロジェクトにGoogleService-Info.plist ファイルを追加

ダウンロードした GoogleService-Info.plist ファイルを

Xcode プロジェクトのルートに移動し、 すべてのターゲットに追加します。

Firebase SDK の追加

Google サービスは CocoaPods を使用し、

依存関係のインストールと管理を行います。

Podfileがない場合は作成

~  cd /Users/xxxx/Documents/Xcode-Project/FirebaseDemo

Podfileを開いて以下を追加

# add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'
# add pods for any other desired Firebase products
# <https://firebase.google.com/docs/ios/setup#available-pods>

こんな感じになります。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'FirebaseDemo' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for FirebaseDemo
# add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'
# add pods for any other desired Firebase products
# <https://firebase.google.com/docs/ios/setup#available-pods>

end

Podfileを保存しコマンドを実行

pod install

アプリの .xcworkspace ファイルが作成されます。

以上で、Firebase Analyticsを使用する準備ができました。

コーディングする

アプリを一度閉じて新しく生成された .xcworkspace ファイル(白い方)を開きます

初期化コードの追加

swiftUIのアプリには「AppDelegate.swift」と「SceneDelegate.swift」が

生成されないため自分で作成する必要がある。

参考文献

【SwiftUI】【Xcode12】AppDelegate.swift と SceneDelegate.swift が無いんだが

[Xcode 12] アプリの起動について変更になった部分まとめ

AppDelegateクラスを作成する

@UIApplicationDelegateAdaptorを使用することで、

既存のAppDelegateを利用することができるようになります。

import SwiftUI

@main
struct LifeCycleSwiftUIApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        return true
    }
    
    // 必要に応じて処理を追加
}

FirebaseDemoApp.swift

上記のことを踏まえてアプリに実装します。

import SwiftUI
import Firebase
@main
struct FirebaseDemoApp: App {
	//追加
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

	//追加
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        
        FirebaseApp.configure()
        return true
    }
}

デバックビューを使用してみる。

本来イベントは約1時間の周期でバッチ処理されまとめてアップロードされます。

しかし、開発デバイスでデバックモードを有効にすることで

最小限の遅延でイベントをアップロードすることができます。

デバックモードの有効化

スキーマ 選択画面→Edit Scheme→Run→Arguments→Arguments Passed On Launchに

-FIRDebugEnabled 

を追加

アプリを実行ログは以下のようなものです。

2020-12-20 19:28:16.755453+0900 FirebaseDemo[7155:2395889] 7.2.0 - [Firebase/Core][I-COR000001] Configuring the default app. 2020-12-20 19:28:16.763656+0900 FirebaseDemo[7155:2395889] 7.2.0 - [Firebase/Core][I-COR000033] Data Collection flag is not set. 2020-12-20 19:28:16.786839+0900 FirebaseDemo[7155:2395886] 7.2.0 - [Firebase/Analytics][I-ACS024000] Debug mode is on 2020-12-20 19:28:16.792949+0900 FirebaseDemo[7155:2395886] 7.2.0 - [Firebase/Analytics][I-ACS005000] The AdSupport Framework is not currently linked. Some features will not function properly. Learn more at <http://goo.gl/9vSsPb> 2020-12-20 19:28:16.909721+0900 FirebaseDemo[7155:2395892] 7.2.0 - [Firebase/Installations][I-FIS002000] -[FIRInstallationsIDController createGetInstallationItemPromise], appName: __FIRAPP_DEFAULT 2020-12-20 19:28:16.910517+0900 FirebaseDemo[7155:2395892] 7.2.0 - [GULReachability][I-REA902003] Monitoring the network status 2020-12-20 19:28:16.910643+0900 FirebaseDemo[7155:2395892] 7.2.0 - [GULReachability][I-REA902003] Monitoring the network status 2020-12-20 19:28:17.009840+0900 FirebaseDemo[7155:2395884] 7.2.0 - [GULReachability][I-REA902004] Network status has changed. Code:1, status:Disconnected 2020-12-20 19:28:17.024529+0900 FirebaseDemo[7155:2395884] 7.2.0 - [GULReachability][I-REA902004] Network status has changed. Code:2, status:Connected 2020-12-20 19:28:17.025652+0900 FirebaseDemo[7155:2395884] 7.2.0 - [Firebase/Installations][I-FIS002001] -[FIRInstallationsIDController installationWithValidAuthTokenForcingRefresh:0], appName: __FIRAPP_DEFAULT 2020-12-20 19:28:17.025928+0900 FirebaseDemo[7155:2395884] 7.2.0 - [GoogleUtilities/AppDelegateSwizzler][I-SWZ001008] Successfully created App Delegate Proxy automatically. To disable the proxy, set the flag GoogleUtilitiesAppDelegateProxyEnabled to NO (Boolean) in the Info.plist 2020-12-20 19:28:17.038218+0900 FirebaseDemo[7155:2395889] 7.2.0 - [Firebase/Analytics][I-ACS023007] Analytics v.7.2.0 started 2020-12-20 19:28:17.039589+0900 FirebaseDemo[7155:2395889] 7.2.0 - [Firebase/Analytics][I-ACS023008] To disable debug logging set the following application argument: -noFIRAnalyticsDebugEnabled (see <http://goo.gl/RfcP7r>) 2020-12-20 19:28:17.040614+0900 FirebaseDemo[7155:2395889] 7.2.0 - [Firebase/Analytics][I-ACS023009] Debug logging enabled 2020-12-20 19:28:17.041026+0900 FirebaseDemo[7155:2395889] 7.2.0 - [Firebase/Analytics][I-ACS023207] To enable verbose logging set the following application argument: -FIRAnalyticsVerboseLoggingEnabled (see <http://goo.gl/RfcP7r>) 2020-12-20 19:28:17.070818+0900 FirebaseDemo[7155:2395884] 7.2.0 - [Firebase/Analytics][I-ACS002002] APMExperimentAlarm scheduled to fire in approx. (s): 9119.518466949463 2020-12-20 19:28:17.082034+0900 FirebaseDemo[7155:2395884] 7.2.0 - [Firebase/Analytics][I-ACS800023] No pending snapshot to activate. SDK name: app_measurement 2020-12-20 19:28:17.083310+0900 FirebaseDemo[7155:2395886] 7.2.0 - [Firebase/Analytics][I-ACS029014] Successfully parsed a configuration. Version: 1608452857570138 2020-12-20 19:28:17.084419+0900 FirebaseDemo[7155:2395884] 7.2.0 - [Firebase/Analytics][I-ACS023016] Analytics is ready to receive events 2020-12-20 19:28:17.148404+0900 FirebaseDemo[7155:2395886] 7.2.0 - [Firebase/Analytics][I-ACS032003] iAd framework is not linked. Search Ad Attribution Reporter is disabled. 2020-12-20 19:28:17.150054+0900 FirebaseDemo[7155:2395891] 7.2.0 - [Firebase/Analytics][I-ACS002002] Engagement timer scheduled to fire in approx. (s): 3600 2020-12-20 19:28:17.150205+0900 FirebaseDemo[7155:2395891] 7.2.0 - [Firebase/Analytics][I-ACS023012] Analytics collection enabled 2020-12-20 19:28:17.150837+0900 FirebaseDemo[7155:2395891] 7.2.0 - [Firebase/Analytics][I-ACS023220] Analytics screen reporting is enabled. Call +[FIRAnalytics logEventWithName:FIREventScreenView parameters:] to log a screen view event. To disable automatic screen reporting, set the flag FirebaseAutomaticScreenReportingEnabled to NO (boolean) in the Info.plist 

デバックモードがONの時

2020-12-20 19:52:39.334710+0900 FirebaseDemo[7179:2407311] 7.2.0 - [Firebase/Analytics][I-ACS024000] Debug mode is on 

debugViewにログが表示されない時

重要
ホーム画面に戻りアプリをバックグラウンドに置いてください参考文献

XcodeのdebugLogで成功しているログが表示されていればきちんとログは表示されるはずです。

カスタムイベントを追加

hoge_eventをアプリに追加しました。

Button(action: {

                let name = "hoge"
                let text = "This is hogehoge"

                Analytics.logEvent("hoge_event", parameters: [
                    "name" : name as NSObject,
                    "full_text" : text as NSObject
                ])

            }, label: {
                Text("Button")
            })

FirebaseでDebugViewを開く

これでアプリを実行してボタンを押してみてください。

無事表示されました。

 

私は普段実機でデバックを行っていますが、エミュレータでも実行できました。

表示されない方: ホーム画面に戻り一度アプリをバックグラウンドに置いてください。

それでも受信できない場合
たまにFirebaseに表示されない時があります。エラーを吐いていないかXcodeのログを読んでみてください。

カスタムユーザプロパティを追加する

先ほどはイベントでしたが次はプロパティーです。

User Propertiesタブを開いてプロパティを登録します。

新しいユーザープロパティを作成

任意のプロパティーを作成してください。

  • ユーザー プロパティ名
  • 説明

今回私は、

ユーザープロパティ名:favorite_food

説明:ユーザーの好きな食べ物

としました。

コードを実装

ボタンを押すとユーザープロパティーの値がHumburgerとなるようにしました。🍔

Button(action: {
 let name = "hoge"	 	 
 let text = "This is hogehoge"	 	 
 Analytics.logEvent("hoge_event", parameters: [	 	 
 "name" : name as NSObject,	 	 
 "full_text" : text as NSObject	 	 
 ])	 	 
 }, label: {	 	 
 Text("Button")	 	 
 })	 	 
注意点
カスタムイベントで取得したカスタムデータは、BigQuery にリンクしないと見ることができません。

推奨イベントを用いる

BigQueryを用いる手法だと従量課金をしないといけないのでコストがかかります。

コストをかけずに情報を取得したい場合は推奨イベントを使用することをおすすめします。

推奨イベントを用いれば、複数のパラメーターをみることができたり、
最新のアナリティクス機能とデータの統合が利用可能になるなどメリットを享受できます。

まだ記事作成途中

おわりに

今回はFirebase Analyticsを用いて

カスタムイベントやカスタムユーザープロパティーをSwiftUIを用いて実装しました。

ユーザーがどのような行動を起こしているのかを分析することは、

アプリを改善したり、収益化するために重要なことだと思います。

Firebaseは無料で簡単に使えるのでアプリを公開している人は

導入を考えてみてはいかがでしょうか? この記事が参考になったら嬉しいです。

かs

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です