如何在网站上的内容发生变化时发送推送通知

时间:2017-08-29 13:23:06

标签: ios swift firebase push-notification execution

我正在构建的应用程序的核心是它每周两次向用户发送一个推送通知,其中包含来自网站的数字,每周两次的特定时间(Swift代码我使用的示例)为了这个)。

我做了一些关于后台执行的研究,但我认为我无法使用它,因为它非常有限(仅限于位置,时间有限等)。 使用服务器是另一种选择。我不打算用这个应用赚钱,所以它必须是一个免费的选择。这就是我调查Firebase的原因。

我现在正在学习Swift,它是我学习的第一门编程语言。

有没有人对如何做到这一点有意见?

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.



    let url = URL(string: "https://store.nike.com/be/nl_nl/pd/air-vapormax-flyknit-hardloopschoen-heren/pid-11384993/pgid-12169774")!

    let request = NSMutableURLRequest(url: url)

    let task = URLSession.shared.dataTask(with: request as URLRequest) {
        data, response, error in

        var message = ""

        if error != nil {

            print(error)

        } else {

            if let unwrappedData = data {

                let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)

                var stringSeperator = "exp-pdp-local-price js-pdpLocalPrice"

                if let contentArray = dataString?.components(separatedBy: stringSeperator) {

                    if contentArray.count > 0 {

                        stringSeperator = "€"

                        let newContentArray = contentArray[1].components(separatedBy: stringSeperator)

                        if newContentArray.count > 0 {

                            message = newContentArray[0]

                            print(message)


                        }



                    }

                }

            }

        }

        if message == "" {

            message = "The jackpot couldn't be found. Please try again."

        }

        DispatchQueue.main.sync(execute: {

            //De text in het label van de weer app = message
            //Gebruik 'self.' om naar de viewcontroller te verwijzen, want hier zit je in een closure en niet in de viewcontroller zelf.

        })

    }

    task.resume()


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

2 个答案:

答案 0 :(得分:1)

推送通知并不复杂。

基本上你必须将你的设备注册到APNS(Apple推送通知系统),一旦注册设备,APNS将返回一个令牌(每个令牌都是设备唯一的)。当您从APNS获取令牌时,您必须将令牌发送到服务器,该服务器将为您的设备提供推送通知。服务器应用程序从设备接收令牌后,您可以将其保存在数据库中。 例如:

username1 mobile_token1,mobile_token2。

现在,您可以从数据库获取特定用户名的令牌,并将推送通知从服务器发送到设备。

当您从服务器向设备发送推送通知时,您必须将令牌和数据内容发送到APNS,然后APNS会向特定设备发送通知。

所以你的问题的答案是,如果你想发送推送通知你必须从后端发送到设备,你发送推送通知的那一刻就是当网页内容发生变化时,你从数据库中获取令牌,并向APNS发送通知。

使用firebase代替APNS时逻辑相同。

这是一个很好的客户端教程

https://www.raywenderlich.com/156966/push-notifications-tutorial-getting-started

答案 1 :(得分:0)

您似乎不需要推送通知(也称为远程通知),而是需要本地通知(see apple documentation)。

您可以在一周内配置何时触发此本地通知。

编辑:我没有发现通知内容取决于您之前的代码。 所以你仍然可以使用本地通知。它将由所谓的后台提取触发。 例如,请参阅this tutorial(在页面上搜索“背景提取”)。