urbanairship / titanium-module

Urban Airship Titanium module
Other
9 stars 9 forks source link

iOS: Help appreciated with Module Build and Update to Airship SDK 13.3.1 #39

Closed kbshl closed 4 years ago

kbshl commented 4 years ago

Hi @rlepinski,

first I apologize for not getting back to you in #31. I've got deadlines and forgot to answer your question 😞 But I've tested your build and it works like expected.

I would like to ask if you can help me with an updated version of the iOS Module that I made with Airship iOS SDK 13.3.1 and Titanium SDK 9.0.2.GA.

I have made a completely new module with Carthage, Titanium SDK 9.0.2.GA and Airship iOS SDK 13.3.1. Additionally, I've added more Public APIs, most in sync with the React Native Airship module.

You can find it here: https://github.com/kbshl/titanium-airship

Sadly I've got the same issues like in #31. I can build the module successfully on my Machine and on Github Actions. But if I run a sample app with one of the builds the app sticks on Splash Screen / App launch.

I've tried everything like completely removing Xcode and reinstall it, but nothing helps nor an error message is thrown on the app run.

Also I've built the current iOS version of this repo on my machine with the same result as in #31. It's really strange and feels like something is missing in code/configuration.

I would really appreciate it if you could have a look and maybe build the module from https://github.com/kbshl/titanium-airship on your machine. Maybe I'm missing something in the Xcode configuration or other things.

A sample app can be found in the sample dir. You just need to replace the Airship Keys in tiapp.xml.

I've seen you are working on an update of the Android version of the module. If you like you can use the whole code of my repo for your iOS update, feel free.

Thank you for your time in advance!

Simulator Logs

[INFO]  Analyzing localized launch images
[INFO]  Analyzing CommonJS modules
[INFO]  Creating asset catalog
[INFO]  Forcing rebuild: build/iphone/Assets.xcassets/Contents.json has changed since last build
[INFO]  Creating app icon set
[INFO]  Creating launch logo image set
[INFO]  Creating launch image set
[INFO]  Creating assets image set
[INFO]  Processing JavaScript files
[INFO]  Writing app properties
[INFO]  Writing bootstrap json
[INFO]  Writing i18n files
[INFO]  Processing Titanium symbols
[INFO]  Removing files
[INFO]  Writing index.json with listing of JS/JSON files
[INFO]  Invoking xcodebuild
[INFO]  Finished building the application in 24s 874ms
[INFO]  Launching iOS Simulator
-- Start simulator log -------------------------------------------------------
[INFO]  Titanium Airship Sample 1.0.0 (Powered by Titanium 9.0.2.2afd8186e8)
[INFO]  Application started
[INFO]  [E] void ApplicationDidFailToRegisterForRemoteNotificationsWithError(__strong id, SEL, UIApplication *__strong, NSError *__strong) [Line 347] Application failed to register for remote notifications with error: Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo={NSLocalizedDescription=remote notifications are not supported in the simulator}
[INFO]  [E] +[UAAppIntegration application:didFailToRegisterForRemoteNotificationsWithError:] [Line 43] Application failed to register for remote notifications with error Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo={NSLocalizedDescription=remote notifications are not supported in the simulator}
[INFO]  [D] -[UAAnalytics addEvent:]_block_invoke [Line 212] Adding app_init event 055F280A-A208-482E-874E-80BEF704A8B7.
[INFO]  [D] -[UAPush updateRegistration] [Line 651] APNS registration is out of date, updating.
[INFO]  [D] -[UAAutomationEngine updateTriggersWithScheduleID:type:argument:incrementAmount:] [Line 581] Updating triggers with type: 0
[INFO]  [D] -[UAAutomationEngine updateTriggersWithScheduleID:type:argument:incrementAmount:] [Line 581] Updating triggers with type: 8
[INFO]  [D] -[UAAutomationEngine updateTriggersWithScheduleID:type:argument:incrementAmount:] [Line 581] Updating triggers with type: 0
[INFO]  [D] -[UAAutomationEngine updateTriggersWithScheduleID:type:argument:incrementAmount:] [Line 581] Updating triggers with type: 8
[INFO]  [D] -[UAInboxMessageList retrieveMessageListWithSuccessBlock:withFailureBlock:] [Line 142] Retrieving message list.
[INFO]  [D] -[UAInboxMessageList refreshInboxWithCompletionHandler:]_block_invoke_2 [Line 354] Inbox messages updated.
[INFO]  [I] -[UAChannel registrationSucceeded] [Line 385] Channel registration updated successfully.
[INFO]  [D] -[UAInboxMessageList retrieveMessageListWithSuccessBlock:withFailureBlock:]_block_invoke [Line 187] Retrieve message list succeeded with status: 200
[INFO]  [D] -[UAInboxMessageList refreshInboxWithCompletionHandler:]_block_invoke_2 [Line 354] Inbox messages updated.

