2017-06-08 1 views
0

から取得した内部カレンダーのアプリを実装しています。興味のあるイベントがカレンダーでスケジュールされているとき、彼が選択した特定の時間に、ユーザーにローカル通知を送信したいと思います。 iOSカレンダーアプリと同じように、イベントを作成してX時間/日前に通知するようにリクエストすることができます。主な違いは、イベントを作成できないことです。イベントは事前設定されたリモートカレンダーからダウンロードされます。iOS Swift 3:AndroidのAlarmManagerをエミュレートするチェーンの実装

AndroidではAlarmManagerを使用して問題を解決しましたが、Swift 3のiOSでは同じソリューションを移植するのに最も近いのは日和見のバックグラウンドデータフェッチです。 2つのソリューションの主な違いは、アプリが強制終了されたときにバックグラウンドのデータフェッチが機能しないことです。

がアプリを殺しても、ローカルの通知がになってしまったのは本当に重要です。私は、WhatsAppやFacebookで起こるように、アプリが閉鎖されているときでも、ユーザーがアプリ通知を期待すると思う。私は、これらの通知は誰かが何かを書くことによって引き起こされることを知っているので、彼らはプッシュ通知ですが、平均的なユーザーは、アプリケーションが終了しても通知が機能し続けることを期待しています。

iOSでAndroidのAlarmManagerの動作を "エミュレート"する最も洗練されたソリューションは何でしょうか?それらのすべてがデキューされる前に、ユーザが最終的にアプリを開くことを望ん事前に通知の束をスケジュール

はひどく設計されたソリューションを探します。

また、すべての作業をサーバに委任し、購読しているデバイスへの通知をプッシュすることは、サーバ側ではるかに多くの作業を必要とするため非常に悪く見えます。さらに、プッシュ通知を送信するために自分自身を目を覚ますことができるサーバーが必要です。これは私にはないものです。私はHTTPリクエストに答えるシンプルなウェブサーバしか持っていません。


EDIT:私はより多くの回避策のように、私はかなり一般的な問題点知覚するものに実際のエレガントな解決策よりも、それらを見つけるため、私が探している理想的なソリューションは、前の2つのオプションのいずれかではありません。 3番目のオプションが必要です...

答えて

0

これを達成する方法はありません。 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)のドキュメントを見ると、ユーザーが強制終了した場合、システムは自動的にアプリケーションを起動しません。

そのような状況では、システムが自動的にアプリを自動的に起動しようとする前に、ユーザーはアプリを再起動したり、デバイスを再起動する必要があります。

プッシュ通知を受け取ることはできますが、ユーザーがアプリを起動するまでコードは実行されません。したがって、サーバーからリモートプッシュ通知を送信しない限り、ユーザーがアプリを開くまで、新しいローカル通知を設定することはできません。

+0

私は1日に1〜2回、すべてのアプリケーションを強制終了する習慣がありますが、Wh​​atsApp/Telegram /からのプッシュ通知はまだ受け取ります。たぶんコード実行を引き起こすことはありませんが、ユーザーにはわかります。 –

+0

正しいですが、アプリが強制終了されてもプッシュ通知を受け取ることはできますが、バックグラウンドでコードを実行することはできず、新しいローカル通知をスケジュールすることはできません。私の更新された答えを見てください。 [this](https://stackoverflow.com/questions/8611921/is-it-possible-to-have-my-closed-app-run-code-in-ios/8611952#8611952)の回答をご覧ください同様の質問。 –

+0

このリンクについて[[ユーザーに通知せずにコードを実行するために通知を使用することはできますか?](https://stackoverflow.com/questions/11861117/can-push-notifications-be-used-to-run-code-without -notifying-user)。 リモート/サイレント通知について –

関連する問題