Skip to content

Commit 4456692

Browse files
authored
Merge pull request #243 from OneSignal/outcomes_rel_2.10.0
Outcomes rel 2.10.0
2 parents 9d93155 + c4ae2d3 commit 4456692

14 files changed

+2069
-1588
lines changed

OneSignalExample/Assets/OneSignal/Example/GameControllerExample.cs

Lines changed: 263 additions & 240 deletions
Large diffs are not rendered by default.
Binary file not shown.

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

Lines changed: 131 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
char* os_cStringCopy(const char* string) {
3232
if (string == NULL)
33-
return NULL;
33+
return NULL;
3434

3535
char* res = (char*)malloc(strlen(string) + 1);
3636
strcpy(res, string);
@@ -94,25 +94,27 @@ static void injectSelector(Class newClass, SEL newSel, Class addToClass, SEL mak
9494
return dyStr;
9595
}
9696

97+
NSString* dictionaryToNSString(NSDictionary* dict) {
98+
return CreateNSString(dictionaryToJsonChar(dict));
99+
}
97100

98-
99-
@interface OSUnityPermissionAndSubscriptionObserver : NSObject<OSPermissionObserver, OSSubscriptionObserver>
101+
@interface OSUnityPermissionAndSubscriptionObserver : NSObject<OSPermissionObserver, OSSubscriptionObserver, OSEmailSubscriptionObserver>
100102
- (void)onOSPermissionChanged:(OSPermissionStateChanges*)stateChanges;
101103
- (void)onOSSubscriptionChanged:(OSSubscriptionStateChanges*)stateChanges;
102104
- (void)onOSEmailSubscriptionChanged:(OSEmailSubscriptionStateChanges *)stateChanges;
103105
@end
104106

105107
@implementation OSUnityPermissionAndSubscriptionObserver
106108
- (void)onOSPermissionChanged:(OSPermissionStateChanges*)stateChanges {
107-
UnitySendMessage(unityListener, "onOSPermissionChanged", dictionaryToJsonChar([stateChanges toDictionary]));
109+
UnitySendMessage(unityListener, "onOSPermissionChanged", dictionaryToJsonChar([stateChanges toDictionary]));
108110
}
109111

110112
- (void)onOSSubscriptionChanged:(OSSubscriptionStateChanges*)stateChanges {
111-
UnitySendMessage(unityListener, "onOSSubscriptionChanged", dictionaryToJsonChar([stateChanges toDictionary]));
113+
UnitySendMessage(unityListener, "onOSSubscriptionChanged", dictionaryToJsonChar([stateChanges toDictionary]));
112114
}
113115

114-
- (void)onOSEmailSubscriptionStateChanged:(OSEmailSubscriptionStateChanges *)stateChanges {
115-
UnitySendMessage(unityListener, "onOSEmailSubscriptionStateChanged", dictionaryToJsonChar([stateChanges toDictionary]));
116+
- (void)onOSEmailSubscriptionChanged:(OSEmailSubscriptionStateChanges *)stateChanges {
117+
UnitySendMessage(unityListener, "onOSEmailSubscriptionChanged", dictionaryToJsonChar([stateChanges toDictionary]));
116118
}
117119
@end
118120

@@ -134,8 +136,7 @@ - (void) setOneSignalUnityDelegate:(id<UIApplicationDelegate>)delegate {
134136

135137
delegateClass = getClassWithProtocolInHierarchy([delegate class], @protocol(UIApplicationDelegate));
136138

137-
injectSelector(self.class, @selector(oneSignalApplication:didFinishLaunchingWithOptions:),
138-
delegateClass, @selector(application:didFinishLaunchingWithOptions:));
139+
injectSelector(self.class, @selector(oneSignalApplication:didFinishLaunchingWithOptions:), delegateClass, @selector(application:didFinishLaunchingWithOptions:));
139140
[self setOneSignalUnityDelegate:delegate];
140141
}
141142

@@ -162,11 +163,11 @@ void processInAppMessageClicked(char* inAppMessageActionString) {
162163

163164
char* createInAppMessageJsonString(OSInAppMessageAction* action) {
164165
return os_cStringCopy(dictionaryToJsonChar(
165-
@{
166-
@"click_name" : action.clickName,
167-
@"click_url" : action.clickUrl ? action.clickUrl.absoluteString : @"",
168-
@"first_click" : @(action.firstClick),
169-
@"closes_message" : @(action.closesMessage)
166+
@{
167+
@"click_name" : action.clickName,
168+
@"click_url" : action.clickUrl ? action.clickUrl.absoluteString : @"",
169+
@"first_click" : @(action.firstClick),
170+
@"closes_message" : @(action.closesMessage)
170171
}));
171172
}
172173

@@ -177,17 +178,16 @@ void initOneSignalObject(NSDictionary* launchOptions, const char* appId, int dis
177178
[OneSignal setValue:@"unity" forKey:@"mSDKType"];
178179

179180
[OneSignal initWithLaunchOptions:launchOptions appId:appIdStr handleNotificationReceived:^(OSNotification* notification) {
180-
if (unityListener)
181-
processNotificationReceived([notification stringify]);
182-
}
183-
handleNotificationAction:^(OSNotificationOpenedResult* openResult) {
184-
actionNotification = openResult;
185-
if (unityListener)
186-
processNotificationOpened([openResult stringify]);
187-
} settings:@{kOSSettingsKeyAutoPrompt: @(autoPrompt),
188-
kOSSettingsKeyInFocusDisplayOption: @(displayOption),
189-
kOSSettingsKeyInAppLaunchURL: @(inAppLaunchURL),
190-
@"kOSSettingsKeyInOmitNoAppIdLogging": @(fromColdStart)}];
181+
if (unityListener)
182+
processNotificationReceived([notification stringify]);
183+
} handleNotificationAction:^(OSNotificationOpenedResult* openResult) {
184+
actionNotification = openResult;
185+
if (unityListener)
186+
processNotificationOpened([openResult stringify]);
187+
} settings:@{kOSSettingsKeyAutoPrompt: @(autoPrompt),
188+
kOSSettingsKeyInFocusDisplayOption: @(displayOption),
189+
kOSSettingsKeyInAppLaunchURL: @(inAppLaunchURL),
190+
@"kOSSettingsKeyInOmitNoAppIdLogging": @(fromColdStart)}];
191191

192192
[OneSignal setInAppMessageClickHandler:^(OSInAppMessageAction* action) {
193193
processInAppMessageClicked(createInAppMessageJsonString(action));
@@ -244,38 +244,65 @@ void _deleteTags(const char* keys) {
244244
[OneSignal deleteTags:kk];
245245
}
246246

247-
void _getTags() {
247+
void _getTags(const char* delegate) {
248+
NSString* delegateId = CreateNSString(delegate);
249+
248250
[OneSignal getTags:^(NSDictionary* result) {
249-
UnitySendMessage(unityListener, "onTagsReceived", dictionaryToJsonChar(result));
251+
if (!result)
252+
result = @{};
253+
254+
NSString* response = dictionaryToNSString(result);
255+
NSDictionary *data = @{ @"delegate_id" : delegateId, @"response" : response };
256+
257+
UnitySendMessage(unityListener, "onTagsReceived", dictionaryToJsonChar(data));
250258
}];
251259
}
252260

253-
void _idsAvailable() {
261+
void _idsAvailable(const char* delegate) {
262+
NSString* delegateId = CreateNSString(delegate);
263+
254264
[OneSignal IdsAvailable:^(NSString* userId, NSString* pushToken) {
265+
if (!userId)
266+
userId = @"";
267+
255268
if (!pushToken)
256269
pushToken = @"";
257270

258-
UnitySendMessage(unityListener, "onIdsAvailable",
259-
dictionaryToJsonChar(@{@"userId" : userId, @"pushToken" : pushToken}));
271+
NSString* response = dictionaryToNSString(@{ @"userId" : userId, @"pushToken" : pushToken });
272+
NSDictionary* data = @{ @"delegate_id" : delegateId, @"response" : response };
273+
274+
UnitySendMessage(unityListener, "onIdsAvailable", dictionaryToJsonChar(data));
260275
}];
261276
}
262277

263278
void _setSubscription(BOOL enable) {
264279
[OneSignal setSubscription:enable];
265280
}
266281

267-
void _postNotification(const char* jsonData) {
282+
void _postNotification(const char* delegateSuccess, const char* delegateFailure, const char* jsonData) {
283+
NSString* delegateIdSuccess = CreateNSString(delegateSuccess);
284+
NSString* delegateIdFailure = CreateNSString(delegateFailure);
285+
286+
NSString* delegate = dictionaryToNSString(@{ @"success" : delegateIdSuccess, @"failure" : delegateIdFailure });
287+
268288
NSString* jsonString = CreateNSString(jsonData);
269289
NSError* jsonError;
270290

271291
NSData* data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
272292
NSDictionary* jsd = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError];
273293
if (!jsonError)
274294
[OneSignal postNotification:jsd onSuccess:^(NSDictionary* results) {
275-
UnitySendMessage(unityListener, "onPostNotificationSuccess", dictionaryToJsonChar(results));
295+
if (!results)
296+
results = @{};
297+
298+
NSString* response = dictionaryToNSString(results);
299+
NSDictionary* data = @{ @"delegate_id" : delegate, @"response" : response };
300+
UnitySendMessage(unityListener, "onPostNotificationSuccess", dictionaryToJsonChar(data));
276301
} onFailure:^(NSError* error) {
277-
NSString* parsedError = [OneSignal parseNSErrorAsJsonString:error];
278-
UnitySendMessage(unityListener, "onPostNotificationFailed", [parsedError UTF8String]);
302+
303+
NSString* response = CreateNSString([[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
304+
NSDictionary* data = @{ @"delegate_id" : delegate, @"response" : response };
305+
UnitySendMessage(unityListener, "onPostNotificationFailed", dictionaryToJsonChar(data));
279306
}];
280307
}
281308

@@ -288,33 +315,32 @@ void _promptLocation() {
288315
}
289316

290317
void _setInFocusDisplayType(int type) {
291-
OneSignal.inFocusDisplayType = type;
318+
OneSignal.inFocusDisplayType = type;
292319
}
293320

294321
void _addPermissionObserver() {
295-
if (!osUnityObserver)
296-
osUnityObserver = [OSUnityPermissionAndSubscriptionObserver alloc];
297-
[OneSignal addPermissionObserver:osUnityObserver];
322+
if (!osUnityObserver)
323+
osUnityObserver = [OSUnityPermissionAndSubscriptionObserver alloc];
324+
[OneSignal addPermissionObserver:osUnityObserver];
298325
}
299326

300327
void _removePermissionObserver() {
301-
[OneSignal removePermissionObserver:osUnityObserver];
328+
[OneSignal removePermissionObserver:osUnityObserver];
302329
}
303330

304331
void _addSubscriptionObserver() {
305-
if (!osUnityObserver)
306-
osUnityObserver = [OSUnityPermissionAndSubscriptionObserver alloc];
307-
[OneSignal addSubscriptionObserver:osUnityObserver];
332+
if (!osUnityObserver)
333+
osUnityObserver = [OSUnityPermissionAndSubscriptionObserver alloc];
334+
[OneSignal addSubscriptionObserver:osUnityObserver];
308335
}
309336

310337
void _removeSubscriptionObserver() {
311-
[OneSignal removeSubscriptionObserver:osUnityObserver];
338+
[OneSignal removeSubscriptionObserver:osUnityObserver];
312339
}
313340

314341
void _addEmailSubscriptionObserver() {
315342
if (!osUnityObserver)
316343
osUnityObserver = [OSUnityPermissionAndSubscriptionObserver alloc];
317-
318344
[OneSignal addEmailSubscriptionObserver:osUnityObserver];
319345
}
320346

@@ -323,40 +349,67 @@ void _removeEmailSubscriptionObserver() {
323349
}
324350

325351
char* _getPermissionSubscriptionState() {
326-
return dictionaryToJsonNonConstChar([[OneSignal getPermissionSubscriptionState] toDictionary]);
352+
return dictionaryToJsonNonConstChar([[OneSignal getPermissionSubscriptionState] toDictionary]);
327353
}
328354

329355
void _promptForPushNotificationsWithUserResponse() {
330-
[OneSignal promptForPushNotificationsWithUserResponse:^(BOOL accepted) {
331-
UnitySendMessage(unityListener, "onPromptForPushNotificationsWithUserResponse", (accepted ? @"true" : @"false").UTF8String);
332-
}];
356+
[OneSignal promptForPushNotificationsWithUserResponse:^(BOOL accepted) {
357+
UnitySendMessage(unityListener, "onPromptForPushNotificationsWithUserResponse", (accepted ? @"true" : @"false").UTF8String);
358+
}];
333359
}
334360

335361
void _setOneSignalLogLevel(int logLevel, int visualLogLevel) {
336362
[OneSignal setLogLevel:logLevel visualLevel: visualLogLevel];
337363
}
338364

339-
void _setUnauthenticatedEmail(const char*email) {
365+
void _setUnauthenticatedEmail(const char* delegateSuccess, const char* delegateFailure, const char* email) {
366+
NSString* delegateIdSuccess = CreateNSString(delegateSuccess);
367+
NSString* delegateIdFailure = CreateNSString(delegateFailure);
368+
369+
NSString* delegate = dictionaryToNSString(@{ @"success" : delegateIdSuccess, @"failure" : delegateIdFailure });
370+
340371
[OneSignal setEmail:CreateNSString(email) withSuccess:^{
341-
UnitySendMessage(unityListener, "onSetEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
372+
NSString* response = dictionaryToNSString(@{ @"status" : @"success" });
373+
NSDictionary* data = @{ @"delegate_id" : delegate, @"response" : response };
374+
UnitySendMessage(unityListener, "onSetEmailSuccess", dictionaryToJsonChar(data));
342375
} withFailure:^(NSError *error) {
343-
UnitySendMessage(unityListener, "onSetEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
376+
NSString* response = CreateNSString([[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
377+
NSDictionary* data = @{ @"delegate_id" : delegate, @"response" : response };
378+
UnitySendMessage(unityListener, "onSetEmailFailure", dictionaryToJsonChar(data));
344379
}];
345380
}
346381

347-
void _setEmail(const char *email, const char *emailAuthCode) {
382+
void _setEmail(const char* delegateSuccess, const char* delegateFailure, const char *email, const char *emailAuthCode) {
383+
NSString* delegateIdSuccess = CreateNSString(delegateSuccess);
384+
NSString* delegateIdFailure = CreateNSString(delegateFailure);
385+
386+
NSString* delegate = dictionaryToNSString(@{ @"success" : delegateIdSuccess, @"failure" : delegateIdFailure });
387+
348388
[OneSignal setEmail:CreateNSString(email) withEmailAuthHashToken:CreateNSString(emailAuthCode) withSuccess:^{
349-
UnitySendMessage(unityListener, "onSetEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
389+
NSString* response = dictionaryToNSString(@{ @"status" : @"success" });
390+
NSDictionary* data = @{ @"delegate_id" : delegate, @"response" : response };
391+
UnitySendMessage(unityListener, "onSetEmailSuccess", dictionaryToJsonChar(data));
350392
} withFailure:^(NSError *error) {
351-
UnitySendMessage(unityListener, "onSetEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
393+
NSString* response = CreateNSString([[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
394+
NSDictionary* data = @{ @"delegate_id" : delegate, @"response" : response };
395+
UnitySendMessage(unityListener, "onSetEmailFailure", dictionaryToJsonChar(data));
352396
}];
353397
}
354398

355-
void _logoutEmail() {
399+
void _logoutEmail(const char* delegateSuccess, const char* delegateFailure) {
400+
NSString* delegateIdSuccess = CreateNSString(delegateSuccess);
401+
NSString* delegateIdFailure = CreateNSString(delegateFailure);
402+
403+
NSString* delegate = dictionaryToNSString(@{ @"success" : delegateIdSuccess, @"failure" : delegateIdFailure });
404+
356405
[OneSignal logoutEmailWithSuccess:^{
357-
UnitySendMessage(unityListener, "onLogoutEmailSuccess", dictionaryToJsonChar(@{@"status" : @"success"}));
406+
NSString* response = dictionaryToNSString(@{ @"status" : @"success" });
407+
NSDictionary* data = @{ @"delegate_id" : delegate, @"response" : response };
408+
UnitySendMessage(unityListener, "onLogoutEmailSuccess", dictionaryToJsonChar(data));
358409
} withFailure:^(NSError *error) {
359-
UnitySendMessage(unityListener, "onLogoutEmailFailure", [[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
410+
NSString* response = CreateNSString([[OneSignal parseNSErrorAsJsonString:error] UTF8String]);
411+
NSDictionary* data = @{ @"delegate_id" : delegate, @"response" : response };
412+
UnitySendMessage(unityListener, "onLogoutEmailFailure", dictionaryToJsonChar(data));
360413
}];
361414
}
362415

@@ -421,4 +474,25 @@ void _pauseInAppMessages(bool pause) {
421474
[OneSignal pauseInAppMessages:pause];
422475
}
423476

477+
void _sendOutcome(const char* delegate, char* name) {
478+
NSString* delegateId = CreateNSString(delegate);
479+
480+
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:@"Method sendOutcome() not implemented for iOS yet!"];
481+
return;
482+
}
483+
484+
void _sendUniqueOutcome(const char* delegate, char* name) {
485+
NSString* delegateId = CreateNSString(delegate);
486+
487+
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:@"Method sendUniqueOutcome() not implemented for iOS yet!"];
488+
return;
489+
}
490+
491+
void _sendOutcomeWithValue(const char* delegate, char* name, float value) {
492+
NSString* delegateId = CreateNSString(delegate);
493+
494+
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:@"Method sendOutcomeWithValue() not implemented for iOS yet!"];
495+
return;
496+
}
497+
424498
@end
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.9.1
1+
2.10.0

OneSignalExample/Assets/OneSignal/src/MiniJSON.cs

100755100644
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2727
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2828
*/
29+
2930
using System;
3031
using System.Collections;
3132
using System.Collections.Generic;

0 commit comments

Comments
 (0)