Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add getters and observer for onesignal ID and external ID #959

Merged
merged 11 commits into from
Mar 4, 2024

Conversation

jennantilla
Copy link
Contributor

@jennantilla jennantilla commented Jan 10, 2024

Description

One Line Summary

Add getters for onesignal ID and external ID, and a user state observer to know when these values are changed.

Details

Motivation

From developer feedback and to support integration partners, we are exposing the onesignal ID and external ID with getters.

We also want to grant developers the ability to add observers that can be called when there is a change in user state.

Testing

Manual testing

Manually tested on:

  • Pixel 7 Pro Emulator running Android 14
  • iPhone 15 Pro running iOS 17.0.1

Tested adding observer for user state and calling new methods to access externalId and onesignalId. Ensured congruency between iOS and Android responses.

Affected code checklist

  • Notifications
    • Display
    • Open
    • Push Processing
    • Confirm Deliveries
  • Outcomes
  • Sessions
  • In-App Messaging
  • REST API requests
  • Public API changes

Checklist

Overview

  • I have filled out all REQUIRED sections above
  • PR does one thing
    • If it is hard to explain how any codes changes are related to each other then it most likely needs to be more than one PR
  • Any Public API changes are explained in the PR details and conform to existing APIs

Testing

  • I have included test coverage for these changes, or explained why they are not needed
  • All automated tests pass, or I explained why that is not possible
  • I have personally tested this on my device, or explained why that is not possible

Final pass

  • Code is as readable as possible.
    • Simplify with less code, followed by splitting up code into well named functions and variables, followed by adding comments to the code.
  • I have reviewed this PR myself, ensuring it meets each checklist item
    • WIP (Work In Progress) is ok, but explain what is still in progress and what you would like feedback on. Start the PR title with "WIP" to indicate this.

This change is Reviewable

nan-li
nan-li previously requested changes Jan 10, 2024
src/ios/OneSignalPush.m Show resolved Hide resolved
MIGRATION_GUIDE.md Outdated Show resolved Hide resolved
www/UserNamespace.ts Outdated Show resolved Hide resolved
@jennantilla jennantilla requested a review from nan-li January 11, 2024 21:41
@jennantilla jennantilla dismissed nan-li’s stale review February 12, 2024 17:03

Original review comments resolved; dismissing this stale review to request re-review

Copy link
Contributor Author

@jennantilla jennantilla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 0 of 9 files reviewed, 3 unresolved discussions (waiting on @emawby, @jinliu9508, @jkasten2, @nan-li, and @shepherd-l)


MIGRATION_GUIDE.md line 226 at r1 (raw file):

Previously, nan-li (Nan) wrote…

Let's update this usage to await OneSignal.User.getOnesignalId() and await OneSignal.User.getExternalId() ?

Done.


www/UserNamespace.ts line 182 at r1 (raw file):

Previously, nan-li (Nan) wrote…

Let's add a callout in this method description, something like this that is in the native SDKs:

Important: When using the observer to retrieve the onesignalId, check the externalId as well to confirm the values are associated with the expected user.

I can see people just grabbing the onesignalId right away and it may not necessarily have fired for the user they were expecting.

Done.

@nan-li
Copy link
Contributor

nan-li commented Feb 16, 2024

Everything looks good, the only callout is on the UserState object. If there's no external_id, it will fire with

{
  "current": {
    "onesignalId": "b22ad46f-b4c6-464d-8eb2-8225453f0524"
  }
}

You'll need to set null explicitly to the object in native so that it will become:

{
  "current": {
    "externalId": null,
    "onesignalId": "27757d1c-ea72-4cea-a4f8-ac1213e32a6d"
  }
}

@jennantilla
Copy link
Contributor Author

Good catch, @nan-li! I've updated!

@jennantilla jennantilla mentioned this pull request Feb 19, 2024
8 tasks
@nan-li
Copy link
Contributor

nan-li commented Feb 23, 2024

Everything looks great, I just pulled logic into a helper method to translate values into null since they are used in multiple places. In this commit.

And did a rebase on user_model/main branch.

This is my testing scenario:

  1. New app install, call getters for onesignal ID and external ID and see they are null.
    OneSignal.User.getOnesignalId().then(res => {
      console.log("getOnesignalId: " + res); // logs null
    });
    OneSignal.User.getExternalId().then(res => {
      console.log("getExternalId: " + res); // logs null
    });
  1. Observer fires once the onesignal ID is received.
{
  "current": {
    "externalId": null,
    "onesignalId": "1234-abcd-1234-abcd-1234"
  }
}
  1. Observer fires after calling login.
{
  "current": {
    "externalId": "my-euid",
    "onesignalId": "1234-abcd-1234-abcd-1234"
  }
}

jennantilla and others added 11 commits February 23, 2024 17:14
- add getters for onesignal ID/external ID
- add user state observer
include new User methods:
- getOnesignalId
- getExternalId
- addEventListener/removeEventListener
Update Migration Guide
* Extract functionality to translate `null` and empty string ("") into NULL objects, into helper methods as they are used in multiple places.
@jennantilla jennantilla merged commit 3124470 into user_model/main Mar 4, 2024
3 of 4 checks passed
@jennantilla jennantilla deleted the feat/add_get_ids branch March 4, 2024 22:08
@jennantilla jennantilla mentioned this pull request Mar 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants