Skip to content

Commit 97535e2

Browse files
authored
feat: add custom events support (#153)
1 parent 3a32cb4 commit 97535e2

407 files changed

Lines changed: 96245 additions & 39826 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,4 @@ Thumbs.db
4444
.vs
4545
/Samples/OneSignalApp/<AndroidSdkPath>
4646
/Samples/OneSignalApp/<JavaSdkPath>
47+
/Samples/OneSignalDevApp/Platforms/Android/google-services.json
32.4 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

OneSignalSDK.DotNet.Android/AndroidUserManager.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
using System.Reflection.Emit;
1+
using System.Reflection.Emit;
22
using OneSignalSDK.DotNet.Core;
33
using OneSignalSDK.DotNet.Core.User;
44
using OneSignalSDK.DotNet.Core.User.Subscriptions;
5+
using OneSignalSDK.DotNet.Android.Utilities;
56
using OneSignalNative = Com.OneSignal.Android.OneSignal;
67

78
namespace OneSignalSDK.DotNet.Android
@@ -59,6 +60,11 @@ public string ExternalId
5960
public void RemoveTags(params string[] keys) => OneSignalNative.User.RemoveTags(keys);
6061
public IDictionary<string, string> GetTags() => OneSignalNative.User.Tags;
6162

63+
public void TrackEvent(string name, IDictionary<string, object>? properties = null)
64+
{
65+
OneSignalNative.User.TrackEvent(name, ToNativeConversion.DictToJavaMap(properties));
66+
}
67+
6268
private sealed class InternalUserState : IUserState
6369
{
6470
public string OneSignalId { get; }

OneSignalSDK.DotNet.Android/Utilities/ToNativeConversion.cs

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using OneSignalSDK.DotNet.Core.Debug;
33

44
namespace OneSignalSDK.DotNet.Android.Utilities;
@@ -31,15 +31,19 @@ public static Com.OneSignal.Android.Debug.LogLevel ToLogLevel(LogLevel logLevel)
3131
}
3232
}
3333

34-
public static Java.Lang.Object? ToJavaObject<TObject>(this TObject value)
34+
public static Java.Lang.Object? ToJavaObject(object? value)
3535
{
36-
if (Equals(value, default(TObject)) && !typeof(TObject).IsValueType)
36+
if (value == null)
3737
return null;
3838

3939
if (value is string strValue)
4040
{
4141
return new Java.Lang.String(strValue);
4242
}
43+
else if (value is bool boolValue)
44+
{
45+
return new Java.Lang.Boolean(boolValue);
46+
}
4347
else if (value is int intValue)
4448
{
4549
return new Java.Lang.Integer(intValue);
@@ -76,7 +80,56 @@ public static Com.OneSignal.Android.Debug.LogLevel ToLogLevel(LogLevel logLevel)
7680
{
7781
return new Java.Lang.Long((long)ulongValue);
7882
}
83+
else if (value is IDictionary<string, object> dictValue)
84+
{
85+
return DictToJavaHashMap(dictValue);
86+
}
87+
else if (value is System.Collections.IList listValue)
88+
{
89+
return ListToJavaList(listValue);
90+
}
7991

8092
return null;
8193
}
94+
95+
public static IDictionary<string, Java.Lang.Object>? DictToJavaMap(IDictionary<string, object>? dict)
96+
{
97+
if (dict == null)
98+
return null;
99+
100+
var javaMap = new Dictionary<string, Java.Lang.Object>();
101+
foreach (var kvp in dict)
102+
{
103+
var javaValue = ToJavaObject(kvp.Value);
104+
if (javaValue != null)
105+
javaMap[kvp.Key] = javaValue;
106+
}
107+
return javaMap;
108+
}
109+
110+
private static Java.Util.HashMap? DictToJavaHashMap(IDictionary<string, object>? dict)
111+
{
112+
if (dict == null)
113+
return null;
114+
115+
var javaMap = new Java.Util.HashMap();
116+
foreach (var kvp in dict)
117+
{
118+
javaMap.Put(kvp.Key, ToJavaObject(kvp.Value));
119+
}
120+
return javaMap;
121+
}
122+
123+
public static Java.Util.ArrayList? ListToJavaList(System.Collections.IList? list)
124+
{
125+
if (list == null)
126+
return null;
127+
128+
var javaList = new Java.Util.ArrayList();
129+
foreach (var item in list)
130+
{
131+
javaList.Add(ToJavaObject(item));
132+
}
133+
return javaList;
134+
}
82135
}

OneSignalSDK.DotNet.Core/OneSignalSDK.DotNet.Core.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<TargetFramework>netstandard2.0</TargetFramework>
55
<OutputType>Library</OutputType>
66
<ImplicitUsings>disable</ImplicitUsings>
7+
<LangVersion>10.0</LangVersion>
8+
<Nullable>enable</Nullable>
79
<AssemblyName>OneSignalSDK.DotNet.Core</AssemblyName>
810
<PackageId>OneSignalSDK.DotNet.Core</PackageId>
911
</PropertyGroup>

OneSignalSDK.DotNet.Core/User/IUserManager.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using OneSignalSDK.DotNet.Core.User.Subscriptions;
44

@@ -149,5 +149,12 @@ public interface IUserManager
149149
/// Get the dictionary of data tags for the current user.
150150
/// </summary>
151151
IDictionary<string, string> GetTags();
152+
153+
/// <summary>
154+
/// Track a custom event with the provided name and optional properties.
155+
/// </summary>
156+
/// <param name="name">The name of the custom event to track.</param>
157+
/// <param name="properties">Optional properties to associate with the event.</param>
158+
void TrackEvent(string name, IDictionary<string, object>? properties = null);
152159
}
153160
}

OneSignalSDK.DotNet.iOS.Binding/ApiDefinitions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,11 @@ interface OSUser
603603
//[Abstract]
604604
//[Export ("onJwtExpiredWithExpiredHandler:")]
605605
//void OnJwtExpiredWithExpiredHandler(Action<NSString, Action<NSString>> expiredHandler);
606+
607+
// @required -(void)trackEventWithName:(NSString * _Nonnull)name properties:(NSDictionary<NSString *, id> * _Nullable)properties;
608+
//[Abstract]
609+
[Export ("trackEventWithName:properties:")]
610+
void TrackEventWithName(string name, [NullAllowed] NSDictionary<NSString, NSObject> properties);
606611
}
607612

608613
// @interface OSInAppMessage : NSObject

0 commit comments

Comments
 (0)