My environment

Titanium Command-Line Interface  , CLI version 5.2.2, Titanium SDK version 9.0.2.GA
Copyright (c) 2012-2017, Appcelerator, Inc.  All Rights Reserved.

Please report bugs to  http://jira.appcelerator.org/ 

Operating System
  Name                        = Mac OS X
  Version                     = 10.15.4
  Architecture                = 64bit
  # CPUs                      = 4
  Memory                      = 16.0GB

Node.js
  Node.js Version             = 10.16.3
  npm Version                 = 6.14.5

Titanium CLI
  CLI Version                 = 5.2.2
  node-appc Version           = 0.2.49

Titanium SDKs
  9.0.2.GA
    Version                   = 9.0.2
    Install Location          = /Users/kbueschel/Library/Application Support/Titanium/mobilesdk/osx/9.0.2.GA
    Platforms                 = iphone, android
    git Hash                  = 2afd8186e8
    git Timestamp             = 5/18/2020 12:01
    node-appc Version         = 0.3.4
  7.5.2.GA
    Version                   = 7.5.2
    Install Location          = /Users/kbueschel/Library/Application Support/Titanium/mobilesdk/osx/7.5.2.GA
    Platforms                 = iphone, android
    git Hash                  = 31f9aa4
    git Timestamp             = 4/2/2019 17:36
    node-appc Version         = 0.2.47
  7.4.1.GA
    Version                   = 7.4.1
    Install Location          = /Users/kbueschel/Library/Application Support/Titanium/mobilesdk/osx/7.4.1.GA
    Platforms                 = iphone, android
    git Hash                  = f47cf79a83
    git Timestamp             = 10/8/2018 17:44
    node-appc Version         = 0.2.45

Mac OS X
  Command Line Tools          = installed

Intel® Hardware Accelerated Execution Manager (HAXM)
  Installed                   = yes
  Memory Limit                = 2 GB

Java Development Kit
  Version                     = 1.8.0_51
  Java Home                   = /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home

Genymotion
  Path                        = not found
  Genymotion Executable       = not found
  Genymotion Player           = not found
  Home                        = not found

VirtualBox
  Executable                  = not found
  Version                     = unknown

Android SDK
  Android Executable          = not found
  ADB Executable              = /Users/kbueschel/Library/Android/sdk/platform-tools/adb
  SDK Path                    = /Users/kbueschel/Library/Android/sdk

Android NDK
  NDK Path                    = /Users/kbueschel/Library/Android/sdk/ndk-bundle
  NDK Version                 = 17.2.4988734

Android Platforms
  1) android-19
    Name                      = Android 4.4.2 **Not supported by Titanium SDK 9.0.2.GA**
    API Level                 = 19
    Revision                  = 1
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = x86
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-19
  2) android-21
    Name                      = Android 5.0.1 **Not supported by Titanium SDK 9.0.2.GA**
    API Level                 = 21
    Revision                  = 2
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = 
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-21
  3) android-22
    Name                      = Android 5.1.1 **Not supported by Titanium SDK 9.0.2.GA**
    API Level                 = 22
    Revision                  = 2
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = 
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-22
  4) android-23
    Name                      = Android 6.0
    API Level                 = 23
    Revision                  = 3
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = x86
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-23
  5) android-24
    Name                      = Android 7.0
    API Level                 = 24
    Revision                  = 2
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = 
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-24
  6) android-25
    Name                      = Android 7.1.1
    API Level                 = 25
    Revision                  = 2
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = 
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-25
  7) android-26
    Name                      = Android 8.0.0
    API Level                 = 26
    Revision                  = 1
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = 
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-26
  8) android-27
    Name                      = Android 8.1.0
    API Level                 = 27
    Revision                  = 1
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = 
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-27
  9) android-28
    Name                      = Android 9
    API Level                 = 28
    Revision                  = 1
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = x86
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-28
  10) android-29
    Name                      = Android 10
    API Level                 = 29
    Revision                  = 1
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = x86
    Path                      = /Users/kbueschel/Library/Android/sdk/platforms/android-29

