-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHeap.iOS.cs
147 lines (118 loc) · 4.43 KB
/
Heap.iOS.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Collections.Generic;
using Foundation;
#nullable enable
namespace HeapInc.Xamarin.iOS
{
public static class Implementation
{
public static void StartRecording(string environmentId)
{
StartRecording(environmentId, new HeapOptions());
}
public static void StartRecording(string environmentId, HeapOptions options)
{
var implementation = HeapIOS.Instance;
HeapInc.Xamarin.Heap.SetImplementation(implementation);
implementation.StartRecording(environmentId, options);
}
public static void SetLogLevel(HeapLogLevel logLevel)
{
Heap.SharedInstance.LogLevel = logLevel;
}
}
class HeapIOS : HeapInc.Xamarin.IHeap
{
private static readonly HeapIOS instance = new HeapIOS();
public static HeapIOS Instance
{
get
{
return instance;
}
}
private HeapSourceInfo SourceInfo { get; }
protected HeapIOS()
{
var version = typeof(HeapIOS).Assembly.GetName().Version.ToString();
SourceInfo = HeapSourceInfo.SourceInfo("xamarin_bridge", version, "Xamarin.iOS");
}
public string? SessionId => Heap.SharedInstance.SessionId;
public string? UserId => Heap.SharedInstance.UserId;
public string? Identity => Heap.SharedInstance.Identity;
public void StartRecording(string environmentId)
{
Heap.SharedInstance.StartRecording(environmentId);
}
public void StartRecording(string environmentId, HeapOptions options)
{
NSMutableDictionary heapOptions = new NSMutableDictionary();
if (options.BaseUri is not null)
{
heapOptions.Add(HeapOption.BaseUrl, NSObject.FromObject(options.BaseUri.AbsoluteUri));
}
if (options.UploadInterval is not null)
{
heapOptions.Add(HeapOption.UploadInterval, NSObject.FromObject(options.UploadInterval.Value.TotalSeconds));
}
if (options.CaptureAdvertiserId)
{
heapOptions.Add(HeapOption.CaptureAdvertiserId, NSObject.FromObject(options.CaptureAdvertiserId));
}
if (options.StartSessionImmediately)
{
heapOptions.Add(HeapOption.StartSessionImmediately, NSObject.FromObject(options.StartSessionImmediately));
}
if (options.CaptureVendorId)
{
heapOptions.Add(HeapOption.CaptureVendorId, NSObject.FromObject(options.CaptureVendorId));
}
Heap.SharedInstance.StartRecording(environmentId, heapOptions);
}
public void StopRecording()
{
Heap.SharedInstance.StopRecording();
}
public void Track(string trackEvent, Dictionary<string, string> properties)
{
Heap.SharedInstance.Track(trackEvent, DictionaryToNSDictionary(properties), SourceInfo);
}
public void Identify(string identity)
{
Heap.SharedInstance.Identify(identity);
}
public void ResetIdentity()
{
Heap.SharedInstance.ResetIdentity();
}
public void AddEventProperties(Dictionary<string, string> properties)
{
Heap.SharedInstance.AddEventProperties(DictionaryToNSDictionary(properties));
}
public void AddUserProperties(Dictionary<string, string> properties)
{
Heap.SharedInstance.AddUserProperties(DictionaryToNSDictionary(properties));
}
public void ClearEventProperties()
{
Heap.SharedInstance.ClearEventProperties();
}
public void RemoveEventProperty(string name)
{
Heap.SharedInstance.RemoveEventProperty(name);
}
public string? FetchSessionId()
{
return Heap.SharedInstance.FetchSessionId();
}
private static NSDictionary DictionaryToNSDictionary(Dictionary<string, string> dictionary)
{
string[] objects = new string[dictionary.Count];
dictionary.Values.CopyTo(objects, 0);
string[] keys = new string[dictionary.Count];
dictionary.Keys.CopyTo(keys, 0);
return NSDictionary.FromObjectsAndKeys(objects, keys);
}
}
}
#nullable disable