28
28
#import " OneSignal.h"
29
29
#import < objc/runtime.h>
30
30
31
+ char * cStringCopy (const char * string) {
32
+ if (string == NULL )
33
+ return NULL ;
34
+
35
+ char * res = (char *)malloc (strlen (string) + 1 );
36
+ strcpy (res, string);
37
+
38
+ return res;
39
+ }
40
+
31
41
NSString * CreateNSString (const char * string) {
32
42
return [NSString stringWithUTF8String: string ? string : " " ];
33
43
}
@@ -117,7 +127,7 @@ + (void)load {
117
127
static Class delegateClass = nil ;
118
128
119
129
- (void ) setOneSignalUnityDelegate : (id <UIApplicationDelegate>)delegate {
120
- if (delegateClass) {
130
+ if (delegateClass) {
121
131
[self setOneSignalUnityDelegate: delegate];
122
132
return ;
123
133
}
@@ -146,6 +156,20 @@ void processNotificationReceived(NSString* notificationString) {
146
156
UnitySendMessage (unityListener, " onPushNotificationReceived" , [notificationString UTF8String ]);
147
157
}
148
158
159
+ void processInAppMessageClicked (char * inAppMessageActionString) {
160
+ UnitySendMessage (unityListener, " onInAppMessageClicked" , inAppMessageActionString);
161
+ }
162
+
163
+ char * createInAppMessageJsonString (OSInAppMessageAction* action) {
164
+ return 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 )
170
+ }));
171
+ }
172
+
149
173
void initOneSignalObject (NSDictionary * launchOptions, const char * appId, int displayOption, BOOL inAppLaunchURL, BOOL autoPrompt, BOOL fromColdStart) {
150
174
151
175
NSString * appIdStr = (appId ? [NSString stringWithUTF8String: appId] : nil );
@@ -165,6 +189,9 @@ void initOneSignalObject(NSDictionary* launchOptions, const char* appId, int dis
165
189
kOSSettingsKeyInAppLaunchURL : @(inAppLaunchURL),
166
190
@" kOSSettingsKeyInOmitNoAppIdLogging" : @(fromColdStart)}];
167
191
192
+ [OneSignal setInAppMessageClickHandler: ^(OSInAppMessageAction* action) {
193
+ processInAppMessageClicked (createInAppMessageJsonString (action));
194
+ }];
168
195
}
169
196
170
197
void _init (const char * listenerName, const char * appId, BOOL autoPrompt, BOOL inAppLaunchURL, int displayOption, int logLevel, int visualLogLevel, bool requiresUserPrivacyConsent) {
@@ -192,13 +219,13 @@ void _sendTag(const char* tagName, const char* tagValue) {
192
219
}
193
220
194
221
void _sendTags (const char * tags) {
195
- NSString * jsonString = CreateNSString (tags);
222
+ NSString * jsonString = CreateNSString (tags);
196
223
197
224
NSError * jsonError;
198
225
199
226
NSData * data = [jsonString dataUsingEncoding: NSUTF8StringEncoding];
200
227
NSDictionary * keyValuePairs = [NSJSONSerialization JSONObjectWithData: data options: kNilOptions error: &jsonError];
201
- if (jsonError == nil )
228
+ if (! jsonError)
202
229
[OneSignal sendTags: keyValuePairs];
203
230
}
204
231
@@ -207,13 +234,13 @@ void _deleteTag(const char* key) {
207
234
}
208
235
209
236
void _deleteTags (const char * keys) {
210
- NSString * jsonString = CreateNSString (keys);
237
+ NSString * jsonString = CreateNSString (keys);
211
238
212
239
NSError * jsonError;
213
240
214
241
NSData * data = [jsonString dataUsingEncoding: NSUTF8StringEncoding];
215
242
NSArray * kk = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &jsonError];
216
- if (jsonError == nil )
243
+ if (! jsonError)
217
244
[OneSignal deleteTags: kk];
218
245
}
219
246
@@ -225,7 +252,7 @@ void _getTags() {
225
252
226
253
void _idsAvailable () {
227
254
[OneSignal IdsAvailable: ^(NSString * userId, NSString * pushToken) {
228
- if (pushToken == nil )
255
+ if (! pushToken)
229
256
pushToken = @" " ;
230
257
231
258
UnitySendMessage (unityListener, " onIdsAvailable" ,
@@ -238,12 +265,12 @@ void _setSubscription(BOOL enable) {
238
265
}
239
266
240
267
void _postNotification (const char * jsonData) {
241
- NSString * jsonString = CreateNSString (jsonData);
268
+ NSString * jsonString = CreateNSString (jsonData);
242
269
NSError * jsonError;
243
270
244
271
NSData * data = [jsonString dataUsingEncoding: NSUTF8StringEncoding];
245
272
NSDictionary * jsd = [NSJSONSerialization JSONObjectWithData: data options: kNilOptions error: &jsonError];
246
- if (jsonError == nil )
273
+ if (! jsonError)
247
274
[OneSignal postNotification: jsd onSuccess: ^(NSDictionary * results) {
248
275
UnitySendMessage (unityListener, " onPostNotificationSuccess" , dictionaryToJsonChar (results));
249
276
} onFailure: ^(NSError * error) {
@@ -309,8 +336,6 @@ void _setOneSignalLogLevel(int logLevel, int visualLogLevel) {
309
336
[OneSignal setLogLevel: logLevel visualLevel: visualLogLevel];
310
337
}
311
338
312
- // email
313
-
314
339
void _setUnauthenticatedEmail (const char *email) {
315
340
[OneSignal setEmail: CreateNSString (email) withSuccess: ^{
316
341
UnitySendMessage (unityListener, " onSetEmailSuccess" , dictionaryToJsonChar (@{@" status" : @" success" }));
@@ -359,4 +384,41 @@ void _removeExternalUserId() {
359
384
[OneSignal removeExternalUserId ];
360
385
}
361
386
387
+ void _addTriggers (char *triggers) {
388
+ NSString * jsonString = CreateNSString (triggers);
389
+
390
+ NSError * jsonError;
391
+
392
+ NSData * data = [jsonString dataUsingEncoding: NSUTF8StringEncoding];
393
+ NSDictionary * triggerKeyValuePairs = [NSJSONSerialization JSONObjectWithData: data options: kNilOptions error: &jsonError];
394
+ if (!jsonError)
395
+ [OneSignal addTriggers: triggerKeyValuePairs];
396
+ }
397
+
398
+ void _removeTriggerForKey (char *key) {
399
+ NSString * triggerKey = CreateNSString (key);
400
+ [OneSignal removeTriggerForKey: triggerKey];
401
+ }
402
+
403
+ void _removeTriggersForKeys (char *keys) {
404
+ NSString * jsonString = CreateNSString (keys);
405
+
406
+ NSError * jsonError;
407
+
408
+ NSData * data = [jsonString dataUsingEncoding: NSUTF8StringEncoding];
409
+ NSArray * triggerKeys = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &jsonError];
410
+ if (!jsonError)
411
+ [OneSignal removeTriggersForKeys: triggerKeys];
412
+ }
413
+
414
+ char * _getTriggerValueForKey (char *key) {
415
+ NSString * triggerKey = CreateNSString (key);
416
+ NSDictionary * triggerValue = @{ @" value" : [OneSignal getTriggerValueForKey: triggerKey] };
417
+ return cStringCopy (dictionaryToJsonChar (triggerValue));
418
+ }
419
+
420
+ void _pauseInAppMessages (bool pause) {
421
+ [OneSignal pauseInAppMessages: pause];
422
+ }
423
+
362
424
@end
0 commit comments