mirror of
https://github.com/rzuasti/oott.git
synced 2026-07-08 19:21:54 +02:00
Enabling push still fails on iOS with getAPNSToken() returning null, so capture the APNs registration result natively to find out why. AppDelegate now overrides didRegister/didFailToRegister, logs the outcome, and exposes it over a oott/push_diagnostics method channel (super still calls through so Firebase swizzling is unaffected). apnsRegistrationStatus() reads that channel, and the settings push toggle now shows Apple's actual rejection reason in the error message when enabling fails, so it can be diagnosed without a Mac to read the device console. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
59 lines
2.2 KiB
Swift
59 lines
2.2 KiB
Swift
import Flutter
|
|
import UIKit
|
|
|
|
@main
|
|
@objc class AppDelegate: FlutterAppDelegate {
|
|
// The most recent APNs registration outcome. Surfaced to Dart over a method
|
|
// channel for in-app diagnostics, because reading the device console requires
|
|
// a Mac and OOTT is built/shipped via Codemagic + TestFlight.
|
|
private var apnsStatus = "APNs: registration not completed yet"
|
|
|
|
override func application(
|
|
_ application: UIApplication,
|
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
|
) -> Bool {
|
|
GeneratedPluginRegistrant.register(with: self)
|
|
|
|
if let controller = window?.rootViewController as? FlutterViewController {
|
|
let channel = FlutterMethodChannel(
|
|
name: "oott/push_diagnostics",
|
|
binaryMessenger: controller.binaryMessenger
|
|
)
|
|
channel.setMethodCallHandler { [weak self] call, result in
|
|
if call.method == "apnsStatus" {
|
|
result(self?.apnsStatus ?? "APNs: status unavailable")
|
|
} else {
|
|
result(FlutterMethodNotImplemented)
|
|
}
|
|
}
|
|
}
|
|
|
|
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
|
}
|
|
|
|
// Logged for diagnostics; super still forwards the token to the
|
|
// firebase_messaging plugin (method swizzling is enabled).
|
|
override func application(
|
|
_ application: UIApplication,
|
|
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
|
|
) {
|
|
apnsStatus = "APNs: registered OK (token bytes=\(deviceToken.count))"
|
|
NSLog("[OOTT] \(apnsStatus)")
|
|
super.application(
|
|
application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
|
|
}
|
|
|
|
// This fires instead of the success callback when iOS refuses to issue an APNs
|
|
// token; error.localizedDescription is the reason we need (e.g. "no valid
|
|
// 'aps-environment' entitlement string found for application").
|
|
override func application(
|
|
_ application: UIApplication,
|
|
didFailToRegisterForRemoteNotificationsWithError error: Error
|
|
) {
|
|
apnsStatus = "APNs: registration FAILED - \(error.localizedDescription)"
|
|
NSLog("[OOTT] \(apnsStatus)")
|
|
super.application(
|
|
application, didFailToRegisterForRemoteNotificationsWithError: error)
|
|
}
|
|
}
|