Android Add-Ons
  11) Google Inc.:Google APIs:19
    Name                      = Google APIs (Android 4.4.2 (API level 19)) **Not supported by Titanium SDK 9.0.2.GA**
    Vendor                    = Google Inc.
    Revision                  = 20
    Description               = Android + Google APIs
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = x86
    Path                      = /Users/kbueschel/Library/Android/sdk/add-ons/addon-google_apis-google-19
    Libraries                 = none
  12) Google Inc.:Google APIs:21
    Name                      = Google APIs (Android 5.0.1 (API level 21)) **Not supported by Titanium SDK 9.0.2.GA**
    Vendor                    = Google Inc.
    Revision                  = 1
    Description               = Android + Google APIs
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = none
    Path                      = /Users/kbueschel/Library/Android/sdk/add-ons/addon-google_apis-google-21
    Libraries                 = none
  13) Google Inc.:Google APIs:22
    Name                      = Google APIs (Android 5.1.1 (API level 22)) **Not supported by Titanium SDK 9.0.2.GA**
    Vendor                    = Google Inc.
    Revision                  = 1
    Description               = Android + Google APIs
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = none
    Path                      = /Users/kbueschel/Library/Android/sdk/add-ons/addon-google_apis-google-22
    Libraries                 = none
  14) Google Inc.:Google APIs:23
    Name                      = Google APIs (Android 6.0 (API level 23))
    Vendor                    = Google Inc.
    Revision                  = 1
    Description               = Android + Google APIs
    Skins                     = HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800, WVGA854, WXGA720, WXGA800, WXGA800-7in
    ABIs                      = x86
    Path                      = /Users/kbueschel/Library/Android/sdk/add-ons/addon-google_apis-google-23
    Libraries                 = none

Android Emulators
  Pixel 2 API 23
    ID                        = Pixel_2_API_23
    SDK Version               = Android 6.0 (API level 23)
    ABI                       = x86
    Skin                      = pixel_2
    Path                      = /Users/kbueschel/.android/avd/Pixel_2_API_23.avd
    SD Card                   = /Users/kbueschel/.android/avd/Pixel_2_API_23.avd/sdcard.img
    Google APIs               = yes
  Pixel 2 API 28
    ID                        = Pixel_2_API_28
    SDK Version               = Android 9 (API level 28)
    ABI                       = x86
    Skin                      = pixel_2
    Path                      = /Users/kbueschel/.android/avd/Pixel_2_API_28.avd
    SD Card                   = /Users/kbueschel/.android/avd/Pixel_2_API_28.avd/sdcard.img
    Google APIs               = no
  Pixel 3 API 24
    ID                        = Pixel_3_API_24
    SDK Version               = not installed
    ABI                       = x86
    Skin                      = pixel_3
    Path                      = /Users/kbueschel/.android/avd/Pixel_3_API_24.avd
    SD Card                   = /Users/kbueschel/.android/avd/Pixel_3_API_24.avd/sdcard.img
    Google APIs               = no
  Pixel 3 API 29
    ID                        = Pixel_3_API_29
    SDK Version               = Android 10 (API level 29)
    ABI                       = x86
    Skin                      = pixel_3
    Path                      = /Users/kbueschel/.android/avd/Pixel_3_API_29.avd
    SD Card                   = /Users/kbueschel/.android/avd/Pixel_3_API_29.avd/sdcard.img
    Google APIs               = no

Genymotion Emulators
  None

Connected Android Devices
  None

Xcode
  11.5 (build 11E608c) - Xcode default
    Install Location          = /Applications/Xcode.app/Contents/Developer
    iOS SDKs                  = 13.5
    iOS Simulators            = 13.4, 13.5
    Watch SDKs                = 6.2
    Watch Simulators          = 6.2
    Supported by TiSDK 9.0.2.GA = yes
    EULA Accepted             = yes
    Teams                     = none

iOS Keychains
  login.keychain-db           = /Users/kbueschel/Library/Keychains/login.keychain-db
  System.keychain             = /Library/Keychains/System.keychain

iOS Development Certificates
/Users/kbueschel/Library/Keychains/login.keychain-db
  iPhone Developer: Konstantin Büschel (JHEEXX3MQ6)
    Not valid before          = 8/12/2019 12:14 PM
    Not valid after           = 8/11/2020 12:14 PM
  iPhone Developer: Shared DIA (ZUWPLYNHS2)
    Not valid before          = 6/14/2019 11:35 PM
    Not valid after           = 6/13/2020 11:35 PM

