Skip to content

Commit 0aa6a57

Browse files
jinliu9508fadi-george
authored andcommitted
add manual test for custom event
fix bug with tomap
1 parent b558513 commit 0aa6a57

3 files changed

Lines changed: 91 additions & 23 deletions

File tree

OneSignalExample/Assets/OneSignal/Example/OneSignalExampleBehaviour.cs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,21 @@ public class OneSignalExampleBehaviour : MonoBehaviour
124124
/// <summary>
125125
///
126126
/// </summary>
127+
public string eventName;
128+
129+
/// <summary>
130+
///
131+
/// </summary>
132+
public string eventPropertyKey;
133+
134+
/// <summary>
135+
///
136+
/// </summary>
137+
public string eventPropertyValue;
138+
139+
/// <summary>
140+
///
141+
/// </summary>
127142
public string liveActivityId;
128143

129144
/// <summary>
@@ -461,6 +476,21 @@ public void GetTags()
461476
_log($"Get all user tags " + dictionaryString.TrimEnd(',', ' ') + "}");
462477
}
463478

479+
public void TrackEvent() {
480+
var properties = new Dictionary<string, object> {
481+
{ eventPropertyKey, eventPropertyValue },
482+
{ "timestamp", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
483+
{ "platform", "Unity" }
484+
};
485+
_log($"Tracking event <b>{eventName}</b> with properties: {Json.Serialize(properties)}");
486+
OneSignal.User.TrackEvent(eventName, properties);
487+
}
488+
489+
public void TrackEventSimple() {
490+
_log($"Tracking simple event <b>{eventName}</b> without properties");
491+
OneSignal.User.TrackEvent(eventName);
492+
}
493+
464494
/*
465495
* Outcomes
466496
*/
@@ -607,10 +637,13 @@ public void RemovePushToStartToken()
607637

608638
public void SetLiveActivityTypeToken(string newVal) => liveActivityTypeToken = newVal;
609639

610-
private void Awake()
611-
{
612-
SDKDebug.LogIntercept += _log;
613-
SDKDebug.WarnIntercept += _warn;
640+
public void SetEventName(string newVal) => eventName = newVal;
641+
public void SetEventPropertyKey(string newVal) => eventPropertyKey = newVal;
642+
public void SetEventPropertyValue(string newVal) => eventPropertyValue = newVal;
643+
644+
private void Awake() {
645+
SDKDebug.LogIntercept += _log;
646+
SDKDebug.WarnIntercept += _warn;
614647
SDKDebug.ErrorIntercept += _error;
615648
appIdText.text = appId;
616649
}

com.onesignal.unity.android/Runtime/AndroidUserManager.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,8 @@ public void RemoveAliases(params string[] labels) =>
109109

110110
public void RemoveSms(string sms) => _user.Call("removeSms", sms);
111111

112-
public void TrackEvent(string name, Dictionary<string, object> properties = null)
113-
{
114-
if (properties != null)
115-
_user.Call("trackEvent", name, properties.ToMap());
116-
else
117-
_user.Call("trackEvent", name);
118-
}
112+
public void TrackEvent(string name, Dictionary<string, object> properties = null) =>
113+
_user.Call("trackEvent", name, properties?.ToMap());
119114

120115
public void Initialize()
121116
{

com.onesignal.unity.android/Runtime/Utilities/AndroidJavaObjectExtensions.cs

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ public static AndroidJavaObject ToMap(this Dictionary<string, string> source)
135135

136136
public static AndroidJavaObject ToMap(this Dictionary<string, object> source)
137137
{
138+
if (source == null)
139+
return null;
140+
138141
var map = new AndroidJavaObject("java.util.HashMap");
139142
var put = AndroidJNIHelper.GetMethodID(
140143
map.GetRawClass(),
@@ -145,18 +148,55 @@ public static AndroidJavaObject ToMap(this Dictionary<string, object> source)
145148
var entryArgs = new object[2];
146149
foreach (var kv in source)
147150
{
148-
var key = new AndroidJavaObject("java.lang.String", kv.Key);
149-
var value = new AndroidJavaClass("java.lang.String").CallStatic<string>(
150-
"valueOf",
151-
kv.Value
152-
);
153-
entryArgs[0] = key;
154-
entryArgs[1] = value;
155-
AndroidJNI.CallObjectMethod(
156-
map.GetRawObject(),
157-
put,
158-
AndroidJNIHelper.CreateJNIArgArray(entryArgs)
159-
);
151+
using (var key = new AndroidJavaObject("java.lang.String", kv.Key))
152+
{
153+
AndroidJavaObject value = null;
154+
155+
// Preserve original data types
156+
switch (kv.Value)
157+
{
158+
case string stringValue:
159+
value = new AndroidJavaObject("java.lang.String", stringValue);
160+
break;
161+
case int intValue:
162+
value = new AndroidJavaObject("java.lang.Integer", intValue);
163+
break;
164+
case long longValue:
165+
value = new AndroidJavaObject("java.lang.Long", longValue);
166+
break;
167+
case float floatValue:
168+
value = new AndroidJavaObject("java.lang.Float", floatValue);
169+
break;
170+
case double doubleValue:
171+
value = new AndroidJavaObject("java.lang.Double", doubleValue);
172+
break;
173+
case bool boolValue:
174+
value = new AndroidJavaObject("java.lang.Boolean", boolValue);
175+
break;
176+
case null:
177+
value = null;
178+
break;
179+
default:
180+
// Fallback to string representation for unsupported types
181+
value = new AndroidJavaObject("java.lang.String", kv.Value.ToString());
182+
break;
183+
}
184+
185+
try
186+
{
187+
entryArgs[0] = key;
188+
entryArgs[1] = value;
189+
AndroidJNI.CallObjectMethod(
190+
map.GetRawObject(),
191+
put,
192+
AndroidJNIHelper.CreateJNIArgArray(entryArgs)
193+
);
194+
}
195+
finally
196+
{
197+
value?.Dispose();
198+
}
199+
}
160200
}
161201

162202
return map;

0 commit comments

Comments
 (0)