29.03.2015 / 0 Comments
Vor kurzem haben wir in unsere SecSign ID Zwei-Faktor-Authentifizierung iPhone App die Unterstützung der Apple Watch integriert. Dabei haben wir einige wichtige Dinge über die Entwicklung für die Apple Watch gelernt und möchten diese nützlichen Erkenntnisse gerne mit Ihnen teilen. Für weitere Informationen über unsere SecSign ID App und wie diese Ihre Webseiten und Anwendungen mit einer branchenführenden Zwei Faktor Authentifizierung absichern kann, besuchen Sie gerne unsere Webseite oder unsere AppStore-Seite.
Einsatzmöglichkeiten der Apple Watch
Die Rechenleistung der Apple Watch Apps ist derzeit noch recht begrenzt. Komplexe Berechnungen werden von dem mit der Apple Watch verbundenen iPhone erledigt. Die Apple Watch selber können Sie sich wie ein externes Display vorstellen. Auf dem Bildschirm der Apple Watch können Dinge angezeigt werden. Auch kann der Nutzer Eingaben machen, aber bislang ist das alles, was Apple hierfür anbietet. Für viele Anwendungsfälle reicht das allerdings auch völlig aus.
Weiterhin ist die Apple Watch nur für kurze Interaktionen des Nutzers gedacht. Das Display schaltet sich automatisch aus, sobald der Nutzer sein Handgelenk wieder senkt. Kurz nach dem Abschalten des Bildschirms beendet die Apple Watch jede zu dem Zeitpunkt noch laufende App. Sie müssen also den Workflow Ihrer App entsprechend anpassen.
Die Bestandteile einer Apple Watch App
Watch Apps sind in drei Teile unterteilt:
1. Die WatchKit App: Das ist der Teil Ihrer App, der wirklich auf der Apple Watch läuft. Allerdings erlaubt Apple derzeit nicht, irgendwelche Berechnungen damit anzustellen. So kann Ihre WatchKit App nur die Benutzeroberfläche sowie Ressourcen wie Bilder, die dem Nutzer angezeigt werden, beinhalten.
2. Die WatchKit Extension: Dies ist eine iOS-Erweiterung Ihrer WatchKit App, die auf dem verbundenen iPhone läuft und für die Berechnung verwendet wird. In der Extension können Sie Elemente der Nutzeroberfläche wie den Text für ein Textfeld oder das Bild für einen ImageView setzen. Wenn der Nutzer mit der Oberfläche der WatchKit App interagiert, werden Aktionen in der WatchKit Erweiterung aufgerufen. Die Kommunikation zwischen der WatchKit App und der WatchKit Extension wird im Hintergrund per Bluetooth und WLAN übertragen.
3. Die iPhone App: Alle WatchKit Apps müssen über eine iPhone App verteilt werden. Es gibt keine eigenständigen WatchKit Apps. Sie können die bestehende Funktionalität der iPhone App in Ihren Apple Watch Apps verwenden, aber die WatchKit Erweiterung und die iPhone App laufen nicht in demselben Prozessbereich. Daher können sie nicht direkt auf die Daten oder Funktionen der jeweils anderen zugreifen. Sie müssen daher einen Kommunikationskanal zwischen ihnen erstellen, um die Möglichkeiten der iPhone App auch in der WatchKit Erweiterung nutzen zu können. Alle länger dauernden komplexen Berechnungen müssen in der iPhone App erfolgen.
Kommunikation
Die Kommunikation zwischen Ihrer WatchKit App und der WatchKit Erweiterung findet im Hintergrund statt. Sie müssen sich darum nicht kümmern. Wenn Sie aber eine Funktionalität in Ihrer iPhone App haben, die Sie benutzen möchten, müssen Sie eine Kommunikation zwischen der WatchKit Erweiterung und Ihrer Eltern-App auf dem iPhone herstellen.
Das Starten der iPhone App von der WatchKit Extension durch Aufrufen von openParentApplication und der Austausch von Daten
Sie können eine Anfrage von der WatchKit Extension an die Eltern-App auf dem iPhone senden, indem Sie openParentApplication:reply: on WKInterfaceController aufrufen. Damit wird die Ausgangs-App auf dem iPhone im Hintergrund geöffnet (wenn sie nicht schon läuft) und Daten an application:handleWatchKitExtensionRequest:reply: in der AppDelegate Klasse in der iPhone-App gesendet.
Geschickt wird ein NSDictionary, das serialisierbaren Inhalt aufweist. Der zweite Parameter ist ein Block, der aufgerufen wird, wenn das iPhone Ihre Anfrage beantwortet.
Nun folgt ein Beispielcode auf Seite der WatchKit Erweiterung. In diesem Fall senden wir ein NSDictionary mit einem Schlüssel genannt “ExchangeObject” und einem Objekt als Wert. Das Objekt kann alles sein, das durch den NSKeyedArchiver serialisierbar ist. Also muss es initWithCoder: und encodeWithCoder: implementieren.
In diesem Beispiel senden wir einen einfachen String. Sie können jedoch auch, falls nötig, komplexere Objekte verwenden. Sobald dieser asynchrone Aufruf antwortet, können Sie die Antwort vom Dictionary wieder zurück in ein Objekt umwandeln und auswerten.
NSString* request = …;
BOOL didOpenParent = [WKInterfaceController openParentApplication:@{@"ExchangeObject" : [NSKeyedArchiver archivedDataWithRootObject:request]} reply:^(NSDictionary *replyInfo, NSError *error) {
if (error != nil) {
NSLog(@"Error: %@", [error localizedDescription]);
}
NSString* answer = [NSKeyedUnarchiver unarchiveObjectWithData:replyInfo[@"ExchangeObject"]];
//do something with the answer
}
}];
if (!didOpenParent) {
NSLog(@"Can't start iPhone app!“);
}
Auf Seiten des iPhones müssen Sie application:handleWatchKitExtensionRequest:reply: implementieren. Dies wird mit der Anfrage als Parameter und mit einem Block zum Senden der Antwort an die Erweiterung aufgerufen. Wenn Ihre iPhone App nicht läuft, wird application:didFinishLaunchingWithOptions: zuerst aufgerufen, und Ihre iPhone App wird im Hintergrundmodus gestartet. Sie können dann die Anfrage zu einem Objekt entpacken und Ihre Berechnungen durchführen. Dann senden Sie ein Dictionary unter Verwendung des Antwortblocks zurück.
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo)) {
if (userInfo[@"ExchangeObject"] != nil) {
NSString* request = [NSKeyedUnarchiver unarchiveObjectWithData:userInfo[@"ExchangeObject"]];
//do something with the request
NSString* answer = ..;
reply(@{@"ExchangeObject" : [NSKeyedArchiver archivedDataWithRootObject:answer]});
}
else {
NSLog(@"Request from Apple Watch Extension to iPhone app doesn't contain ExchangeObject");
}
}
Wenn das erledigt ist, können Sie eine weiter Anfrage senden. Beachten Sie bitte, dass Sie nicht zwei Anfragen zur gleichen Zeit laufen lassen können, und dass Sie den Antwortblock und nicht öfter als einmal aufrufen können.
Wenn Sie Ihre Antwort später schicken möchten, z.B. weil Sie noch einige Daten aus dem Netzwerk benötigen, können Sie den Antwortblock als Property abspeichern und später aufrufen. Definieren Sie eine Property wie folgt:
@property (copy) void (^replyBlock)(NSDictionary *replyInfo);
Weisen Sie in application:handleWatchKitExtensionRequest:reply: den Block der Property zu:
self.replyBlock = reply;
Sie können es dann später wie folgt aufrufen:
self.replyBlock(@{@"ExchangeObject" : [NSKeyedArchiver archivedDataWithRootObject:object]});
Warten Sie nicht zu lange, sondern rufen sie es nach wenigen Sekunden auf. Anderenfalls könnte die Apple Watch Ihre WatchKit App in der Zwischenzeit beendet haben. Wenn Sie eine längere Hintergrundaktion durchführen wollen, z.B. Daten von ihrem Server holen, müssen Sie dies iOS mit dem beginBackgroundTaskWithExpirationHandler: Selector auf UIApplication mitteilen. Dies verhindert, dass das System ihre App beendet (für bis zu 10 Minuten). Vorsicht: Dies ist nur auf der echten Watch notwendig, im Simulator funktioniert es auch so.
Wenn Sie also eine Anfrage von der Extension bekommen haben, starten Sie einen Hintergrundtask:
UIBackgroundTaskIdentifier backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"background task expires soon");
}];
Nachdem Sie die Antwort an die Extension geschickt haben, können Sie den Hintergrundtask beenden:
[[UIApplication sharedApplication] endBackgroundTask:backgroundTaskIdentifier];
Wenn Sie mehrere Anfragen hintereinander stellen wollen reicht es auch einmal einen Hintergrundtask zu starten:
if (backgroundTaskIdentifier == UIBackgroundTaskInvalid)
{
backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"background task expires soon");
}];
}
Hierfür muss backgroundTaskIdentifier, in der init Methode und wenn der Task beendet wird, auf den Wert UIBackgroundTaskInvalid gesetzt werden.
Austausch von Daten zwischen der WatchKit-Erweiterung und Ihrer iPhone-App innerhalb einer gemeinsamen App-Group
Sie können ebenfalls Daten austauschen, indem sie sie in eine gemeinsame App-Gruppe schreiben. Dies ist ein Ort, an dem sowohl die WatchKit Erweiterung als auch die iPhone App Lese- und Schreibrechte haben. Dieser Ansatz hat jedoch einige Nachteile gegenüber dem openParentApplication-Aufruf:
Aus diesem Grund verwenden wir für die Kommunikation openParentApplication. Es gibt allerdings auch einen Anwendungsfall für gemeinsame App-Gruppen: Das iPhone kann z.B. die Daten dorthin zur Ansicht für die WatchKit-Erweiterung abspeichern. Ein Update ist nur möglich, wenn etwas Neues hinzukommt, und wenn die Erweiterung gestartet wird, so kann diese nur die Daten lesen. Das macht natürlich nur dann Sinn, wenn Sie keine neuen Daten benötigen. In unserer App verwenden wir ausschließlich den openParentApplication-Aufruf, da wir eine Antwort sofort nach dem Versenden einer Anfrage an das iPhone brauchen.
Starten der WatchKit Erweiterung/App über die iPhone-App
Wie Sie vermutlich bemerkt haben, gibt es keinen direkten Weg, Ihre WatchKit Erweiterung/ App von der iPhone App aus zu starten. Sie kann durch den Nutzer nur manuell auf dem Apple Watch-Home-Screen gestartet werden, oder wenn es eine lokale bzw. eine Remote-Notification erhält. Erhält das iPhone eine Benachrichtigung, entscheidet es, ob sie auf der Apple Watch oder auf dem iPhone anzeigt wird. Gibt es eine verbundene Apple Watch und das iPhone ist gesperrt, so wird die Nachricht auf der Apple Watch angezeigt. Anderenfalls erscheint sie auf dem iPhone. Sie können also nicht sicher sein, ob sie zur Apple Watch geschickt wird, jedoch ist dies der einzige Weg, sie zu öffnen. Das begrenzt die Anwendungsfälle für Apple Watch Apps, doch für viele Anwendungsfälle ist es völlig ausreichend, nur explizit auf die Benachrichtigung oder das Starten zu reagieren.
Zugang zur Keychain
Wenn Sie auf die Keychain in Ihrer iPhone-App zugreifen, wird dies nun im Hintergrund geschehen. Das bedeutet, dass Sie eine andere Zugangsoption verwenden müssen. Für weitere Informationen lesen Sie bitte diesen Blog-Post. Möchten Sie Zugriff auf die Keychain in Ihrer Erweiterung haben, können Sie eine gemeinsame Zugangsgruppe für die Keychain hinzufügen.
Identifier, UDIDs, Bereitstellungsprofil und Code-Signing-Identität
Für den Einsatz Ihrer App müssen Sie nun zwei neue iOS App IDs im iOS Dev Center hinzufügen. Nehmen Sie Ihre App ID com.company.app und fügen Sie watchapp und watchkitextension hinzu, um neue App IDs zu erstellen. Sie erhalten dann folgendes:
com.company.app
com.company.app.watchapp
com.company.app.watchkitextension
Ebenso benötigen Sie zwei weitere Provisioning Profiles für Ihre WatchKit Erweiterung und Ihre WatchKit App. Auch müssen Sie sicherstellen, dass Sie den Code Ihrer iPhone App, Ihrer Watchkit Erweiterung und Ihrer WatchKit App mit demselben Zertifikat signieren und dieses Zertifikat in alle Bereitstellungsprofile integrieren. Das heisst es gibt insgesamt 9 Provisioning Profiles: Für jede der drei App IDs benötigt man für jedes XCode Scheme (Development, AdHoc, AppStore) ein Provisioning Profile.
Außerdem muss die UDID der Apple Watch unter Geräte im iOS Dev Center eingetragen werde, wie man das auch für ein iPhone machen würde. Die UDID der Apple Watch findet sich in XCode unter Window -> Devices. Dieses neue Device muss dann auch in allen Provisioning Profiles eingetragen werden (Dev und AdHoc).
Xcode bringt gelegentlich einiges durcheinander. Es könnte also sein, dass Sie manuell die project.pbxproj-Datei in dem YourApp.xcodeproj-Paket editieren müssen, um die richtigen Bereitstellungsprofile und die korrekte Code-Signing-Identität festzulegen.
Hardware-Zugang
Im Moment können Entwickler keine Informationen über Herztätigkeit oder andere Sensordaten über einen API-Aufruf erhalten. Die Apple Watch wird diese Informationen in der Health-App speichern. Ebenso können Sie auf dem iPhone nicht erkennen, ob es eine dazugehörige App gibt, oder ob die Apple Watch gerade vom Nutzer getragen wird. Die Apple Watch weiß dies jedoch aufgrund eines Sensors auf der Rückseite der Uhr, der den Kontakt mit der Haut erkennt.
Schutz gegen unbefugten Zugriff
Die Apple Watch hat zum Schutz gegen unberechtigten Zugriff ihren eigenen PIN-Code. Diese PIN muss einmal eingegeben werden, nachdem Sie die Uhr angelegt haben. Danach tastet die Apple Watch den Nutzer fortlaufend mit einem Hautkontaktsensor auf der Rückseite der Apple Watch ab. Sie müssen die PIN jedes Mal nach Abnahme der Uhr wieder eingeben. Es besteht ebenfalls die Möglichkeit, Ihre Uhr selbstständig zu entsperren, wenn Ihr iPhone entsperrt ist und sich in Funkreichweite befindet. Sie können ebenfalls den PIN-Code, falls gewünscht, deaktivieren, wobei dies aus Sicherheitsgründen definitiv nicht zu empfehlen ist.
Weitere Tipps finden Sie unter (https://developer.apple.com/watchkit/tips/)
Ein kurzer Blick auf unsere Apple Watch App zur sicheren Anmeldung
Die Erfahrungen, die wir hier mit Ihnen geteilt haben, machten wir während der Entwicklung der weltweit ersten Zwei Faktor Authentifizierung-App, die Apple Watch-Geräte unterstützt.
Unsere weiterentwickelte Kryptographie beseitigt Passwörter und die damit verbundenen Sicherheitsrisiken und ersetzt überholte und zudem gefährliche Prozeduren in der Anmeldesicherheit durch hochmoderne mobile Authentifizierung, die es praktisch unmöglich macht, die Nutzeranmeldungen zu hacken.
Nutzer können sich in Anwendungen und Netzwerke sowie auf Webseiten und sogar Smart TVs anmelden, ohne dabei ein Passwort zu verwenden. Hierbei wird auf verschlüsselte asymmetrische Softwareschlüssel gesetzt, die mit Out-Of-Band-Faktoren wie Wissen aber auch biometrischen Faktoren zur Identitätsüberprüfung verbunden sind.
Unsere Apple Watch App hat diese hochsichere Authentifizierung mithilfe der biometrischen Identitätsprüfung per Hautkontakt erweitert und noch mehr vereinfacht. Mit unserem kurzen Video über die SecSign ID für die Apple Watch können Sie vorab schon einmal einen Blick darauf werfen.
Entwickler können unsere mobile App und Authentifizierung über unsere mobilen Apps und sicheren Trust Center Server in der Cloud kostenlos benutzen. Wahlweise kann unsere Technologie aber auch innerhalb Ihrer eigenen Architektur als Inhouse-Lösung installiert werden. Damit wird die Lösung auf Ihren eigenen Servern und hinter Ihrer Firewall betrieben und kann ebenfalls problemlos in Ihre Anwendungen integriert werden, um eine unübertroffene Sicherheit für das Login zu leisten.
Für weitere Informationen über die SecSign ID besuchen Sie bitte unsere Webseite oder setzen Sie sich mit uns in Verbindung, um eine kostenlose Vorstellung und Beratung zu erhalten.
Über uns
Die SecSign Technologies AG ist eine Schwestergesellschaft der SecCommerce GmbH in Hamburg. Die SecCommerce GmbH gehört zu den Pionieren auf dem Gebiet der kryptographischen Lösungen und besitzt mehr als 16 Jahre Erfahrung in der Entwicklung von Public Key Infrastrukturen (PKI), elektronischen Signaturen und Smartcardtechnologie.
Unsere Sicherheits- und Kryptographieexperten haben Systeme entwickelt, eingesetzt und gewartet, die erfolgreich vertrauliche Geschäftsdaten und Nutzerzugänge für zahlreiche Großkonzerne absichern. Zu unseren Kunden gehören u.a. IBM, Siemens, Johnson & Johnson, Fujitsu, T-Systems, BMW und Audi.
Die SecCommerce GmbH wurde 1998 gegründet. Ihre Softwarelösungen werden von Entwicklern und führenden IT-Unternehmen, die ihren Schwerpunkt auf Sicherheit und Erfüllung gesetzlicher Vorgaben legen, für die Absicherung von Kommunikation, Zugang zu Online-Portalen und Langzeitarchivierung genutzt. SecCommerce gehört zu den weltweit ersten Unternehmen, die elektronische Signaturkomponenten genutzt haben, um Sicherheit für die Datenarchivierung und Kommunikation bei großen Versicherungsunternehmen, Banken und Behörden zu gewährleisten.
Würden Sie gerne mehr über unsere innovativen und hochsicheren Lösungen zum Schutz von Nutzerkonten und empfindlichen Daten erfahren?
Nutzen Sie unser Kontaktformular und ein SecSign Kundenbetreuer wird innerhalb eines Arbeitstages Kontakt mit Ihnen aufnehmen.
Benötigen Sie Hilfe mit einem existierenden SecSign Account oder einer Produktinstallation? Die häufigsten Fragen haben wir in unseren FAQs zusammengefasst. Sie finden keine Lösung zu Ihrem Problem? Kontaktieren Sie den
Kundensupport
Ich Interessiere mich für