Intereting Posts
Tensorflow работает медленно на iOS Автоматическое оповещение о настройках конфиденциальности в iOS 10 не отображается Отображение числа в виде строки Устранить разделитель tablefooterview uitableview Как создать анимированный лист спрайтов с помощью моноточевой и основной анимации? как решить ошибку NSPredicate 'Невозможно использовать в / содержит оператор с коллекцией 8 (а не сбор) Выполнить функцию для вызова функции performSegueWithIdentifier из другого класса Не удалось удалить BackButton в контроллере навигации с помощью Storyboard в ios Как указать SCNAction для использования временной базы сцены Удалить стрелку меню «Открыть в …» на iOS APN & TestFlight: Xcode выбирает неправильный профиль (XC *) для отправки архива Проблемы с kontakt.io Beacons Как показать индикатор выполнения загрузки изображения в IOS SDK Как сделать символическую точку останова для всех push segues? Как связать NSString с UITextView в Reactive Cocoa?

Firebase отправляет push-уведомление с устройств (IOS)

В ios я использую базу данных Firebase и FCM. Я должен отправить push-уведомление от устройств на устройства через токен устройств. У меня есть API FCM « https://fcm.googleapis.com/fcm/send » Это метод post и добавление параметра Like:

Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "data" : { ... }, } 

но когда я пытаюсь вызвать этот API, это всегда возвращает мне ошибку, и тот же API-вызов от устройств Android работает в android, а не в ios. Вот мой код и ошибка, пожалуйста, дайте мне решение

 -(void)sendPush { NSDictionary *noti = @{@"body": @"This is a Firebase Cloud Messaging Topic Message", @"title": @"high"}; NSDictionary *data = @{@"text": @"This is a Firebase Cloud Messaging Topic Message", @"title": @"high"}; NSDictionary *params = @{@"to": @"dbpuoXnzY3o:APA91bH3AE_XCbsLpOXycNULcSh1GHzohEFdopmzkY_n8bm78E9_5fHyY3PLCwi5HtTLU_IoOwfdbDc5qCbyzc6tD9Ahg0EviCfbAmhftmMsPqfi0WC...",@"notification":noti,@"data":data}; NSLog(@"%@",params); [NetworkManager postNotification:params getUrl:@"https://fcm.googleapis.com/fcm/send" success:^(id response) { NSLog(@"%@",response); } failure:^(NSError *error) { }]; } 

в nslog это выглядит так:

 { data = { text = "This is a Firebase Cloud Messaging Topic Message"; title = high; }; notification = { body = "This is a Firebase Cloud Messaging Topic Message"; title = high; }; to = "dbpuoXnzY3o:APA91bH3AE_XCbsLpOXycNULcSh1GHzohEFdopmzkY_n8bm78E9_5fHyY3PLCwi5HtTLU_IoOwfdbDc5qCbyzc6tD9Ahg0EviCfbAmhftmMsPqfi0WC..."; } 

Функция вызова Afnetworking

  AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; // [manager.requestSerializer setValue:@"text/html" forHTTPHeaderField:@"Content-Type"]; [manager.requestSerializer setValue:@"AIzaSyADxgFPrxx....." forHTTPHeaderField:@"key"]; // NSLog(@"Token==%@",[GeneralSetting sharedInstance].token_number); [manager POST:URL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { [MBProgressHUD hideHUDForView:appDelegate.window animated:YES]; success(responseObject); ////NSLog(@"success!"); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { failure(error); [MBProgressHUD hideHUDForView:appDelegate.window animated:YES]; NSLog(@"error: %@", error.description); // [self alert:@"" title:@""]; }]; 

ОШИБКА

 error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unauthorized (401)" UserInfo={NSUnderlyingError=0x17024a1d0 {Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x17402fa40> { URL: https://fcm.googleapis.com/fcm/send } { status code: 401, headers { "Cache-Control" = "private, max-age=0"; "Content-Encoding" = gzip; "Content-Length" = 259; "Content-Type" = "text/html; charset=UTF-8"; Date = "Tue, 04 Jul 2017 10:17:43 GMT"; Expires = "Tue, 04 Jul 2017 10:17:43 GMT"; Server = GSE; "alt-svc" = "quic=\":443\"; ma=2592000; v=\"39,38,37,36,35\""; "x-content-type-options" = nosniff; "x-frame-options" = SAMEORIGIN; "x-xss-protection" = "1; mode=block"; } }, 

Пожалуйста, помогите мне, пожалуйста, дайте мне решение

Я пробовал из почтальонов, это работает от почтальонов

введите описание изображения здесь

те же данные, которые я отправляю из кода, это не работает, возможно, проблема заключается в отправке словаря. Я использую этот код

 NSDictionary *noti = @{@"body": @"Hello", @"title": @"This is test message"}; NSDictionary *params = @{@"to": [GeneralSetting sharedInstance].token_number,@"notification":noti}; NSLog(@"%@",params); 

А ТАКЖЕ

 [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [manager.requestSerializer setValue:@"key=AIzaSy.....tBxdYAIRp2KBG0NoS8dOqgy4" forHTTPHeaderField:@"Authorization"]; 

Ответ

 { notification = { body = Hello; title = "This is test message"; }; to = "dQgCDOK3sec:APA91zFbkqkgyTNrsYsEmUJwpCtMs1VAmXF9DpF_zQfBYui3UjCA9nYtS_TK549RPnlWEfe-jSvD9MMc3lTFNsGJlyIOqNm84s8GoW1LfTGG0geuWEclb"; } Request failed: bad request (400) 

Вы также можете:

1) Разрешить приложению принимать данные text/html с помощью:

 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; // OR manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

2) Или, лучше, измените свой тип данных, так что это application/json как указано в @ user3589771 .

Убедитесь, что AFHTTPSessionManager правильно форматирует JSON с помощью AFJSONRequestSerializer

Ссылки: здесь и здесь