2016-05-26 8 views
1

На странице Google's Firebase website, чтобы отправлять сообщения в нисходящем направлении, я должен выполнить запрос HTTP-сообщения. Это то, что он говорит, что нужно сделать:Выполнение запроса HTTP POST в Swift 2

Отправка нижестоящих сообщений с сервера:

Для решения или «мишень» вниз по течению сообщения, приложение сервер устанавливает в с регистрационным маркером клиентского приложения получающего в. Вы можете отправлять сообщения с предопределенными полями или сообщениями настраиваемых данных; см. Уведомления и данные в сообщении полезной нагрузки для получения дополнительной информации о поддержка полезной нагрузки. Примеры на этой странице показывают, как отправлять сообщения данных в протоколах HTTP и XMPP.

HTTP POST запрос

https://fcm.googleapis.com/fcm/send 
Content-Type:application/json 
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA 

{ "data": { 
    "score": "5x1", 
    "time": "15:10" 
    }, 
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..." 
} 

Как это сделать в Swift 2?

ответ

3

Люди проголосовали за этот вопрос, и это позор. Я изучаю эту тему уже более 4 месяцев, и никакой другой вопрос/ответ stackoverflow не помог мне.

Во всяком случае, я нашел решение, специфичное для обмена сообщениями Firebase Cloud от Google. Это отправляет сообщение на сервер Google, который посылает уведомления всем пользователям через HTTP POST-запрос.

Прежде чем делать какой-либо из приведенных ниже кодов, не забудьте выполнить шаги по настройке iOS-клиента для Firebase, установки всех правильных контейнеров и получения ваших сертификатов, профиля подготовки и т. Д. here.

View Controller:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let url = NSURL(string: "https://fcm.googleapis.com/fcm/send") 
    let postParams: [String : AnyObject] = ["to": "<Your registration token>", "notification": ["body": "This is the body.", "title": "This is the title."]] 

    let request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "POST" 
    request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 
    request.setValue("key=<Your Firebase Server Key>", forHTTPHeaderField: "Authorization") 

    do 
    { 
     request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(postParams, options: NSJSONWritingOptions()) 
     print("My paramaters: \(postParams)") 
    } 
    catch 
    { 
     print("Caught an error: \(error)") 
    } 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in 

     if let realResponse = response as? NSHTTPURLResponse 
     { 
      if realResponse.statusCode != 200 
      { 
       print("Not a 200 response") 
      } 
     } 

     if let postString = NSString(data: data!, encoding: NSUTF8StringEncoding) as? String 
     { 
      print("POST: \(postString)") 
     } 
    } 

    task.resume() 
} 

App Делегат:

var window: UIWindow? 

func displayAlert(title: String, message: String) { 

    let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert) 
    alert.addAction(UIAlertAction(title: "Okay", style: .Default, handler: nil)) 
    self.window?.rootViewController?.presentViewController(alert, animated: true, completion: nil) 
} 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    FIRApp.configure() 

    let notificationTypes: UIUserNotificationType = [.Alert, .Badge, .Sound] 
    let pushNotifSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil) 

    application.registerUserNotificationSettings(pushNotifSettings) 
    application.registerForRemoteNotifications() 

    return true 
} 

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 

    print("Device Token = \(deviceToken)") 
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox) 
    print("Registration token: \(FIRInstanceID.instanceID().token()!)") 
} 

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 

    print(error) 
} 

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 

    // For push notifications sent from within the Firebase console 
    if userInfo["google.c.a.c_l"] != nil 
    { 
     if let title = userInfo["google.c.a.c_l"] as? String 
     { 
      if let body = userInfo["aps"]!["alert"] as? String 
      { 
       self.displayAlert(title, message: body) 
      } 
     } 
    } 
    // For push notifications sent from within the app via HTTP POST Request 
    else 
    { 
     if let title = userInfo["aps"]!["alert"]!!["title"] as? String 
     { 
      if let body = userInfo["aps"]!["alert"]!!["body"] as? String 
      { 
       self.displayAlert(title, message: body) 
      } 
     } 
    } 
} 

func applicationDidEnterBackground(application: UIApplication) { 

    FIRMessaging.messaging().disconnect() 
    print("Disconnected from FCM") 
} 

Если кто имеет какие-либо вопросы, пожалуйста, не стесняйтесь спрашивать! Я также знаю, как отправлять темы.

Спасибо!

+0

Используя это решение, вы обнаружите свой серверный ключ, который нарушит ваше приложение. – goblin

+0

Пожалуйста, объясните лучший способ сделать это, поскольку вам кажется, что вы знаете, что делаете! –

+0

Это здорово, я не знаю, как это могло бы скомпрометировать ваше приложение, но я получил его работу над своим приложением. Спасибо! –

Смежные вопросы