XamarinフォームプロジェクトでFirebase Analyticsを使用してボタン1が押されたなどのカスタムイベントを取得できますか?
Xamarin Firebaseコンポーネントの新しいバージョン用に更新され、さまざまな問題を修正しました
もちろん、プラットフォームコードを呼び出すにはDI(依存性注入)が必要です。
Firebase Analyticsの適切なnugetパッケージを参照します。
Androidプロジェクト
Forms.Context
_is deprecated)iOSプロジェクト
PCL(または.NETStandard)プロジェクトでインターフェースを作成します
LogEvent
メソッドを呼び出し、イベントを保存します注:カスタムイベントがFirebaseに表示されるまでに時間がかかります。私の経験では、Webコンソールに表示されるまでに24時間必要です。カスタムロギングを適切にテストする場合は、電話を使用して分析デバッグをアクティブ化します(これにより、FirebaseコンソールのdebugViewでイベントを確認できます)*
注2:
eventId
プロパティに注意してください:名前は最大40文字で、英数字とアンダースコア( " ")、そしてアルファベット文字で始まる必要があります。 「firebase」、「google _」、「ga_」の接頭辞は予約されているため、使用しないでください。 eventIdを自動的に修正する小さなユーティリティ関数を含めましたが、必要に応じてそれをスキップできます
_using System.Collections.Generic;
namespace MobileApp.Services
{
public interface IAnalyticsService
{
void LogEvent(string eventId);
void LogEvent(string eventId, string paramName, string value);
void LogEvent(string eventId, IDictionary<string, string> parameters);
}
}
_
マニフェストにINTERNET権限があることを確認してください。
コンパイルアクションを「GoogleServicesJson」に設定して、google-services.json(firebaseアカウントから生成)をインポートします
AppDelegateでCrossCurrentActivity
initメソッドを呼び出すことを忘れないでくださいOnCreate
:
_CrossCurrentActivity.Current.Init(this, bundle);
_
これはAndroidプラットフォームサービスコード:です。
_using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Android.OS;
using Firebase.Analytics;
using Plugin.CurrentActivity;
using MobileApp.Services;
namespace MobileApp.Droid.Services
{
[Assembly: Dependency (typeof(AnalyticsServiceDroid))]
public class AnalyticsServiceDroid : IAnalyticsService
{
public void LogEvent(string eventId)
{
LogEvent(eventId, 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)
{
//utility method to fix eventId, you can skip it if you are sure to always pass valid eventIds
eventId = FixEventId(eventId);
var fireBaseAnalytics = FirebaseAnalytics.GetInstance(CrossCurrentActivity.Current.AppContext);
if (parameters == null)
{
fireBaseAnalytics.LogEvent(eventId, null);
return;
}
var bundle = new Bundle();
foreach (var item in parameters)
{
bundle.PutString(item.Key, item.Value);
}
fireBaseAnalytics.LogEvent(eventId, bundle);
}
//utility method to fix eventId, you can skip it if you are sure to always pass valid eventIds
private string FixEventId(string eventId)
{
if (string.IsNullOrWhiteSpace(eventId))
return "unknown";
//remove unwanted characters
eventId = Regex.Replace(eventId, @"[^a-zA-Z0-9_]+", "_", RegexOptions.Compiled);
//trim to 40 if needed
return eventId.Substring(0, Math.Min(40, eventId.Length));
}
}
}
_
Androidのデバッグビュー
FirebaseでdebugViewを有効にするには、adbコンソールコマンドプロンプトからこのコマンドを実行します(通常は_c:\WINDOWS\System32
_ですが、Visual Studioから_tools --> Android --> Android adb command Prompt
_でアクセスできます)。
_adb Shell setprop debug.firebase.analytics.app <package_name>
_
DebugViewを無効にするには:
_adb Shell setprop debug.firebase.analytics.app .none.
_
詳細なロギング
詳細ログはusefykであり、SDKによるイベントのログを監視して、イベントが適切にログに記録されていることを確認します。これには、自動および手動で記録されたイベントの両方が含まれます。
一連のadbコマンドを使用して詳細ログを有効にできます。
_adb Shell setprop log.tag.FA VERBOSE
adb Shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC
_
重要な注意事項
一部の外部ライブラリ(MS AppCenterなど)にはすでにFirebaseが含まれており、マニフェストで分析を明示的に無効にしています。
これらの場合、_
AndroidManifest.xml
_タグの直前に次の行を追加して、_</application>
_を変更する必要があります。_<meta-data Android:name="firebase_analytics_collection_deactivated" Android:value="false" tools:replace="Android:value"/>
_また、このプロパティが_
<manifest>
_タグ内にあることを確認してください:_xmlns:tools="http://schemas.Android.com/tools"
_
電話でイベントログをテストしてください!これはエミュレータでは機能しなくなります
AppDelegateで、base.FinishedLaunchingの直前にコンポーネントを初期化します。
_Firebase.Core.App.Configure();
_
次に、コンパイルアクションを "BundleResource"に設定して、(Firebaseアカウントから生成された)GoogleService-Info.plistをインポートします。
これはiOSプラットフォームサービスコードです:
_using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Firebase.Analytics;
using Firebase.Core;
using Foundation;
using MobileApp.Services;
namespace MobileApp.iOS.Services
{
[Assembly: Dependency (typeof(AnalyticsServiceIOS))]
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)
{
//utility method to fix eventId, you can skip it if you are sure to always pass valid eventIds
eventId = FixEventId(eventId);
if (parameters == null)
{
Analytics.LogEvent(eventId, parameters: null);
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);
}
//utility method to fix eventId, you can skip it if you are sure to always pass valid eventIds
private string FixEventId(string eventId)
{
if (string.IsNullOrWhiteSpace(eventId))
return "unknown";
//remove unwanted characters
eventId = Regex.Replace(eventId, @"[^a-zA-Z0-9_]+", "_", RegexOptions.Compiled);
//trim to 40 if needed
return eventId.Substring(0, Math.Min(40, eventId.Length));
}
}
}
_
iOSのデバッグビュー
Firebase consoleでdebugViewを有効にするには、iOSプロジェクトプロパティのExtramlaunch引数に次の引数を追加します。
_--argument=-FIRDebugEnabled
_
DebugViewを無効にするには:
_--argument=-FIRDebugDisabled
_
重要な注意(これを指摘してくれた Ken に感謝)
AppDelegateで
Firebase.Core.App.Configure();
を呼び出す例外が発生した場合は、_GoogleService-Info.plist
_設定_IS_ANALYTICS_ENABLED
_をtrue
に変更します
例えば:
_public class MenuPageViewModel{
public MenuPageViewModel(){
var analyticsService= DependencyService.Get<IAnalyticsService>();
//You can use any of the LogEvent Overloads, for example:
analyticsService.LogEvent("Event");
}
}
_
私はこのガイドラインに従って成功しました。
ただし、少し便利なコメントが1つあります。ファイル_GoogleService-Info.plist
_では、_IS_ANALYTICS_ENABLED
_をtrueに設定する必要がありました。そうでない場合、Firebase.Core.App.Configure();
を呼び出すと例外が発生しました
あなたのAndroidサービスファイルが間違っています
以下のコード
var bundle = new Bundle();
foreach (var item in parameters)
{
bundle.PutString(FirebaseAnalytics.Param.ItemId, item.Key);
bundle.PutString(FirebaseAnalytics.Param.ItemName, item.Value);
}
すべてのパラメータを追跡するには、次のものに置き換える必要があります。
var bundle = new Bundle();
foreach (var item in parameters)
{
bundle.PutString(item.Key, item.Value);
}