2017-08-29 9 views
0

私が構築しているアプリの核心は、週に2回、特定の時間に週2回、私はこのために使用しているスウィフトコードの例)。ウェブサイトのコンテンツが変更されたときにプッシュ通知を送信する方法

私はバックグラウンドの実行に関するいくつかの研究を行ったが、限られているため(場所や時間などのために)使用できなくなると思う。 サーバーの使用は別のオプションです。私はこのアプリでお金を稼ぐつもりはないので、無料のオプションが必要です。それが私が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. 
} 


} 
+1

これは間違いなくクライアント側の作業ではありません。他のWebサイトを頻繁にポーリングして、そのWebサイトの変更をすぐに受け取ることができないことを確認します。できるだけ早くサーバー側で実行する必要があります。 –

+0

いただきありがとうございます!上記のSwiftコードで書いたことをサーバーにさせるためには、どのような言語が必要ですか?私はFirebaseのための新しい「クラウドファンクション」を探していました。 – Maxim

+0

Cloud Functions for Firebaseからプッシュ通知を送信する方法については、[こちらの例](https://firebase.google.com/docs/functions/use-cases#notify_users_when_something_interesting_happens)を参照してください。次に、スケジュールに基づいてクラウド機能をトリガーする方法については、[このブログの投稿](https://firebase.googleblog.com/2017/03/how-to-schedule-cron-jobs-with-cloud.html)を参照してください。 [この動画](https://www.youtube.com/watch?v=CbE2PzvAMxA)をご覧ください。 –

答えて

1

プッシュ通知は複雑ではありません。

基本的には、デバイスをAPNS(Appleプッシュ通知システム)に登録する必要があります。登録されたデバイスは、APNSによってトークンが返されます(各トークンはデバイス固有です)。 APNSからトークンを取得すると、トークンをサーバーに送信しなければなりません。このトークンは、デバイスにプッシュ通知を提供します。サーバアプリケーションがデバイスからトークンを受け取ると、それをデータベースに保存することができます。 例:

username1 mobile_token1、mobile_token2。

データベースから特定のユーザー名のトークンを取得し、プッシュ通知をサーバーからデバイスに送信できます。

サーバーからデバイスへのプッシュ通知を送信する場合は、トークンとデータコンテンツをAPNSに送信する必要があります.APNSはその通知を特定のデバイスに送信します。

あなたの質問に対する答えは、プッシュ通知をバックエンドからデバイスに送信する必要がある場合、プッシュ通知を送信する瞬間は、Webコンテンツが変更されたときにデータベースからトークンを取得することですAPNSに通知を送信します。

APNSの代わりにfirebaseを使用した場合のロジックは同じです。ここで

は、クライアント側のための素晴らしいチュートリアルですあなたがプッシュ通知(リモート通知と呼ばれる)が、ローカル1( see apple documentation)を必要としないようだ

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

0

週にこのローカル通知を発生させるタイミングを設定できます。

編集:通知の内容は、以前のコードによって異なります。 それでもローカル通知を使用できます。これは、バックグラウンドフェッチと呼ばれるものによってトリガーされます。 たとえば、this tutorialを参照してください(ページ上で「バックグラウンドフェッチ」を検索してください)。

+0

事は、上記で書いたコードが実行された後に通知が起動する必要があることです。この実行の後、返される番号があり、その番号に基づいてプッシュ通知を送信する必要があります。だから、プッシュ通知はおそらくローカルかもしれませんが、問題はまだコードのバックグラウンド実行です、私は正しいのですか? 申し訳ありませんが、これは明確ではない場合。 – Maxim

+0

あなたのユースケースがより明確になりました。私は私の答えを編集しました。 – Gl0ub1l

+0

ありがとうございました。私はあなたが推奨するチュートリアルを調べました。バックグラウンドフェッチに関するいくつかの懸念があります。アプリがバックグラウンドで完全に殺されたときに機能しますか?それが可能な場合は、時間間隔を3日に設定することは可能ですか? – Maxim

関連する問題