iOS App Store Distribution Certificates
/Users/kbueschel/Library/Keychains/login.keychain-db
  iPhone Distribution: die.interaktiven GmbH & Co. KG (42HNMCMK48)
    Not valid before          = 7/29/2019 7:04 PM
    Not valid after           = 7/28/2020 7:04 PM

Apple WWDR Certificate
  Apple WWDR                  = installed

Development iOS Provisioning Profiles
-

Ad Hoc iOS Provisioning Profiles
  None

Enterprise Ad Hoc iOS Provisioning Profiles
  None

iOS Simulators
13.4
  iPad Air (3rd generation) (ipad)
    UDID                      = 82FD9446-3961-4208-942A-DBAE14E0839C
    Supports Watch Apps       = no
  iPad Pro (9.7-inch) (ipad)
    UDID                      = 7862FED3-6359-47BC-9706-F6B65E17DBF5
    Supports Watch Apps       = no
  iPad (7th generation) (ipad)
    UDID                      = 34AEBECA-96C8-41D8-81A7-3ABAE5807449
    Supports Watch Apps       = no
  iPad Pro (12.9-inch) (4th generation) (ipad)
    UDID                      = D5D11F5D-72B0-476D-BE01-E5F0BA2B70C0
    Supports Watch Apps       = no
  iPad Pro (11-inch) (2nd generation) (ipad)
    UDID                      = B9C39D20-7CFE-4F39-8336-41FA38EEE52F
    Supports Watch Apps       = no
  iPhone 8 (iphone)
    UDID                      = 7625251F-3296-4C74-B2C2-1B2B6F78ADEB
    Supports Watch Apps       = yes
  iPhone 8 Plus (iphone)
    UDID                      = 56764363-1A6D-4FF1-B96C-C76AAB798115
    Supports Watch Apps       = yes
  iPhone 11 (iphone)
    UDID                      = D72CE30F-210D-4A15-A728-4305D3088EAE
    Supports Watch Apps       = yes
  iPhone 11 Pro (iphone)
    UDID                      = FF6483D9-9D53-4F72-8131-D620F0E51E2F
    Supports Watch Apps       = yes
  iPhone 11 Pro Max (iphone)
    UDID                      = 5F8329D8-0A67-4A47-AC1D-B2AE97AD59C9
    Supports Watch Apps       = yes

13.5
  iPad Air (3rd generation) (ipad)
    UDID                      = AA7550FC-59A2-4693-8913-5261B5435729
    Supports Watch Apps       = no
  iPad Pro (9.7-inch) (ipad)
    UDID                      = 857A2E3B-8904-4914-B076-E59C50A58A34
    Supports Watch Apps       = no
  iPad (7th generation) (ipad)
    UDID                      = 719619D8-DD04-4B9E-9073-5D05CEAE7738
    Supports Watch Apps       = no
  iPad Pro (12.9-inch) (4th generation) (ipad)
    UDID                      = 8AE76B31-0CAE-4DCD-8656-F8B999F1E3A6
    Supports Watch Apps       = no
  iPad Pro (11-inch) (2nd generation) (ipad)
    UDID                      = EC060771-B93F-41DD-A9F8-A5E0068701D1
    Supports Watch Apps       = no
  iPhone 8 (iphone)
    UDID                      = C7D3FE67-5F59-4066-8F12-FE42432FF75D
    Supports Watch Apps       = yes
  iPhone 8 Plus (iphone)
    UDID                      = DAE0524C-970B-476A-B8D6-B08756239AEA
    Supports Watch Apps       = yes
  iPhone 11 (iphone)
    UDID                      = A2872384-42D0-4C99-8E7C-019A2C208207
    Supports Watch Apps       = yes
  iPhone 11 Pro (iphone)
    UDID                      = BBDB509E-5227-4321-80E1-33978555CD32
    Supports Watch Apps       = yes
  iPhone 11 Pro Max (iphone)
    UDID                      = 28A2D7E5-31D4-4AFE-9AA1-7EBA30517417
    Supports Watch Apps       = yes
  iPhone SE (2nd generation) (iphone)
    UDID                      = 7AF93C88-5672-48EA-8F5D-70971031781F
    Supports Watch Apps       = yes

