現在の API は、非推奨の iOS9 状態に合わせて変更されてい-setKeepAliveTimeout:handler:
ます。
これまでは、これが iOS 上の VoIP SIP アプリが SIP サーバーへの登録を維持できる唯一の方法でした。
この手法は、LinPhone などのさまざまなアプリで使用されています。
Apple が提案した代替案について意見を持っている人はいますか? それとも、SIP は (post-)iOS9 から機能しなくなりますか?
現在の API は、非推奨の iOS9 状態に合わせて変更されてい-setKeepAliveTimeout:handler:
ます。
これまでは、これが iOS 上の VoIP SIP アプリが SIP サーバーへの登録を維持できる唯一の方法でした。
この手法は、LinPhone などのさまざまなアプリで使用されています。
Apple が提案した代替案について意見を持っている人はいますか? それとも、SIP は (post-)iOS9 から機能しなくなりますか?
Appleのドキュメントから:
iOS 8 以降では、ボイス オーバー IP (VoIP) アプリは、このメソッドを使用する代わりに、registerForRemoteNotifications リモート通知に登録します。リモート通知を使用すると、タイムアウト ハンドラが VoIP サービスにチェックインする必要がなくなります。代わりに、ユーザーに通話が着信すると、VoIP サービスは VoIP リモート通知をユーザーのデバイスに送信します。この通知を受信すると、デバイスは必要に応じてアプリを起動またはスリープ解除して、着信を処理できるようにします。
以前は、setKeepAliveTimeout 呼び出しを使用してハンドラーを終了時間に呼び出すことができ、終了または強制終了するまでに最大 10 秒かかりました。また、ハンドラーへの呼び出しがタイムアウト値内であることが保証されていませんでした。 .
新しい (registerForRemoteNotifications) は、ハンドラーが内部 (IOS に対して) であり、リモート イベントが発生したときにアプリを呼び出すため、問題なく動作します (これにより、アプリがスリープ状態の場合でもアプリが起動します)。
いずれにせよ、どちらも同じことを行う必要があります。古いバージョンではコードを処理し、新しいバージョンでは通知を受け取ります (これもどこかで処理します) が、タイムアウトを制御できなくなります。
アップルのドキュメントから:
このメソッドを呼び出して、Apple プッシュ通知サービスへの登録プロセスを開始します。登録が成功すると、アプリはアプリ デリゲート オブジェクトの application:didRegisterForRemoteNotificationsWithDeviceToken: メソッドを呼び出し、デバイス トークンを渡します。デバイスのリモート通知を生成するために使用するサーバーに、このトークンを渡す必要があります。登録が失敗した場合、アプリは代わりにアプリ デリゲートの application:didFailToRegisterForRemoteNotificationsWithError: メソッドを呼び出します。
アプリのリモート通知でアラートを表示したり、サウンドを再生したり、その他のユーザー向けアクションを実行したりするには、registerUserNotificationSettings: メソッドを呼び出して、使用する通知の種類を要求する必要があります。このメソッドを呼び出さない場合、システムはすべてのリモート通知をサイレント モードでアプリに配信します。登録プロセスではユーザーの好みの通知設定が考慮されるため、ユーザー向けの通知タイプへのアクセスを要求しても、それらが許可されるとは限りません。利用可能な通知設定を確認するには、currentUserNotificationSettings メソッドを使用します。
最後に (登録解除の場合):
このメソッドは、新しいバージョンのアプリですべての種類のリモート通知のサポートが削除された場合など、まれな状況でのみ呼び出す必要があります。ユーザーは、設定アプリの [通知] セクションを使用して、アプリがリモート通知を受信するのを一時的に防ぐことができます。この方法で登録解除されたアプリは、いつでも再登録できます。
わかりませんが、これがお役に立てば幸いです。
よろしく、
ハイダー・サティ
PUSHKIT を統合すると、アプリケーションのウェイクアップに関するすべてが処理されます。PUSHKIT 経由のプッシュ通知で VoIP 通話を受信中にプッシュ通知を送信すると、バックグラウンド状態であれば動作します。私は同じことをしました。
これがお役に立てば幸いです。
https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_refに登録して、シグナリング イベントを Apple プッシュ通知サーバーにリークする必要があるようです。 /occ/instm/UIApplication/registerForRemoteNotifications .
これは非常に残念ですが、避けられないようです。これの背後にある考え方は、おそらく、電話でアクティブなネットワーク接続を少なくしてバッテリーを節約することです.
したがって、これは、イベントがアプリケーションに到達したという情報を Apple サービスに漏らさなければならないことを意味します。おそらく、「ウェイク」通知をアプリに送信してから、イベント タイプの読み込みを自分で処理できますが、これでは遅延が大きくなりすぎる可能性があるため、より多くのシグナリング情報を Apple サービスにリークする必要がある場合があります。:-/