-
Notifications
You must be signed in to change notification settings - Fork 16
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
[ECO-5119] Opt out default push handler #560
base: main
Are you sure you want to change the base?
Conversation
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThe changes focus on enhancing push notification handling in an iOS application using the Ably Flutter plugin. The modifications include updating the Changes
Assessment against linked issues
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (4)
example/ios/Runner/AppDelegate.swift (2)
18-23
: Consider using modern UNUserNotificationCenter API.While this example is intentionally simple, it's using a deprecated API. Consider adding a second example using the recommended
UNUserNotificationCenter
API to demonstrate best practices.Here's an example implementation using the modern API:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo NSLog("Notification received: \(userInfo)") completionHandler() }
18-23
: Enhance the example push notification handling.While this provides a basic example, it uses a deprecated API and only logs the notification. Consider:
- Using the recommended
UNUserNotificationCenterDelegate
methods instead- Adding more comprehensive example handling
Here's an improved example using modern APIs:
- override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { - NSLog("Notification received: \(userInfo)") - } + // MARK: - UNUserNotificationCenterDelegate + + func userNotificationCenter( + _ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void + ) { + let userInfo = notification.request.content.userInfo + NSLog("Notification received in foreground: \(userInfo)") + + // Example: Show banner and play sound for important notifications + if let aps = userInfo["aps"] as? [String: Any], + let category = aps["category"] as? String, + category == "IMPORTANT" { + completionHandler([.banner, .sound]) + } else { + completionHandler([]) + } + } + + func userNotificationCenter( + _ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: @escaping () -> Void + ) { + let userInfo = response.notification.request.content.userInfo + NSLog("Notification response received: \(userInfo)") + + // Example: Handle notification tap + switch response.actionIdentifier { + case UNNotificationDefaultActionIdentifier: + // Handle default tap action + break + case UNNotificationDismissActionIdentifier: + // Handle dismiss action + break + default: + // Handle custom actions + break + } + + completionHandler() + }example/ios/Runner/Info.plist (2)
5-6
: Document the new configuration key.The new configuration key is correctly implemented. Consider adding documentation in the README or migration guide to explain:
- Purpose of the
AblyFlutterHandlePushNotifications
key- Default value and its implications
- Steps to opt out of default push handling
5-6
: LGTM: Well-structured configuration key.The new configuration key follows platform conventions and maintains backward compatibility with its default value of
true
.Consider adding a comment in the Info.plist to document this feature:
<key>AblyFlutterHandlePushNotifications</key> + <!-- Set to false to opt out of Ably's default push notification handling --> <true/>
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
example/ios/Runner/AppDelegate.swift
(1 hunks)example/ios/Runner/Info.plist
(1 hunks)ios/Classes/AblyFlutter.m
(2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (5)
- GitHub Check: android (29)
- GitHub Check: ios
- GitHub Check: android (24)
- GitHub Check: android
- GitHub Check: ios (iPhone 15)
🔇 Additional comments (6)
example/ios/Runner/AppDelegate.swift (2)
4-4
: LGTM! Modern Swift syntax used.The update from
@UIApplicationMain
to@main
follows modern Swift conventions.
4-4
: LGTM: Modern Swift syntax used.The change from
@UIApplicationMain
to@main
follows modern Swift conventions.ios/Classes/AblyFlutter.m (4)
698-702
: LGTM! Proper handling of configuration with backward compatibility.The implementation correctly:
- Reads the configuration from Info.plist
- Provides a default value of YES for backward compatibility
- Safely handles the case when the key is not present
724-729
: LGTM! Clean conditional initialization of push handlers.The push notification handlers are only initialized when handleAPNs is true, effectively implementing the opt-out feature.
698-702
: LGTM: Clean implementation of opt-out feature.The implementation properly reads the configuration from Info.plist with null checking and maintains backward compatibility by defaulting to
YES
.
724-729
: LGTM: Safe initialization of push notification handlers.The code properly preserves the existing notification center delegate and only initializes the handlers when enabled.
Closes #557
Some users use APNs via FCM, so there should be an option to turn-off default handling of push notifications in iOS Ably Flutter to give user an ability to handle it themselves or via FCM framework (similar opt-out exists in android's Ably Flutter via AndroidManifest).
Summary by CodeRabbit
New Features
Improvements