@@ -203,6 +203,7 @@ Appboy.prototype.initializeV2 = function(customEndpoint) {
203
203
openNewsFeedCardsInNewTab : options . openNewsFeedCardsInNewTab ,
204
204
requireExplicitInAppMessageDismissal :
205
205
options . requireExplicitInAppMessageDismissal ,
206
+ serviceWorkerLocation : options . serviceWorkerLocation ,
206
207
sessionTimeoutInSeconds : Number ( options . sessionTimeoutInSeconds ) || 30
207
208
} ;
208
209
@@ -255,13 +256,31 @@ Appboy.prototype.identify = function(identify) {
255
256
var phone = identify . phone ( ) ;
256
257
var traits = clone ( identify . traits ( ) ) ;
257
258
258
- window . appboy . changeUser ( userId ) ;
259
- window . appboy . getUser ( ) . setAvatarImageUrl ( avatar ) ;
260
- window . appboy . getUser ( ) . setEmail ( email ) ;
261
- window . appboy . getUser ( ) . setFirstName ( firstName ) ;
262
- window . appboy . getUser ( ) . setGender ( getGender ( gender ) ) ;
263
- window . appboy . getUser ( ) . setLastName ( lastName ) ;
264
- window . appboy . getUser ( ) . setPhoneNumber ( phone ) ;
259
+ if ( userId ) {
260
+ window . appboy . changeUser ( userId ) ;
261
+ }
262
+ if ( avatar ) {
263
+ window . appboy . getUser ( ) . setAvatarImageUrl ( avatar ) ;
264
+ }
265
+ if ( email ) {
266
+ window . appboy . getUser ( ) . setEmail ( email ) ;
267
+ }
268
+ if ( firstName ) {
269
+ window . appboy . getUser ( ) . setFirstName ( firstName ) ;
270
+ }
271
+ if ( gender ) {
272
+ window . appboy . getUser ( ) . setGender ( getGender ( gender ) ) ;
273
+ }
274
+ if ( lastName ) {
275
+ window . appboy . getUser ( ) . setLastName ( lastName ) ;
276
+ }
277
+ if ( phone ) {
278
+ window . appboy . getUser ( ) . setPhoneNumber ( phone ) ;
279
+ }
280
+ if ( address ) {
281
+ window . appboy . getUser ( ) . setCountry ( address . country ) ;
282
+ window . appboy . getUser ( ) . setHomeCity ( address . city ) ;
283
+ }
265
284
if ( address ) {
266
285
window . appboy . getUser ( ) . setCountry ( address . country ) ;
267
286
window . appboy . getUser ( ) . setHomeCity ( address . city ) ;
@@ -307,6 +326,14 @@ Appboy.prototype.identify = function(identify) {
307
326
delete traits [ key ] ;
308
327
} , reserved ) ;
309
328
329
+ // Remove nested hash objects as Braze only supports nested array objects in identify calls
330
+ // https://segment.com/docs/destinations/braze/#identify
331
+ each ( function ( value , key ) {
332
+ if ( value !== null && typeof value === 'object' && ! Array . isArray ( value ) ) {
333
+ delete traits [ key ] ;
334
+ }
335
+ } , traits ) ;
336
+
310
337
each ( function ( value , key ) {
311
338
window . appboy . getUser ( ) . setCustomUserAttribute ( key , value ) ;
312
339
} , traits ) ;
@@ -325,7 +352,9 @@ Appboy.prototype.group = function(group) {
325
352
var userId = group . userId ( ) ;
326
353
var groupIdKey = 'ab_segment_group_' + group . groupId ( ) ;
327
354
328
- window . appboy . changeUser ( userId ) ;
355
+ if ( userId ) {
356
+ window . appboy . changeUser ( userId ) ;
357
+ }
329
358
window . appboy . getUser ( ) . setCustomUserAttribute ( groupIdKey , true ) ;
330
359
} ;
331
360
@@ -356,7 +385,17 @@ Appboy.prototype.track = function(track) {
356
385
delete properties [ key ] ;
357
386
} , reserved ) ;
358
387
359
- window . appboy . changeUser ( userId ) ;
388
+ // Remove nested objects as Braze doesn't support objects in tracking calls
389
+ // https://segment.com/docs/destinations/braze/#track
390
+ each ( function ( value , key ) {
391
+ if ( value != null && typeof value === 'object' ) {
392
+ delete properties [ key ] ;
393
+ }
394
+ } , properties ) ;
395
+
396
+ if ( userId ) {
397
+ window . appboy . changeUser ( userId ) ;
398
+ }
360
399
window . appboy . logCustomEvent ( eventName , properties ) ;
361
400
} ;
362
401
@@ -379,7 +418,9 @@ Appboy.prototype.page = function(page) {
379
418
var eventName = pageEvent . event ( ) ;
380
419
var properties = page . properties ( ) ;
381
420
382
- window . appboy . changeUser ( userId ) ;
421
+ if ( userId ) {
422
+ window . appboy . changeUser ( userId ) ;
423
+ }
383
424
window . appboy . logCustomEvent ( eventName , properties ) ;
384
425
} ;
385
426
@@ -400,7 +441,9 @@ Appboy.prototype.orderCompleted = function(track) {
400
441
var currencyCode = track . currency ( ) ;
401
442
var purchaseProperties = track . properties ( ) ;
402
443
403
- window . appboy . changeUser ( userId ) ;
444
+ if ( userId ) {
445
+ window . appboy . changeUser ( userId ) ;
446
+ }
404
447
405
448
// remove reduntant properties
406
449
del ( purchaseProperties , 'products' ) ;
0 commit comments