Инструкции по миграции
Переход на версию 4.0.0
В версии 4.0.0 переработана интграция и работа с пуш-библиотекой.
- Пуш-библиотека
MFMSPushLite
убрана внутрьThreads
, все взаимодействие теперь происходит только через него. - Для показа чата теперь предоставляется
UIViewController
Подключение через CocoaPods
Если вы подключаете Threads
через CocoaPods
- уберите ручное подключение MFMSPushLite
. Теперь зависимость подтягивается автоматически
Конфигурация Threads
Замените все вызовы статических методов класса Threads
на обращение к синглтону [Threads threads]
В Application didFinishLaunchingWithOptions
, до регистрации пушей, добавьте метод конфигурации Threads
(он содержит в себе конфиграцию MFMSPushLite):
Threads *threads = [Threads threads];
[threads configureWithDelegate:self
productionMFMSServer:YES
historyURL:[NSURL URLWithString:@"HISTORY_URL"]
fileUploadingURL:[NSURL URLWithString:@"FILE_UPLOADING_URL"]];
- Уберите из
Info.plist
словарьPS_API_CONFIG
с параметрамиPS_FILE_UPLOAD_URL
,PS_HISTORY_URL
,PS_CLIENTID_IS_ENCRYPTED
- эти параметры больше не задаются в plist, толко в коде.
MFMSPushLiteDelegate -> ThreadsDelegate
Реализацию делегата MFMSPushLiteDelegate
замените на реализацию делегата ThreadsDelegate
и параметр:
- Перенесите переключение боевой\тестовой пуш-платформы из метода
(BOOL)isProductionWithPushApi:(MFMSPushLite * _Nonnull)pushApi
- в параметрproductionMFMSServer
в Конфигурация Threads - Перенесите реализацию методов делагата
MFMSPushLiteDelegate
В соответствующие методы- (id<PushServerApiConfigDataSource>)configWithPushApi:(MFMSPushLite *)pushApi;
- (void)onPushMessagesReceivedWithPushApi:(MFMSPushLite *)PushApi messages:(NSArray<PushNotificationMessage *> *)messages;
- (void)onErrorWithPushApi:(MFMSPushLite *)PushApi error:(NSString *)error;ThreadsDelegate
:- (id<PushServerApiConfigDataSource>)threads:(Threads *)threads configurePushServerApiFor:(MFMSPushLite *)mfmsPushLite;
- (void)threads:(Threads *)threads didReceiveFullMessages:(NSArray<PushNotificationMessage *> *)messages;
- (void)threads:(Threads *)threads didReceiveError:(NSError *)error;
Настройка приема пуш-уведомлений
Замените код регистрации пушей
if (@available(iOS 10, *)) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if(!error){
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
} else {
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
На следующий:
[Threads threads] registerApplicationForRemoteNotificationsStandartOptionsWithAuthorizationStatusDenied:^{
NSLog(@"Remote notifications denied");
} completionHandler:^(NSData * _Nullable deviceToken) {
NSLog(@"Application registered for remote notifications %@", deviceToken);
}];
Замените реализацию методов обработки регистрации и получения пушей на следующие вызовы Threads
:
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
[[Threads threads] applicationDidRegisterUserNotificationSettings:notificationSettings];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[[Threads threads] applicationDidRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[[Threads threads] applicationDidReceiveRemoteNotification:userInfo];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[[Threads threads] applicationDidReceiveRemoteNotification:userInfo fetchCompletionHandler:^(THRMessageRecieveState state) {
completionHandler(UIBackgroundFetchResultNewData);
}];
}
#pragma mark - UNUserNotificationCenterDelegate
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler API_AVAILABLE(ios(10.0)){
[[Threads threads] applicationDidReceiveRemoteNotification:notification.request.content.userInfo fetchCompletionHandler:^(THRMessageRecieveState state) {
completionHandler(UNNotificationPresentationOptionNone);
}];
}
Уберите вызов [Threads didReceiveFullPush:...]
, теперь пуши передаются напрямую внутри библиотеки.Если вы используете собственные пуши - их можно получить в метода делегата ThreadsDelegate
:
- (void)threads:(Threads *)threads didReceiveFullMessages:(NSArray<PushNotificationMessage *> *)messages;
Регистрация пользователя
Уберите вызов [Threads registerClientWithCompletion:^(BOOL state)]
- этого метода больше нет
Замените настройку параметров клиента:
[Threads setClientId:(NSString*) clientId]
[Threads setClientName:(NSString*) clientName]
[Threads setData:(NSString*) data]
[Threads setAppMarker: appMarker]
[Threads setClientIdSignature: (NSString*) clientIdSignature]
На метод установки клиента:
[[Threads threads] setClientWithId:(NSString *) clientId
name:(NSString * _Nullable) clientName
data:(NSDictionary * _Nullable) clientDataDict
appMarker:(NSString * _Nullable) clientAppMarker
signature:(NSString *) clientSignature];
Обратите внимание что data
теперь передается в виде словаря а не строки.
Открытие чата
Замените вызовы методов
[Threads show];
[Threads showInView:(UIView *)view parentController:(UIViewController *)parentController;
На получение полноценного UIViewController
, который можете презентовать любым нативным способом, например
THRAttributes *attributes = [[THRAttributes alloc] init];
UIViewController *chatViewController = [[Threads threads] chatViewControllerWithAttributes:attributes];
[self.navigationController pushViewController:chatViewController animated:YES];
Другие примеры: Открытие чата
Настройки внешнего вида
Перенесите параметры текстов приветственного экрана чата
[Threads setHelloTitle:@"Заголовок"]
[Threads setHelloDescription:@"Описание"]
В параметры THRAttributes
:
helloTitle
helloDescription
Удалите следующие параметры и методы - в связи с переходом на интеграцию viewController они стали неакутальны и были убраны:
- THRAttributes
navigationBarBackgroundColor
navigationBarTintColor
navigationBarItemFont
shouldAnimateShowNavigation
shouldAnimatePopNavigation
- Threads:
showToolbarAnimated
hideToolbarAnimated
showKeyboard
hideKeyboard
Дополнительные возможности
Счетчик непрочитанных -> ThreadsDelegate
Перенесите обработку получения числа непрочитанных из блока
[[Threads threads] setUnreadedMessagesCountChanged:^(NSInteger messagesCount)
В реализацию метода ThreadsDelegate
:
- (void)threads:(Threads *)threads unreadMessagesCount:(NSUInteger)unreadMessagesCount;