Увімкніть push-сповіщення для iOS (за бажанням)

Push-сповіщення чудово підходять для обміну повідомленнями в реальному часі та інформування користувачів застосунку про те, що їм надійшло нове повідомлення.
Написано Микола
Оновлено 2 місяці тому

Ми вважаємо, що push-сповіщення — це чудовий спосіб увімкнути повідомлення в режимі реального часу та повідомляти користувачів про те, що їм надійшло нове повідомлення від HelpCrunch (тобто з вашоїго акаунту). Це дозволяє вам залишатися на зв’язку зі своїми користувачами, навіть коли застосунок активно не використовується.

При цьому HelpCrunch Mobile SDK не вимагає увімкнення push-повідомлень.

Без push-сповіщень користувачі вашого застосунку все одно зможуть отримувати нові повідомлення, але побачать їх лише якщо відкриють вікно чату HelpCrunch.

Впроваджуючи push-повідомлення для вашого застосунку, пам’ятайте, що push-повідомлення недоступні в симуляторі iOS. Вам знадобиться пристрій iOS, а також ліцензія Apple Developer.

Увімкнення push-повідомлень

Щоб зареєструвати свій поточний пристрій для push-сповіщень, додайте у метод делегата застосунку -application:didFinishLaunchingWithOptions: наступний код:

ObjC:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
// After HelpcrunchSDK init method
[HelpCrunch registerForRemoteNotifications];
if (![HelpCrunch didReceiveRemoteNotificationWithLaunchOptions:launchOptions]) {
// this push notification does not belong to HelpCrunch
}
...
return YES;
}

Swift:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
// After HelpcrunchSDK init method
HelpCrunch.registerForRemoteNotifications()
if !HelpCrunch.didReceiveRemoteNotification(launchOptions: launchOptions) {
// this push notification does not belong to HelpCrunch
}
}

Якщо реєстрація пройшла успішно, буде виконано метод зворотного виклику -application:didRegisterForRemoteNotificationsWithDeviceToken:
у делегаті застосунку. Нам потрібно буде реалізувати цей метод і використовувати його для інформування HelpCrunch про новий пристрій.

ObjC:

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[HelpCrunch setDeviceToken:deviceToken];
}

Swift:

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
HelpCrunch.setDeviceToken(deviceToken)
}

Якщо push-сповіщення надходить, поки застосунок працює у фоновому режимі, воно відображатиметься в Центрі сповіщень iOS.

Однак, якщо сповіщення отримано, коли програма активна, ви самі вирішуєте, як воно має виглядати. Можна реалізувати метод [application:didReceiveRemoteNotification:fetchCompletionHandler:] у делегаті програми. Ми можемо попросити HelpCrunch виконати це за нас. HelpCrunch створить модальне сповіщення та відобразить вміст push-сповіщення.

ObjC:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
if (![HelpCrunch didReceiveRemoteNotification:userInfo]) {
// this push notification does not belong to HelpCrunch
}
}

Swift:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if !HelpCrunch.didReceiveRemoteNotification(userInfo) {
// this push notification does not belong to HelpCrunch
}
}

Реалізація UNUserNotificationCenterDelegate

Починаючи з iOS 10, щоб обробляти сповіщення, які надходять, коли ваш застосунок активно працює, вам потрібно впровадити UNUserNotificationCenterDelegate.

Якщо ви ще цього не зробили, HelpCrunch SDK може надати вбудований делегат, і вам не потрібно буде писати додатковий код. Просто позначте властивість shouldUsePushNotificationDelegate з HCSConfiguration як true. Щось на кшталт такого:

ObjC:

HCSConfiguration *configuration =
[HCSConfiguration configurationForOrganization:@"YOUR_HELPCRUNCH_SUBDOMAIN"
applicationId:@"YOUR_APP_ID"
applicationSecret:@"YOUR_APP_SECRET"];
configuration.shouldUsePushNotificationDelegate = true;
[HelpCrunch initWithConfiguration:configuration
user:nil
completion:^(NSError * _Nullable error) {
// Do something on SDK init completion
}];

Swift:

let configuration = HCSConfiguration(forOrganization: "YOUR_HELPCRUNCH_SUBDOMAIN",
applicationId: "YOUR_APP_ID",
applicationSecret: "YOUR_APP_SECRET")
configuration.shouldUsePushNotificationDelegate = true
HelpCrunch.initWith(configuration, user: nil) { (error) in
// Do something on SDK init completion
}

Якщо у вас уже реалізовано UNUserNotificationCenterDelegate, ви можете додати до нього наступний фрагмент коду:

ObjC:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
// ...
if ([HelpCrunch isVisible]) {
completionHandler(UNNotificationPresentationOptionNone);
} else {
// Your logic or just next line
completionHandler(UNNotificationPresentationOptionAlert);
}
}

Swift:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// ...
if HelpCrunch.isVisible() {
completionHandler([])
} else {
// Your logic or just next line
completionHandler(.alert)
}
}
Чи була наша стаття корисною?