Skip to content

Commit 1dc8cfd

Browse files
authored
Set External ID (#166)
• Adds setExternalUserId() and removeExternalUserId() to the Unity SDK • Updates the native iOS and Android SDK's
1 parent 5304495 commit 1dc8cfd

File tree

9 files changed

+147
-70
lines changed

9 files changed

+147
-70
lines changed

OneSignalExample/Assets/OneSignal/Example/GameControllerExample.cs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class GameControllerExample : MonoBehaviour {
3535

3636
private static string extraMessage;
3737
public string email = "Email Address";
38+
public string externalId = "External User ID";
3839

3940
private static bool requiresUserPrivacyConsent = false;
4041

@@ -134,15 +135,15 @@ void OnGUI () {
134135
GUIStyle guiBoxStyle = new GUIStyle("box");
135136
guiBoxStyle.fontSize = 30;
136137

137-
GUIStyle textFieldStyle = new GUIStyle ("textField");
138+
GUIStyle textFieldStyle = new GUIStyle("textField");
138139
textFieldStyle.fontSize = 30;
139140

140141

141142
float itemOriginX = 50.0f;
142143
float itemWidth = Screen.width - 120.0f;
143144
float boxWidth = Screen.width - 20.0f;
144145
float boxOriginY = 120.0f;
145-
float boxHeight = requiresUserPrivacyConsent ? 720.0f : 630.0f;
146+
float boxHeight = requiresUserPrivacyConsent ? 980.0f : 890.0f;
146147
float itemStartY = 200.0f;
147148
float itemHeightOffset = 90.0f;
148149
float itemHeight = 60.0f;
@@ -204,7 +205,7 @@ void OnGUI () {
204205

205206
count++;
206207

207-
email = GUI.TextField (new Rect (itemOriginX, itemStartY + (count * itemHeightOffset), itemWidth, itemHeight), email, customTextSize);
208+
email = GUI.TextField(new Rect(itemOriginX, itemStartY + (count * itemHeightOffset), itemWidth, itemHeight), email, customTextSize);
208209

209210
count++;
210211

@@ -230,6 +231,28 @@ void OnGUI () {
230231
});
231232
}
232233

234+
count++;
235+
236+
externalId = GUI.TextField(new Rect(itemOriginX, itemStartY + (count * itemHeightOffset), itemWidth, itemHeight), externalId, customTextSize);
237+
238+
count++;
239+
240+
if (GUI.Button(new Rect(itemOriginX, itemStartY + (count * itemHeightOffset), itemWidth, itemHeight), "SetExternalId", customTextSize))
241+
{
242+
extraMessage = "Removing External User Id";
243+
244+
OneSignal.SetExternalUserId(externalId);
245+
}
246+
247+
count++;
248+
249+
if (GUI.Button(new Rect(itemOriginX, itemStartY + (count * itemHeightOffset), itemWidth, itemHeight), "RemoveExternalId", customTextSize))
250+
{
251+
extraMessage = "Removing External User Id";
252+
253+
OneSignal.RemoveExternalUserId();
254+
}
255+
233256
if (requiresUserPrivacyConsent) {
234257
count++;
235258

Binary file not shown.

OneSignalExample/Assets/OneSignal/Platforms/iOS/OneSignal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,9 @@ typedef void (^OSEmailSuccessBlock)();
457457
+ (void)setEmail:(NSString * _Nonnull)email;
458458
+ (void)setEmail:(NSString * _Nonnull)email withEmailAuthHashToken:(NSString * _Nullable)hashToken;
459459

460+
+ (void)setExternalUserId:(NSString * _Nonnull)externalId;
461+
+ (void)removeExternalUserId;
462+
460463
@end
461464

462465
#pragma clang diagnostic pop

OneSignalExample/Assets/OneSignal/Platforms/iOS/OneSignalUnityRuntime.m

Lines changed: 72 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ static void injectSelector(Class newClass, SEL newSel, Class addToClass, SEL mak
8888

8989
@interface OSUnityPermissionAndSubscriptionObserver : NSObject<OSPermissionObserver, OSSubscriptionObserver>
9090
- (void)onOSPermissionChanged:(OSPermissionStateChanges*)stateChanges;
91-
- (void)onOSSubscriptionChanged:(OSSubscriptionStateChanges*)stateChanges;
91+
- (void)onOSSubscriptionChanged:(OSSubscriptionStateChanges*)stateChanges;
9292
- (void)onOSEmailSubscriptionChanged:(OSEmailSubscriptionStateChanges *)stateChanges;
9393
@end
9494

@@ -99,10 +99,10 @@ - (void)onOSPermissionChanged:(OSPermissionStateChanges*)stateChanges {
9999

100100
- (void)onOSSubscriptionChanged:(OSSubscriptionStateChanges*)stateChanges {
101101
UnitySendMessage(unityListener, "onOSSubscriptionChanged", dictionaryToJsonChar([stateChanges toDictionary]));
102-
}
103-
104-
- (void)onOSEmailSubscriptionStateChanged:(OSEmailSubscriptionStateChanges *)stateChanges {
105-
UnitySendMessage(unityListener, "onOSEmailSubscriptionStateChanged", dictionaryToJsonChar([stateChanges toDictionary]));
102+
}
103+
104+
- (void)onOSEmailSubscriptionStateChanged:(OSEmailSubscriptionStateChanges *)stateChanges {
105+
UnitySendMessage(unityListener, "onOSEmailSubscriptionStateChanged", dictionaryToJsonChar([stateChanges toDictionary]));
106106
}
107107
@end
108108

@@ -116,10 +116,10 @@ + (void)load {
116116

117117
static Class delegateClass = nil;
118118

119-
- (void) setOneSignalUnityDelegate:(id<UIApplicationDelegate>)delegate {
120-
if(delegateClass) {
121-
[self setOneSignalUnityDelegate:delegate];
122-
return;
119+
- (void) setOneSignalUnityDelegate:(id<UIApplicationDelegate>)delegate {
120+
if(delegateClass) {
121+
[self setOneSignalUnityDelegate:delegate];
122+
return;
123123
}
124124

125125
delegateClass = getClassWithProtocolInHierarchy([delegate class], @protocol(UIApplicationDelegate));
@@ -167,8 +167,8 @@ void initOneSignalObject(NSDictionary* launchOptions, const char* appId, int dis
167167

168168
}
169169

170-
void _init(const char* listenerName, const char* appId, BOOL autoPrompt, BOOL inAppLaunchURL, int displayOption, int logLevel, int visualLogLevel, bool requiresUserPrivacyConsent) {
171-
[OneSignal setRequiresUserPrivacyConsent:requiresUserPrivacyConsent];
170+
void _init(const char* listenerName, const char* appId, BOOL autoPrompt, BOOL inAppLaunchURL, int displayOption, int logLevel, int visualLogLevel, bool requiresUserPrivacyConsent) {
171+
[OneSignal setRequiresUserPrivacyConsent:requiresUserPrivacyConsent];
172172

173173
[OneSignal setLogLevel:logLevel visualLevel: visualLogLevel];
174174

@@ -282,17 +282,17 @@ void _addSubscriptionObserver() {
282282

283283
void _removeSubscriptionObserver() {
284284
[OneSignal removeSubscriptionObserver:osUnityObserver];
285-
}
286-
287-
void _addEmailSubscriptionObserver() {
288-
if (!osUnityObserver)
289-
osUnityObserver = [OSUnityPermissionAndSubscriptionObserver alloc];
290-
291-
[OneSignal addEmailSubscriptionObserver:osUnityObserver];
292-
}
293-
294-
void _removeEmailSubscriptionObserver() {
295-
[OneSignal removeEmailSubscriptionObserver:osUnityObserver];
285+
}
286+
287+
void _addEmailSubscriptionObserver() {
288+
if (!osUnityObserver)
289+
osUnityObserver = [OSUnityPermissionAndSubscriptionObserver alloc];
290+
291+
[OneSignal addEmailSubscriptionObserver:osUnityObserver];
292+
}
293+
294+
void _removeEmailSubscriptionObserver() {
295+
[OneSignal removeEmailSubscriptionObserver:osUnityObserver];
296296
}
297297

298298
char* _getPermissionSubscriptionState() {
@@ -307,48 +307,56 @@ void _promptForPushNotificationsWithUserResponse() {
307307

308308
void _setOneSignalLogLevel(int logLevel, int visualLogLevel) {
309309
[OneSignal setLogLevel:logLevel visualLevel: visualLogLevel];
310-
}
311-
312-
// email
313-
314-
void _setUnauthenticatedEmail(const char*email) {
315-
[OneSignal setEmail:CreateNSString(email) withSuccess:^{
316-
UnitySendMessage(unityListener, "onSetEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
317-
} withFailure:^(NSError *error) {
318-
UnitySendMessage(unityListener, "onSetEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
319-
}];
320-
}
321-
322-
void _setEmail(const char *email, const char *emailAuthCode) {
323-
[OneSignal setEmail:CreateNSString(email) withEmailAuthHashToken:CreateNSString(emailAuthCode) withSuccess:^{
324-
UnitySendMessage(unityListener, "onSetEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
325-
} withFailure:^(NSError *error) {
326-
UnitySendMessage(unityListener, "onSetEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
327-
}];
328-
}
329-
330-
void _logoutEmail() {
331-
[OneSignal logoutEmailWithSuccess:^{
332-
UnitySendMessage(unityListener, "onLogoutEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
333-
} withFailure:^(NSError *error) {
334-
UnitySendMessage(unityListener, "onLogoutEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
335-
}];
336-
}
337-
338-
void _userDidProvideConsent(bool consent) {
339-
[OneSignal consentGranted:consent];
340-
}
341-
342-
bool _userProvidedConsent() {
343-
return ![OneSignal requiresUserPrivacyConsent];
344-
}
345-
346-
void _setRequiresUserPrivacyConsent(bool required) {
347-
[OneSignal setRequiresUserPrivacyConsent:required];
348-
}
349-
350-
void _setLocationShared(bool shared) {
351-
[OneSignal setLocationShared:shared];
310+
}
311+
312+
// email
313+
314+
void _setUnauthenticatedEmail(const char*email) {
315+
[OneSignal setEmail:CreateNSString(email) withSuccess:^{
316+
UnitySendMessage(unityListener, "onSetEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
317+
} withFailure:^(NSError *error) {
318+
UnitySendMessage(unityListener, "onSetEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
319+
}];
320+
}
321+
322+
void _setEmail(const char *email, const char *emailAuthCode) {
323+
[OneSignal setEmail:CreateNSString(email) withEmailAuthHashToken:CreateNSString(emailAuthCode) withSuccess:^{
324+
UnitySendMessage(unityListener, "onSetEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
325+
} withFailure:^(NSError *error) {
326+
UnitySendMessage(unityListener, "onSetEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
327+
}];
328+
}
329+
330+
void _logoutEmail() {
331+
[OneSignal logoutEmailWithSuccess:^{
332+
UnitySendMessage(unityListener, "onLogoutEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
333+
} withFailure:^(NSError *error) {
334+
UnitySendMessage(unityListener, "onLogoutEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
335+
}];
336+
}
337+
338+
void _userDidProvideConsent(bool consent) {
339+
[OneSignal consentGranted:consent];
340+
}
341+
342+
bool _userProvidedConsent() {
343+
return ![OneSignal requiresUserPrivacyConsent];
344+
}
345+
346+
void _setRequiresUserPrivacyConsent(bool required) {
347+
[OneSignal setRequiresUserPrivacyConsent:required];
348+
}
349+
350+
void _setLocationShared(bool shared) {
351+
[OneSignal setLocationShared:shared];
352+
}
353+
354+
void _setExternalUserId(const char *externalId) {
355+
[OneSignal setExternalUserId:CreateNSString(externalId)];
356+
}
357+
358+
void _removeExternalUserId() {
359+
[OneSignal removeExternalUserId];
352360
}
353361

354362
@end
Binary file not shown.

OneSignalExample/Assets/OneSignal/src/OneSignal.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -632,10 +632,26 @@ public static bool UserProvidedConsent() {
632632
#endif
633633
}
634634

635-
public static void SetRequiresUserPrivacyConsent(bool required) {
636-
#if ONESIGNAL_PLATFORM
635+
public static void SetRequiresUserPrivacyConsent(bool required)
636+
{
637+
#if ONESIGNAL_PLATFORM
637638
OneSignal.requiresUserConsent = required;
638-
#endif
639+
#endif
640+
}
641+
642+
643+
public static void SetExternalUserId(string externalId)
644+
{
645+
#if ONESIGNAL_PLATFORM
646+
oneSignalPlatform.SetExternalUserId(externalId);
647+
#endif
648+
}
649+
650+
public static void RemoveExternalUserId()
651+
{
652+
#if ONESIGNAL_PLATFORM
653+
oneSignalPlatform.RemoveExternalUserId();
654+
#endif
639655
}
640656

641657
/*** protected and private methods ****/

OneSignalExample/Assets/OneSignal/src/OneSignalAndroid.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,14 @@ public void SetRequiresUserPrivacyConsent(bool required) {
143143
mOneSignal.Call("setRequiresUserPrivacyConsent", required);
144144
}
145145

146+
public void SetExternalUserId(string externalId) {
147+
mOneSignal.Call("setExternalUserId", externalId);
148+
}
149+
150+
public void RemoveExternalUserId() {
151+
mOneSignal.Call("removeExternalUserId");
152+
}
153+
146154
public OSPermissionSubscriptionState getPermissionSubscriptionState() {
147155
return OneSignalPlatformHelper.parsePermissionSubscriptionState(this, mOneSignal.Call<string>("getPermissionSubscriptionState"));
148156
}

OneSignalExample/Assets/OneSignal/src/OneSignalIOS.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@ public class OneSignalIOS : OneSignalPlatform {
121121
[System.Runtime.InteropServices.DllImport("__Internal")]
122122
extern static public void _setLocationShared(bool enable);
123123

124+
[System.Runtime.InteropServices.DllImport("__Internal")]
125+
extern static public void _setExternalUserId(string externalId);
126+
127+
[System.Runtime.InteropServices.DllImport("__Internal")]
128+
extern static public void _removeExternalUserId();
129+
130+
124131

125132
public OneSignalIOS(string gameObjectName, string appId, bool autoPrompt, bool inAppLaunchURLs, OneSignal.OSInFocusDisplayOption displayOption, OneSignal.LOG_LEVEL logLevel, OneSignal.LOG_LEVEL visualLevel, bool requiresUserPrivacyConsent) {
126133
_init(gameObjectName, appId, autoPrompt, inAppLaunchURLs, (int)displayOption, (int)logLevel, (int)visualLevel, requiresUserPrivacyConsent);
@@ -235,6 +242,16 @@ public void SetRequiresUserPrivacyConsent(bool required) {
235242
_setRequiresUserPrivacyConsent(required);
236243
}
237244

245+
public void SetExternalUserId(string externalId)
246+
{
247+
_setExternalUserId(externalId);
248+
}
249+
250+
public void RemoveExternalUserId()
251+
{
252+
_removeExternalUserId();
253+
}
254+
238255
public OSPermissionSubscriptionState getPermissionSubscriptionState() {
239256
return OneSignalPlatformHelper.parsePermissionSubscriptionState(this, _getPermissionSubscriptionState());
240257
}

OneSignalExample/Assets/OneSignal/src/OneSignalPlatform.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public interface OneSignalPlatform {
5454
bool UserProvidedConsent();
5555
void SetRequiresUserPrivacyConsent(bool required);
5656

57+
void SetExternalUserId(string externalId);
58+
void RemoveExternalUserId();
5759

5860
void addPermissionObserver();
5961
void removePermissionObserver();

0 commit comments

Comments
 (0)