今日の拡張機能を含むアプリを作成しています。今日の拡張機能はタイマーのリストを表示します。ユーザーがタイマーの 1 つを選択した場合、そのタイマーのローカル通知を作成してスケジュールしたいと思います。
私の問題は、通知のスケジューリングが次のコード行で行われることです:
UIApplication.sharedApplication().scheduleLocalNotification(notification)
UIApplication.sharedApplication()
残念ながら、拡張機能からアクセスできないことに依存しています。
私の質問は次のとおりです。Today 拡張機能内からローカル通知をスケジュールするにはどうすればよいですか?
おかしなことに、アプリと拡張機能の間で共有されるコードを使用してフレームワークを作成し、そのフレームワークで次を呼び出すことができます。
func schedule() {
// ...
let settings = UIUserNotificationSettings(forTypes: .Sound | .Alert, categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
// ...
UIApplication.sharedApplication().scheduleLocalNotification(notification)
// ...
}
次に、そのフレームワークを拡張機能からインポートして呼び出すschedule()
と、次の出力が得られます。
Failed to inherit CoreMedia permissions from 13636: (null)
Attempting to schedule a local notification <UIConcreteLocalNotification: 0x7feaf3657a00>{fire date = Saturday, November 1, 2014 at 1:01:48 PM Western European Standard Time, time zone = (null), repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = Saturday, November 1, 2014 at 1:01:48 PM Western European Standard Time, user info = (null)} with an alert but haven't received permission from the user to display alerts
Attempting to schedule a local notification <UIConcreteLocalNotification: 0x7feaf3657a00>{fire date = Saturday, November 1, 2014 at 1:01:48 PM Western European Standard Time, time zone = (null), repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = Saturday, November 1, 2014 at 1:01:48 PM Western European Standard Time, user info = (null)} with a sound but haven't received permission from the user to play sounds
したがって、UIApplication.sharedApplication()
このコードは実際に通知をスケジュールしようとするため、拡張機能で実行されているモジュールはアクセスできますが、システムは拡張機能がアラートを表示する許可を求める準備ができていないため、失敗します (とにかくそう見えます)。
どうすればこれを解決できますか?
また、URL を使用してアプリを起動し、通常どおりアプリからの通知をスケジュールすることもできますが、それはユーザーの気まぐれではありません。今日の拡張機能を使用する目的は、ユーザーが通知をスケジュールするためにアプリを開く必要がないようにすることです。インタラクションは迅速、シンプル、透過的である必要があり、数行のコードを実行するためだけに、ユーザーがいるアプリからユーザーを引っ張り出し、それを完了することは、私がやりたいことではありません。