2 つの方法があり、それぞれがペリフェラル マネージャーにサービスを追加します。didAddService
コールバックを取得したら、[manager startAdvertisingServices:]
追加されたサービスでメソッドを使用します (したがって、キーの値として使用される配列にCBAdvertisementDataServiceUUIDsKey
は、1 つまたは 2 つのサービス UUID が含まれます)。
2 番目のサービスを追加して両方をアドバタイズしようとすると、常にエラーが発生しますAdvertising has already started.
新しいサービスを使用して追加しようとしまし[manager stopAdvertising]
たが、stopAdvertising メソッドは非同期であるため、まだ失敗することがあります (startAdvertisingServices
もう一度呼び出すまでに広告を停止していません)。
それらを個別に宣伝/読み取り/書き込みすることに問題はありません。stopAdvertising を呼び出した後に待機すると、それらをまとめて宣伝を開始できますが、それはハックのようです。
これを安全に行うために考えられる方法は、ペリフェラル マネージャーのプロパティで KVO を使用し、isAdvertising
各サービスをアドバタイズする必要があるかどうかのフラグを保持することです。これにより、アドバタイジングがいつ停止し、安全に再開できるかを正確に知ることができます。また、新しいサービスを追加するためだけに広告を開始および停止した場合、これが現場のセントラルに影響を与えるかどうかもわかりません.
ペリフェラル マネージャを使用して複数のサービスをアドバタイズする適切な方法は何ですか?