- Update RunnerTests.swift with notification test cases - Update NexoMessagingPlugin.swift with notification handling - Update ios-notification-test-guide.md
97 lines
3.3 KiB
Swift
97 lines
3.3 KiB
Swift
import Flutter
|
|
import UIKit
|
|
|
|
private enum NexoMessagingChannels {
|
|
static let legacy = "nexo_messaging"
|
|
static let events = "com.tokilabs.nexo.messaging/notifications"
|
|
static let actions = "com.tokilabs.nexo.messaging/notification_actions"
|
|
}
|
|
|
|
private enum NexoMessagingKeys {
|
|
static let deviceToken = "nexo.messaging.deviceToken"
|
|
}
|
|
|
|
public class NexoMessagingPlugin: NSObject, FlutterPlugin, FlutterStreamHandler {
|
|
private var eventSink: FlutterEventSink?
|
|
|
|
public static func register(with registrar: FlutterPluginRegistrar) {
|
|
let instance = NexoMessagingPlugin()
|
|
let messenger = registrar.messenger()
|
|
|
|
let legacyChannel = FlutterMethodChannel(
|
|
name: NexoMessagingChannels.legacy,
|
|
binaryMessenger: messenger
|
|
)
|
|
registrar.addMethodCallDelegate(instance, channel: legacyChannel)
|
|
|
|
let actionChannel = FlutterMethodChannel(
|
|
name: NexoMessagingChannels.actions,
|
|
binaryMessenger: messenger
|
|
)
|
|
registrar.addMethodCallDelegate(instance, channel: actionChannel)
|
|
|
|
let eventChannel = FlutterEventChannel(
|
|
name: NexoMessagingChannels.events,
|
|
binaryMessenger: messenger
|
|
)
|
|
eventChannel.setStreamHandler(instance)
|
|
}
|
|
|
|
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
|
switch call.method {
|
|
case "debugSendNativeEvent":
|
|
guard let payload = call.arguments as? [String: Any] else {
|
|
result(FlutterError(code: "INVALID_ARG", message: "event payload is null", details: nil))
|
|
return
|
|
}
|
|
eventSink?(payload)
|
|
result(nil)
|
|
case "saveDeviceToken":
|
|
guard let token = argument("token", from: call) else {
|
|
result(FlutterError(code: "INVALID_ARG", message: "token is null", details: nil))
|
|
return
|
|
}
|
|
UserDefaults.standard.set(token, forKey: NexoMessagingKeys.deviceToken)
|
|
result(nil)
|
|
case "getDeviceToken":
|
|
result(UserDefaults.standard.string(forKey: NexoMessagingKeys.deviceToken))
|
|
case "setAuthToken":
|
|
guard argument("serverUrl", from: call) != nil, argument("token", from: call) != nil else {
|
|
result(FlutterError(code: "INVALID_ARG", message: "serverUrl or token is null", details: nil))
|
|
return
|
|
}
|
|
result(nil)
|
|
case "setSigningKey":
|
|
guard argument("serverUrl", from: call) != nil, argument("signingKey", from: call) != nil else {
|
|
result(FlutterError(code: "INVALID_ARG", message: "serverUrl or signingKey is null", details: nil))
|
|
return
|
|
}
|
|
result(nil)
|
|
case "clearAuthToken":
|
|
guard argument("serverUrl", from: call) != nil else {
|
|
result(FlutterError(code: "INVALID_ARG", message: "serverUrl is null", details: nil))
|
|
return
|
|
}
|
|
result(nil)
|
|
case "getPlatformVersion":
|
|
result("iOS " + UIDevice.current.systemVersion)
|
|
default:
|
|
result(FlutterMethodNotImplemented)
|
|
}
|
|
}
|
|
|
|
public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
|
|
eventSink = events
|
|
return nil
|
|
}
|
|
|
|
public func onCancel(withArguments arguments: Any?) -> FlutterError? {
|
|
eventSink = nil
|
|
return nil
|
|
}
|
|
|
|
private func argument(_ name: String, from call: FlutterMethodCall) -> String? {
|
|
guard let arguments = call.arguments as? [String: Any] else { return nil }
|
|
return arguments[name] as? String
|
|
}
|
|
}
|