在Swift 2中发出HTTP POST请求 [英] Making a HTTP POST Request in Swift 2

查看:87
本文介绍了在Swift 2中发出HTTP POST请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Google的Firebase网站上,为了发送下游消息,我必须执行一个HTTP Post请求.它就是这样做的:

On Google's Firebase website, in order to send downstream messages, I have to do an HTTP Post request. This is what it says to do:

从服务器发送下游消息:

Sending downstream messages from the server:

要处理或定位"下游消息,应用服务器将设置为 与接收客户端应用程序的注册令牌.你可以发送 具有预定义字段的通知消息或自定义数据消息; 有关详细信息,请参阅消息有效负载中的通知和数据. 有效负载支持.此页面中的示例显示了如何发送数据消息 在HTTP和XMPP协议中.

To address or "target" a downstream message, the app server sets to with the receiving client app's registration token. You can send notification messages with predefined fields, or custom data messages; see Notifications and data in the message payload for details on payload support. Examples in this page show how to send data messages in HTTP and XMPP protocols.

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中做到这一点?

How do I do this in Swift 2?

推荐答案

人们否决了这个问题,真是遗憾.我已经研究这个主题超过4个月了,没有其他stackoverflow问题/答案对我有帮助.

无论如何,我已经找到了针对Google Firebase Cloud下游消息传递的解决方案.这会向Google服务器发送一条消息,该消息会通过HTTP POST请求向所有用户推送通知.

Anyway, I've found the solution, specific to Google's Firebase Cloud downstream messaging. This sends a message to the Google server that pushes notifications to all users via a HTTP POST request.

在执行以下任何代码之前,请确保遵循以下步骤为Firebase设置iOS客户端,安装所有正确的Pod并获取您的证书,配置文件等.

Before doing any of the code below, be sure to follow the steps to setting up an iOS client for Firebase, installing all the correct pods and getting your certificates, provisioning profile, etc. here.

视图控制器:

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()
}

应用代理:

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")
}

如果有人有任何疑问,请随时提问!我也知道如何发送主题.

If anybody has any questions, please feel free to ask! I also know how to send to topics.

谢谢!

这篇关于在Swift 2中发出HTTP POST请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