FlareRain iOS SDK uses Method Swizzling to replace the required method implementation for push notification operation at runtime with its own. As a result, it is possible to achieve a more streamlined integration by eliminating the need for a complicated implementation process.
However, if you want to use it with other push services, you need to disable swizzling so that all services can share the original method. Disabling swizzling requires adding some code.
But don't worry! We have created all 1:1 correspondence methods so that you can integrate very easily. Follow this guide step by step to disable Method Swizzling.
1. Required Steps
Familiarize yourself with the tasks required to disable Method Swizzling. Just add 5 lines!
Update SDK version 1.1.0 or higher
Add FlareLaneSwizzlingEnabled: false to Info.plist
Add 1 method to AppDelegate
Add 2 methods to UNUserNotificationCenter
Add 2 methods to UNNotificationServiceExtension
2. Add a property to Info.plist
After selecting the target project in Xcode, go to Info -> Custom iOS Target Properties -> Add Row
Key: FlareLaneSwizzlingEnabled
Value: 'NO' with Boolean Type
4. Update AppDelegate
application(:didRegisterForRemoteNotificationsWithDeviceToken:)
Swift(AppDelegate.swift) Objective-C(AppDelegate.m)
Copy import FlareLane
@main
class AppDelegate : UIResponder , UIApplicationDelegate {
// ...
func application ( _ application : UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken : Data) {
// Add the code below
FlareLaneAppDelegate.shared. application ( application, didRegisterForRemoteNotificationsWithDeviceToken : deviceToken )
}
// ...
}
Copy @implementation AppDelegate
// ...
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Add the code below
[[FlareLaneAppDelegate shared] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
// ...
@end
5. Update UNUserNotificationCenter
Set a delegate of UNUserNotificationCenterDelegate to your AppDelegate
userNotificationCenter(:willPresent:withCompletionHandler:)
userNotificationCenter(:didReceive:withCompletionHandler:)
Swift Objective-C
Copy import FlareLane
@main
class AppDelegate : UIResponder , UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 1
UNUserNotificationCenter. current () .delegate = self
}
}
extension AppDelegate : UNUserNotificationCenterDelegate {
// 2
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
FlareLaneNotificationCenter.shared.userNotificationCenter(center, willPresent: notification, withCompletionHandler: completionHandler)
}
// 3
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
FlareLaneNotificationCenter.shared.userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)
}
}
Copy // AppDelegate.h
#import <UserNotifications/UserNotifications.h>
@interface AppDelegate : UIResponder <..., UNUserNotificationCenterDelegate>
@end
// AppDelegate.m
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 1
[[UNUserNotificationCenter currentNotificationCenter] setDelegate: self];
}
// 2
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{
[[FlareLaneNotificationCenter shared] userNotificationCenter:center willPresentNotification:notification withCompletionHandler:completionHandler];
}
// 3
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler
{
[[FlareLaneNotificationCenter shared] userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];
}
@end
6. Update UNNotificationServiceExtension
didReceive(:withContentHandler:)
serviceExtensionTimeWillExpire()
Swift Objective-C
Copy import FlareLane
class NotificationService : UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
// 1
// Only handle notifications sent by FlareLane.
if FlareLaneNotificationServiceExtensionHelper.shared. isFlareLaneNotification ( request ) {
FlareLaneNotificationServiceExtensionHelper.shared. didReceive ( request, withContentHandler : contentHandler )
} else {
// ...
}
}
override func serviceExtensionTimeWillExpire () {
// 2
FlareLaneNotificationServiceExtensionHelper.shared. serviceExtensionTimeWillExpire ()
}
}
Copy @import FlareLane;
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
// 1
// Only handle notifications sent by FlareLane.
if ([[FlareLaneNotificationServiceExtensionHelper shared] isFlareLaneNotification:request]) {
[[FlareLaneNotificationServiceExtensionHelper shared] didReceive:request withContentHandler:contentHandler];
} else {
// ...
}
}
- (void)serviceExtensionTimeWillExpire {
[[FlareLaneNotificationServiceExtensionHelper shared] serviceExtensionTimeWillExpire];
// ...
}