2017-05-30 20 views
0

私は、iOSとwatchOSアプリケーションの両方を同時にフォアグラウンドで実行しているときに、iOSとwatchOSの両方の可能な組み合わせのすべてについて、最新情報をユーザーに通知する必要があるiOS + watchOSアプリケーションを構築しています。背景、およびいずれか他のものがバックグラウンドにある場合。watchOSアプリケーションがフォアグラウンドになっている間にプッシュ通知を処理しますか?

これらの4つの状況のうちの3つについてプッシュ通知を正常に処理しています。私が立ち往生している場所は、時計アプリがフォアグラウンドで開いているが、iOSアプリがバックグラウンドにあるときです。Watch Controller、ExtensionDelegate、またはiOS AppDelegateのいずれの方法も見つけられません。この状況ではリモート通知がプッシュされます。 iOSアプリがフォアグラウンドであるとアプリがいずれかの状態にある見ながら通知がプッシュされるiOSのAppDelegate、この火事で

:WatchKit拡張NotificationControllerで

func userNotificationCenter(_ center: UNUserNotificationCenter, 
          willPresent notification: UNNotification, 
          withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 

、通知があるときに、これは発射iOSのアプリを見て両方がバックグラウンドでありながら押し込ん:

override func didReceive(_ notification: UNNotification, withCompletion completionHandler: @escaping (WKUserNotificationInterfaceType) -> Swift.Void) { ... } 

しかし時計アプリが前面にある場合iOSアプリが背景にある通知がプッシュされると、通知バナーがiPhoneに表示されます(画面がロックされていても表示されます)。また、時計がそれ以外の場合は、その瞬間のバックグラウンドで

アイデア?

答えて

1

これを実証しました。ウォッチアプリがバックグラウンドとフォアグラウンドのどちらかにあるときの通知を処理するには、NotificationControllerのdidReceiveメソッド(通知の場合はバックグラウンド)と、willPresentメソッドを使用したExtensionDelegateのUNUserNotificationDelegateプロトコルの両方でメソッドを実装する必要があるようですフォアグラウンドでしばらくの通知):

ユーザー通知フレームワークはiOSの、watchOS、およびtvOSアプリケーションで使用するための統一されたAPIを提供し、サポート:私を混同していた何

func userNotificationCenter(_: UNUserNotificationCenter, willPresent: UNNotification, withCompletionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
    print("willPresent fired from watch delegate") 
} 

は、ドキュメントが言うことでしたほとんどのタスクは、ローカルおよびリモートの通知に関連付けられています。このフレームワークで実行できるタスクの例を次に示します。

しかし、iOS、tvOS、およびmacOSの場合、これらの作業を行っている間、ドキュメントでは時計の仕組みを正確に指定していません。起動する必要がある登録とデバイストークンの工程を経る

(あなたがそれを行うにはのUIApplicationモジュールを必要とするので、実際には不可能)ウォッチExtensionDelegateで必要はありませんが、

UNUserNotificationCenter.current().delegate = self 
ExtensionDelegateの起動時に