iOS 7 ANCS: Ermitteln der primären ANCS-Dienst-UUID

8

Wird unter iOS7 der primäre ANCS-Dienst ständig angekündigt oder muss er in verschleierten Einstellungen aktiviert / implementiert werden, wobei ein benutzerdefinierter CBPeripheralManager (unter Verwendung der von Apple angegebenen Dienst- und Merkmals-UUIDs) für einen potenziellen Benachrichtigungs-Consumer verwendet wird erfolgreich entdecken und abonnieren?

Die Apple-Dokumentation (sowohl der CoreBluetooth-Programmierhandbuch ) und die ANCS-Spezifikation ) sind überraschenderweise aller Informationen beraubt darauf. Sie scheinen auf eine benutzerdefinierte Implementierung hinzuweisen, aber das ist nur eine Vermutung unsererseits.

Wenn die primäre ANCS-Dienst-UUID angegeben wird: 7905F431-B5CE-4E99-A40F-4B1E122D00D0 , führt die Ausführung eines Scans zu keinen Treffern. Das Scannen des gesamten BLE-Spektrums liefert erwartungsgemäß Treffer für andere BLE-Geräte, aber nicht für ein einzelnes ANCS-Gerät.

BEARBEITEN 1 :

Das Definieren eines benutzerdefinierten CBPeripheralManager und das manuelle Hinzufügen des von Apple angegebenen ANCS-Dienstes mit den zugehörigen Eigenschaften schlägt mit dem NSError: Error Domain=CBErrorDomain Code=8 "The specified UUID is not allowed for this operation."

fehl

Folglich scheint es, dass die Service UUID von Apple reserviert ist (wie es sein sollte), und wir können es auf diese Weise nicht aktivieren.

Jede Einsicht wird sehr geschätzt; Wir haben Apple diesbezüglich angesprochen und werden aktualisiert, wenn wir von ihnen hören.

Der folgende Code reproduziert den oben erwähnten NSError:

%Vor%     
0xFADE 01.10.2013, 14:20
quelle

6 Antworten

5

Als verspätete Antwort auf diese Frage, jetzt, wo Mavericks draußen ist, haben wir uns das ausgedacht.

Unsere anfänglichen Bemühungen, die ANCS-Spezifikation zwischen zwei iOS-Geräten zu implementieren, eines als Peripheral als Central, waren nicht erfolgreich. Apple antwortete uns nach einiger Zeit (Hut tip zu ihren Evangelisten) und sagte uns, das sei unmöglich.

Mit der Hinzufügung der CBPeripheralManager-Klasse und des CBPeripheralManagerDelegate-Protokolls zum CoreBluetooth.framework, das in die IOBluetooth.framework auf OSX Mavericks eingebettet ist, können wir nun das BLE-Radio auf einem OSX-Gerät einsetzen und ANCS anbieten / p>

Somit gehört dieses Snippet zu einem CBPeripheralManager auf OSX:

%Vor%

Dieses Snippet gehört zu einem CBCentralManager auf einem iOS-Gerät:

%Vor%

Das iOS-Gerät kann nun das OSX-Funkgerät sehen und eine Verbindung mit ihm herstellen, wodurch die ANCS-Spezifikation wie in der Apple-Dokumentation beschrieben implementiert wird.

%Vor%

Glückliche Jagd

    
0xFADE 14.11.2013, 02:28
quelle
2

Nun, der Grund dafür ist, dass Sie die UUID für das Advertisement-Data-Dictionary als String und nicht als CBUUID setzen, außerdem glaube ich, dass der Schlüssel ein Array von CBUUIDs enthält.

daher sollte dies funktionieren:

%Vor%

EDIT: Oh ja, mein Schlechter! Ich habe vergessen zu erwähnen, dass, wenn Sie versuchen, diesen ANCS-Dienst von einem anderen iOS-Gerät zu entdecken, Sie nicht in der Lage sein werden, es zu sehen, nicht unter iOS 7. Irgendwie reserviert das Betriebssystem diesen Dienst für sich selbst und wird nicht auf Ihrem didDiscoverServices-Callback angezeigt Sie sehen es möglicherweise in Ihren Werbedaten. Es funktioniert jedoch, wenn Sie ein externes Gerät haben, z. B. ein Nicht-iOS-Gerät oder ein kieselähnliches Gerät. Auf diese Weise stellen Sie die ANCS-Funktionalität zur Verfügung, aber der Rest der Implementierung liegt beim Benutzer des Dienstes.

    
Dan1one 09.10.2013 17:00
quelle
2

Laut diesem Blogpost:

Ссылка

Sie können mit "Service Solicitation" werben, um den ANCS zu koppeln und darauf zuzugreifen, ohne Code auf dem iPhone zu schreiben!

Ich habe es nicht versucht, aber bald.

    
Erl 15.10.2013 07:01
quelle
2

Für jeden, der gerade eine ähnliche Frage googelt: ANCS über CoreBluetooth scheint in iOS 9 nicht mehr zu funktionieren. Genauer gesagt,

  

Diese Funktionalität wurde von OS X und iOS entfernt.

     

Keine Plattform kann verwendet werden, um den ANCS-Dienst mit CoreBluetooth zu nutzen.

Gegeben von Ссылка

    
Sumant Manne 02.03.2016 04:29
quelle
1

Der ANCS wird nicht auf iOS angekündigt, ich habe einen der folgenden Wege benutzt, um eine lange Verbindung mit ANCS zu erreichen:

Mein Peripheriegerät verwendet einen Dummy-Dienst, der beworben wird. Eine iOS-Anwendung wird verwendet, um ein Gerät mit diesem Dienst zu erkennen und eine Verbindung herzustellen. Sie können Ihre eigene Anwendung schreiben oder eine frei verfügbare (wie zum Beispiel LightBlue) verwenden.

Sobald eine Verbindung hergestellt wurde, listet das Peripheriegerät alle Dienste auf, die auf dem verbundenen iOS-Gerät vorhanden sind. Neben anderen gibt es diese drei in ANCS Dokumentation erwähnt.

Wenn Sie Benachrichtigungen für sie registrieren, erhalten Sie ANCS-Daten.

Wenn Sie Geräte (iOS und Peripheriegeräte) verbinden, kümmert sich ANCS automatisch um die Verbindungs- (Neu-) Einrichtung, wenn es feststellt, dass das verbundene Gerät beworben wird.

    
mmad 28.04.2014 12:26
quelle
0

Ich benutze ANCS ohne Code auf dem iPhone mit "kieselähnlicher" Prototyp-Hardware. Verwenden Sie die oben beschriebenen Methoden zu dieser Frage. Das Video ist für eine Art Witz-Show und als Witz gemeint, ebenso wie das Konzept der "flächendeckenden Benachrichtigungen" :-) und überhaupt nicht technisch. Aber könnte etwas informativ sein.

Ссылка

Ich verdiene kein Geld von meinem Youtube BTW

Ich war nicht erfolgreich mit iOS - iOS Versuchen.

    
bobh 21.11.2013 15:56
quelle