@max thank you so much! This is how it worked! I’m so happy! I couldn’t use the window event but instead added a getStatus()
to call from my javascript code.
Here is the full plugin:
import Capacitor
extension Notification.Name {
static let onOneSignalOptin = Notification.Name("onOneSignalOptin")
}
@objc(OneSignalPlugin)
public class OneSignalPlugin: CAPPlugin {
var notificationsEnabled: Bool = false
var oneSignalId: String = "undefined"
/**
* Add event listener for NotificationCenter
*
* @see AppDelegate.swift
*/
public override func load() {
print("Init OneSignalPlugin")
NotificationCenter.default.addObserver(self, selector: #selector(optin(_:)), name: .onOneSignalOptin, object: nil)
}
/**
* Executes on "onOneSignalOptin" event.
* Set oneSignalId so you can call getStatus() in your javascript code.
*
* e.g.: await window.Capacitor.Plugins.OneSignalPlugin.getStatus()
*/
@objc func optin(_ notification:Notification) {
print("OneSignalPlugin: optin")
let oneSignalId = notification.userInfo?["oneSignalId"] ?? "undefined"
let notificationsEnabled = notification.userInfo?["notificationsEnabled"] ?? false
self.oneSignalId = oneSignalId as! String
self.notificationsEnabled = notificationsEnabled as! Bool
}
@objc func getStatus(_ call: CAPPluginCall) {
call.resolve([
"notificationsEnabled": self.notificationsEnabled,
"oneSignalId": self.oneSignalId
])
}
}
and in AppDelegate
:
...
OneSignal.promptForPushNotifications(userResponse: { accepted in
print("User accepted notifications: \(accepted)")
let oneSignalId = OneSignal.getPermissionSubscriptionState()?.subscriptionStatus.userId ?? "undefined"
NotificationCenter.default.post(name: .onOneSignalOptin, object: nil, userInfo: [
"notificationsEnabled": accepted,
"oneSignalId": oneSignalId
])
})
...
Also thanks to @pitahausen. Unfortunately I’m not using ionic framework, so I don’t have any .ts
file. Otherwise I’m sure your solution would have worked.
Best regards
Nick