6
1

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 5 years have passed since last update.

XamarinAdvent Calendar 2018

Day 11

Xamarin.FormsにFirebase Analytics 実装(iOS)

Last updated at Posted at 2018-12-10

はじめに

本記事はXamarin Advent Calendar 2018の11日目として、Xamarin.FormsでFirebase Analyticsの実装(iOS)を紹介します。

環境

Visual Studio for Mac ver7.6.9
Xamarin.Forms
ターゲットフレームワーク:PCL

プロジェクトの作成

Firebase Consoleのトップページから、新規プロジェクトを作成します。
Google Cloud Platform のプロジェクト指定できるようです。
Firebase を使い始めるには、ひとまずプロジェクトを作成するだけでOKです。

iOS アプリへの導入

アプリにFirebaseを追加

1.新規プロジェクト作成後、トップページにある「アプリにFirebaseを追加して利用を開始しましょう」から設定手順に沿って操作します。Bundle IDが必要となりますので、XamarinのプロジェクトのInfo.plistから取ってきます。

スクリーンショット 2018-12-10 18.21.00.png 2. 設定が終わると`GoogleService-Info.plist` がダウンロードできます。 このPlistファイルをiOSプロジェクトのinfo.plistファイルと同じ場所に追加します。 3. 追加したファイルを右クリックして, ビルドアクション -> BundleResource と選択しチェックします。 スクリーンショット 2018-12-10 18.43.52.png 4. `GoogleService-Info.plist`内の`IS_ANALYTICS_ENABLED`の`NO`となっている部分をYESに書き換えます。 スクリーンショット 2018-12-10 18.50.13.png

nuget packagesを追加

「パッケージの追加」から以下のパッケージを追加します。
スクリーンショット 2018-12-10 18.23.53.png

  • Xamarin.Firebase.iOS.Analytics
  • Xamarin.Firebase.iOS.Core
  • Xamarin.Firebase.iOS.InstanceID

アプリで Firebase を初期化する

AppDelegate.csのFinishedLaunchingで、コンポーネントを初期化します。

// Firebase component initialize
Firebase.Core.App.Configure();

※最初は base.FinishedLaunching の直前で初期化していたのですがビルドするとEvent not logged. Call +[FIRApp configure]のエラーが出てしまいました。どうやらFirebase.Core.App.Configure();を呼ぶ所がダメらしいのでFinishedLaunchingの最初の方で呼ぶようにしました。

これでFirebaseが標準で定めているイベントに関して取得できるようになりました。
※一度ビルドしてみてビルドができなかったら以下をやってみてください。

  1. iOSのプロジェクトのオプションを開く
  2. iOSビルドの中の「インクリメンタルビルドを有効にする」のチェックを外す

カスタムイベントを取る場合

カスタムイベントを取る場合はイベントを保存するための "LogEvent"メソッドを使うのですが、パッケージがPCLに対応していないのでプラットフォーム固有機能を呼ぶようにインターフェースを作ります。

using System;
using System.Collections.Generic;
using System.Text;
using Firebase.Analytics;
using Firebase.Core;
using Foundation;
using sumple.iOS;
using Xamarin.Forms;

[assembly: Dependency(typeof(AnalyticsServiceIOS))]
namespace sumple.iOS
{
    public class AnalyticsServiceIOS : IAnalyticsService
    {
        public void LogEvent(string eventId)
        {
            LogEvent(eventId, (IDictionary<string, string>)null);
        }

        public void LogEvent(string eventId, string paramName, string value)
        {
            LogEvent(eventId, new Dictionary<string, string>
            {
                { paramName, value }
            });
        }

        public void LogEvent(string eventId, IDictionary<string, string> parameters)
        {
            if (parameters == null)
            {
                foreach (var item in parameters)
                {
                    new Dictionary<object, object>().Add(item.Key, item.Value);
                }
                Analytics.LogEvent(eventId, new Dictionary<object, object>());
                return;
            }

            var keys = new List<NSString>();
            var values = new List<NSString>();
            foreach (var item in parameters)
            {
                keys.Add(new NSString(item.Key));
                values.Add(new NSString(item.Value));
            }

            var parametersDictionary =
                NSDictionary<NSString, NSObject>.FromObjectsAndKeys(values.ToArray(), keys.ToArray(), keys.Count);
            Analytics.LogEvent(eventId, parametersDictionary);
        }
    }
}

PCLのカスタムイベントを取りたい場所に以下のコードをセットします。

 var an = DependencyService.Get<IAnalyticsService>();
 IDictionary<string, string> dic = new Dictionary<string, string>();
 string {EventId(変数)} = "{id}";
 string {EventValue(変数)} = "{value}";
 dic.Add(EventId, EventValue);
 an.LogEvent("{eventInfo}", dic);

ビルドして操作してみるとセットしたイベントがFirebaseコンソールにて確認できます。
※ ただし、コンソールにはすぐに反映されません。だいたい翌日にはコンソールにてイベントが確認できます。

まとめ

Xamarinをやり始めて1年も経っていないのでとにかく調べまくりなんとか実装しダッシュボードにも反映されイベントもちゃんと取れるようになりました。本当はAndroidも書こうと思いましたが、書いているうちにすごく長くなったので、今回はiOSだけでAndroidは分けて書くことにしました。また、近いうちにAndroid版を書きます。Xamarin初心者なので記事内容に誤りがあれば教えてください。よろしくお願いします。

参考文献

Firebase を iOS プロジェクトに追加する
XamarinでFirebaseを使ってみる(iOS版)
FirebaseでFirebaseApp.configure()の位置で躓いた時
Xamarin.FormsでPrism.Formsを使ってPCLに非対応なライブラリを使う方法
Firebase Analyticsでログを取得する(iOS)
Firebase Analytics in Xamarin Forms

6
1
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
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?