@@ -281,14 +281,24 @@ void onFailure(int statusCode, String response, Throwable throwable) {
281
281
}
282
282
}
283
283
284
+ void onPageChanged (@ NonNull final OSInAppMessage message , @ NonNull final OSInAppMessagePage newPage ) {
285
+ if (message .isPreview ) {
286
+ return ;
287
+ }
288
+ if (message .getViewedPageIds ().contains (newPage .getPageId ())) {
289
+ return ;
290
+ }
291
+ fireRESTCallForPageChange (message , newPage );
292
+ }
293
+
284
294
void onMessageActionOccurredOnMessage (@ NonNull final OSInAppMessage message , @ NonNull final JSONObject actionJson ) throws JSONException {
285
295
final OSInAppMessageAction action = new OSInAppMessageAction (actionJson );
286
296
action .setFirstClick (message .takeActionAsUnique ());
287
297
288
298
firePublicClickHandler (message .messageId , action );
289
299
beginProcessingPrompts (message , action .getPrompts ());
290
300
fireClickAction (action );
291
- fireRESTCallForClick (message , action );
301
+ fireRESTCallForClick (message , action , action . getPageId () );
292
302
fireTagCallForClick (action );
293
303
fireOutcomesForClick (message .messageId , action .getOutcomes ());
294
304
}
@@ -409,7 +419,54 @@ else if (action.getUrlTarget() == OSInAppMessageAction.OSInAppMessageActionUrlTy
409
419
}
410
420
}
411
421
412
- private void fireRESTCallForClick (@ NonNull final OSInAppMessage message , @ NonNull final OSInAppMessageAction action ) {
422
+ private void fireRESTCallForPageChange (@ NonNull final OSInAppMessage message , @ NonNull final OSInAppMessagePage page ) {
423
+ final String variantId = variantIdForMessage (message );
424
+ if (variantId == null )
425
+ return ;
426
+
427
+ final String pageId = page .getPageId ();
428
+
429
+
430
+ // Never send multiple page impressions for the same message UUID unless that page change is from an IAM with redisplay
431
+ if (message .getViewedPageIds ().contains (pageId ))
432
+ return ;
433
+
434
+ message .addPageId (page .getPageId ());
435
+
436
+ try {
437
+ JSONObject json = new JSONObject () {{
438
+ put ("app_id" , OneSignal .appId );
439
+ put ("player_id" , OneSignal .getUserId ());
440
+ put ("variant_id" , variantId );
441
+ put ("device_type" , new OSUtils ().getDeviceType ());
442
+ put ("page_id" , pageId );
443
+ }};
444
+
445
+ OneSignalRestClient .post ("in_app_messages/" + message .messageId + "/pageImpression" , json , new ResponseHandler () {
446
+ @ Override
447
+ void onSuccess (String response ) {
448
+ printHttpSuccessForInAppMessageRequest ("page impression" , response );
449
+ /*OneSignalPrefs.saveStringSet(
450
+ OneSignalPrefs.PREFS_ONESIGNAL,
451
+ OneSignalPrefs.PREFS_OS_PAGE_IMPRESSIONED_IAMS,
452
+ // Post success, store impressioned page to disk
453
+ impressionedMessages);*/
454
+ }
455
+
456
+ @ Override
457
+ void onFailure (int statusCode , String response , Throwable throwable ) {
458
+ printHttpErrorForInAppMessageRequest ("page impression" , statusCode , response );
459
+ // Post failed, impressionedMessage should be removed and this way another post can be attempted
460
+ message .getViewedPageIds ().remove (page .getPageId ());
461
+ }
462
+ });
463
+ } catch (JSONException e ) {
464
+ e .printStackTrace ();
465
+ OneSignal .onesignalLog (OneSignal .LOG_LEVEL .ERROR , "Unable to execute in-app message impression HTTP request due to invalid JSON" );
466
+ }
467
+ }
468
+
469
+ private void fireRESTCallForClick (@ NonNull final OSInAppMessage message , @ NonNull final OSInAppMessageAction action , @ Nullable final String pageId ) {
413
470
final String variantId = variantIdForMessage (message );
414
471
if (variantId == null )
415
472
return ;
@@ -433,6 +490,7 @@ private void fireRESTCallForClick(@NonNull final OSInAppMessage message, @NonNul
433
490
put ("player_id" , OneSignal .getUserId ());
434
491
put ("click_id" , clickId );
435
492
put ("variant_id" , variantId );
493
+ if (pageId != null ) { put ("page_id" , pageId ); }
436
494
if (action .isFirstClick ())
437
495
put ("first_click" , true );
438
496
}};
@@ -495,6 +553,7 @@ private void setDataForRedisplay(OSInAppMessage message) {
495
553
dismissedMessages .remove (message .messageId );
496
554
impressionedMessages .remove (message .messageId );
497
555
message .clearClickIds ();
556
+ message .clearPageIds ();
498
557
}
499
558
}
500
559
}
0 commit comments