WatchOS Simulators
6.2
  Apple Watch Series 4 - 40mm (watch)
    UDID                      = E1CD1986-1826-4612-B0ED-4361FBE38531
  Apple Watch Series 4 - 44mm (watch)
    UDID                      = 2BED81D0-6D8D-45E2-8AF1-4ECEADE30000
  Apple Watch Series 5 - 40mm (watch)
    UDID                      = 5B698C2F-2AED-4D97-941D-9804FCF296DC
  Apple Watch Series 5 - 44mm (watch)
    UDID                      = 28666560-B644-4AAC-94F2-41D0ACBCC762

Connected iOS Devices
  None
rlepinski commented 4 years ago

@kbshl The log messages look fine, do you have a stack trace on whats crashing?

We are actively updating our plugin to use latest titanium and airship SDK versions. Now that ti is supporting gradle and maybe cocaopods it should be easier for us to keep this plugin up to date.

Instead of a brand new plugin, once we get the SDK updated to latest you could submit PRs to this plugin for missing functionality? With the update, we are planning on adding:

You can track our progress in this branch next. So far we only have Android updated but iOS PR should be coming soon. If you could tell us which features you are trying to use we can prioritize them.

kbshl commented 4 years ago

@rlepinski, sadly there is no crash log nor an error. It just sticks after app launch with the provided logs. Even if I launch the Titanium app via the generated Xcode project, there is no crash or warning logged.

Cocoapods is also supported by Titanium, Carthage just feels easier for me. But both should be fine to use. I've seen multiple other Titanium Modules using Cocoapods.

I've created a brand new plugin to ensure a clean state regarding the Xcode project setup and the possibility to build it on Github Actions, not to provide my module as an alternative. So you're right PRs should be the way to go to contribute my adjustments.

The main features I needed are

Event listeners for

A method to trigger a registration update ([[UAirship push] updateRegistration];)

Some tag related methods like

Some auto badge related methods

Thank you for the quick reply!

rlepinski commented 4 years ago

Could you give me more info on how you are using the Channel Registration Failed event and updateRegistration ?

kbshl commented 4 years ago

I'm using the Channel Registration Failed event just to determine if initialization finished and was successful or failed. Otherwise, I do not have any event/callback that gives me the insight of a failed registration.

I use updateRegistration() after multiple updates via addTags/removeTags and on network change. I could of course handle this using the supplied tags property, but then I would implement the logic to remove/add tags in the Javascript Layer, which is basically not necessary since the Airship SDK already includes/provides this functionality.

rlepinski commented 4 years ago

I would like to avoid the updateRegistration if possible so for grouping tag updates I created a proxy for tag edits:

var editor = Airship.createChannelTagsEditor()
editor.addTags("foo")
editor.addTags("rad", "neat", "woot")
editor.removeTags("rad")
editor.applyTags()

When applyTags is called it will set tags and update registration.

kbshl commented 4 years ago

@rlepinski, I've seen your last changes, looks great 💪

Updating the tags via the tags editor looks good and can be translated to the native SDK docs.

Thank you for your recent effort!!

Just two last questions/requests:

rlepinski commented 4 years ago

@kbshl Thanks for the feedback.

Finally, I wont be able to do a channel update failed. We moved away from exposing that info in Android since it confused devs thinking they needed to do something when they didn't since the SDK handles all retries. Could you explain more what you are doing in that event so I can suggest an alternative?

rlepinski commented 4 years ago

Going to close this issue. Next release will hopefully go out next week. Here is the updated interface: https://github.com/urbanairship/titanium-module/blob/master/documentation/index.md

If you want to test on your machine, run make build or make install

kbshl commented 4 years ago

Ah ok, definitely the right decision.

In the app I'm doing the user notification enablement/tag subscribing in one step. I've built a wrapper, that does user notification enabled, waits for the registration success/fail event, then setting the tags. This process is the "user subscription".

What does the native SDK do if the registration fails but I'm setting the tags anyways? On which event the native SDK runs the registration retry?

I had a look at the updated interface, looks great. At this point, I want to thank you for the regular updates, your ongoing feedback and the great support!

rlepinski commented 4 years ago

Setting tags on the user is fine, we track tags and notification opt-in status differently. You can set tags on an opted out channel and its fine, you still wont be able to notify them. If the channel fails, it automatically retries for you. It is supposed to be a set and forget type of model.

I added this method - https://github.com/urbanairship/titanium-module/blob/master/documentation/index.md#enableusernotificationscallback that will tell you if user notifications where enabled with a callback. Sounds like its a better option than checking channel registration failures.

kbshl commented 4 years ago

Ok, I understand, good to know, thanks for the details.

You're right, I will go this way and change our implementation to use enableUserNotifactions().

Thanks!