Freigeben über


Phone Link für Kontinuität bei der Arbeit auf mehreren Geräten

Ihre mobile Anwendung kann zuletzt verwendete Website-URLs und Links zu Dokumentationen programmgesteuert mit einem Windows-PC teilen, auf dem Phone Link eingerichtet wurde. Dieses Feature, das die Kontinuität bei der Arbeit gewährt, ist auf Android-Geräten mit integriertem „Link zu Windows“ verfügbar.

Dieses Feature ist nur auf Geräten verfügbar, die Phone Link unterstützen.

In dieser Dokumentation wird beschrieben, wie Sie Ihre App in die Phone-Link-API für Kontinuität bei der Arbeit integrieren. Außerdem geht die Dokumentation auf Anforderungen für bestimmte Szenarien, die Benutzeroberfläche und die Genehmigung des eingeschränkten Zugriffs (Limited Access Feature, LAF) ein.

Erfahren Sie mehr über Phone Link: Synchronisieren Sie Ihr Smartphone mit Ihrem Windows-Computer.

Anforderungen für das Szenario

Mit der API für Kontinuität bei der Arbeit können Sie Inhalte aus Ihrer Android-App mit einem Windows-PC synchronisieren, auf dem Phone Link eingerichtet ist. Es müssen die folgenden Bedingungen erfüllt sein, damit der Zugriff auf diese API gewährt werden kann:

  • Synchronisieren Sie Web-URLs, bei denen es sich um gültige URLs handelt, auf die über den Windows-PC zugegriffen werden kann
  • Synchronisieren Sie Links zu Cloud-Dokumenten, auf die über den Windows PC zugegriffen werden kann
  • Synchronisieren Sie die Links zu lokalen Dokumenten mit dem Windows-PC, der über die Anwendung auf Ihrem mobilen Gerät zugänglich sein muss.
  • Synchronisieren Sie nicht öfters als 60 Mal pro Minute
  • Synchronisieren Sie nicht, wenn der/die Benutzer*in Ihre App nicht verwendet

Phone Link zeigt die synchronisierten Inhalte im Knoten „Apps“ unter „Zuletzt verwendet“ und „Zuletzt verwendete Websites“ und in einem Benachrichtigungs-Flyout an.

Smartphone-Link Screenshot der zuletzt verwendeten Apps und Websites

Genehmigung des Features für eingeschränkten Zugriff (Limited Access Feature, LAF)

Phone Link für Kontinuität bei der Arbeit ist ein Feature mit eingeschränkten Zugriff (Limited Access Feature, LAF). Um auf diese API zugreifen zu können, muss Ihnen Microsoft die Genehmigung zur Verwendung des „Link zu Windows“-Pakets erteilen, das Sie vorab auf mobilen Android-Geräten geladen haben.

Um den Zugriff anzufordern, senden Sie eine E-Mail mit den unten aufgeführten Informationen an wincrossdeviceapi@microsoft.com.

  • Beschreibung Ihrer Benutzererfahrung
  • Screenshot Ihrer Anwendung, in der ein*e Benutzer*in nativ auf das Web oder Dokumente zugreift
  • Package-ID Ihrer Anwendung
  • Google Play Store-Link für Ihre Anwendung

Wenn die Anforderung genehmigt wurde, erhalten Sie Anweisungen zum Entsperren des Features. Die Genehmigungen werden basierend auf den Angaben dazu erteilt, inwiefern das Szenario die oben beschriebenen Anforderungen für das Szenario erfüllt.

Datenverarbeitung

Mithilfe der Phone-Link-API für Kontinuität bei der Arbeit bearbeitet und übermittelt Microsoft Ihre Daten gemäß der Microsoft-Servicevereinbarung und gemäß der Microsoft-Datenschutzbestimmungen. Daten, die an die verknüpften Benutzergeräte übertragen werden, können über die Cloud-Dienste von Microsoft verarbeitet werden, um eine zuverlässige Datenweitergabe zwischen den Geräten sicherzustellen. Die von dieser API verarbeiteten Daten werden nicht von den Cloud-Diensten von Microsoft gespeichert, die der Kontrolle durch den Endbenutzer/die Endbenutzerin unterliegen.

Das geräteübergreifende SDK, das Sie in Ihr Paket integrieren, stellt sicher, dass die für die API bereitgestellten Daten nur von vertrauenswürdigen Microsoft-Paketen verarbeitet werden.

Um Ihre mobile App für Android in die Phone-Link-API für Kontinuität bei der Arbeit zu integrieren, müssen Sie Ihre Manifestdeklarationen aktualisieren und dann den App-Kontext senden. Sehen Sie sich hierzu die unten aufgeführten Codebeispiel an.

Manifestdeklarationen für Android-Apps

Ihre App sollte einen Übertragungsempfänger für den geräteübergreifenden App-Kontextanbieter registrieren, um sich am Vertrag zu beteiligen. Die Registrierung im Manifest sollte folgendermaßen aussehen:

<?xml version="1.0" encoding="utf-8"?>   
<manifest xmlns:android="http://schemas.android.com/apk/res/android"   
    <!--   
        If the app targets API 30 or higher, be sure to use the <queries>   
        and add com.microsoft.appmanager to the included packages.   
    -->   
    <queries>   
        <package android:name="com.microsoft.appmanager" />   
    </queries>   
    <application …     
        <!-- … -->   
       <!--   
           This is the receiver declaration for receiving broadcasts from LTW.   
           It needs to be exported with meta-data as this is checked for    

           The package before we send the broadcast.   
       -->   
       <receiver   
           android:name="com.microsoft.crossdevicesdk.continuity.AppContextBroadcastReceiver"  
           android:enabled="true"   
           android:exported="true">   
           <intent-filter>   
               <action android:name="com.microsoft.crossdevice.appcontextrequest" />   
           </intent-filter>   
   
            <meta-data   
                android:name="com.microsoft.crossdevice.sampleProviderMetadataName"   
                android:value="true" />   
        </receiver>   
    </application>   
</manifest>

Codebeispiele zum Senden von App-Kontext

Nachdem die Manifestdeklarationen hinzugefügt wurden, können Partner-Apps ihren App-Kontext senden, wie in den folgenden Codebeispielen dargestellt.

In diesem Beispiel wird gezeigt, wie Sie die IAppContextEventHandler-Schnittstelle mit Java verwenden.

IAppContextEventHandler appContextEventHandler = new IAppContextEventHandler() {  
    @Override  
    public void onContextRequestReceived(ContextRequestInfo contextRequestInfo) {  
        Log.d(TAG, String.format("onContextRequestReceived, type:%s", contextRequestInfo.getType()));  
        //Not necessary to do following things in here, just  
        //make sure to send app context after receiving broadcast.  
        AppContext appContext = new AppContext();  
        //...  
        //set parameter  
        appContext.setType(ProtocolConstants.TYPE_APPLICATION_CONTEXT);  
        appContext.setCreateTime(System.currentTimeMillis());  
        appContext.setLastUpdatedTime(System.currentTimeMillis());  
        appContext.setTitle("New PowerPoint Presentation");  
        appContext.setExtras("{\"DocInfo\":\"[{\"timestamp\":1672,\"DocTitle\":\"Book Sharing\",\"Index\":\"8\"}]\"}");  
        //...  
        AppContextManager.INSTANCE.sendAppContext(getApplicationContext(),appContext);  
    }  
  
    @Override  
    public void onInvalidContextRequestReceived(@NonNull Throwable throwable) {  
        Log.e(TAG, String.format("onInvalidContextRequestReceived: " + throwable.getMessage()));  
    }  

    @Override   
    public void onSyncServiceDisconnected() {   
        Log.d(TAG, String.format("onSyncServiceDisconnected"));   
    }  
};  
AppContextManager.INSTANCE.setAppContextEventHandler(appContextEventHandler);

In diesem Beispiel wird gezeigt, wie Sie einen Objektausdruck zum Implementieren der IAppContextEventHandler-Schnittstelle mit Kotlin verwenden.

val appContextEventHandler = object : IAppContextEventHandler { 
    override fun onContextRequestReceived(contextRequestInfo: ContextRequestInfo) { 
        Log.d(TAG, String.format("onContextRequestReceived, type:%s", contextRequestInfo.type)); 
        //Not necessary to do following things in here, just 
        //make sure to send app context after receiving broadcast. 
        var appContext = AppContext() 
        //... 
        //set parameter 
        appContext.type = ProtocolConstants.TYPE_APPLICATION_CONTEXT 
        appContext.createTime = System.currentTimeMillis() 
        appContext.lastUpdatedTime = System.currentTimeMillis() 
        appContext.setTitle("New PowerPoint Presentation") 
        appContext.setExtras("{\"DocInfo\":\"[{\"timestamp\":1672,\"DocTitle\":\"Book Sharing\",\"Index\":\"8\"}]\"}") 
        //... 
        AppContextManager.sendAppContext(applicationContext,appContext) 
    } 
 
    override fun onInvalidContextRequestReceived(throwable: Throwable) { 
        Log.e(TAG, String.format("onInvalidContextRequestReceived: " + throwable.message)) 
    } 
 
    override fun onSyncServiceDisconnected() { 
        Log.d(TAG, String.format("onSyncServiceDisconnected")) 
    } 
} 
AppContextManager.setAppContextEventHandler(appContextEventHandler)

Protokollbeschreibung

Das Protokoll ist eine einfache Übertragung, die „Link zu Windows“ an alle Pakete sendet, die einen bestimmten App-Kontextfeature-Typ unterstützen, wenn „Link zu Windows“ bereit ist, den App-Kontext abzurufen.

Absichts-Feld Schlüssel Wert
Aktion N/V com.microsoft.crossdevice.appcontextrequest Für Link zu Windows festgelegt. Der Antragsteller wird com.microsoft.appmanager sein.
Extras (Paket) version 2.0 (Version [minor].[major])
Extras (Paket) contentProviderUri content://com.microsoft.taskcontinuity/b695d1d8 Für jedes Paket eindeutig generiert.
Extras (Paket) requestedContextType Wenn angegeben, geben Sie an, welcher App-Kontexttyp angefordert wird. Dies ist eine binäre Kennzeichnung, für die momentan zwei Typen vorhanden sind: Anwendungskontext: 0x01 und Browserverlaufskontext: 0x02.

Nach Erhalt der übertragenen Daten übernimmt das SDK ihre Validierung und Verarbeitung. Die Pakete, die die übertragenen Daten empfangen, haben zur Aufgabe, den App-Kontext an „Link zu Windows“ zu senden. Beim Senden des App-Kontexts sollten Partner-Apps die folgenden Werte bereitstellen:

Schlüssel Wert Zusätzliche Informationen
type [erforderlich] Ein binäres Flag, das angibt, welcher App-Kontexttyp an LTW gesendet wird. Der Wert sollte mit dem requestedContextType übereinstimmen.
createTime [erforderlich] Zeitstempel, der angibt, zu welcher Uhrzeit der App-Kontext erstellt wurde.
lastUpdatedTime [erforderlich] Zeitstempel, der angibt, zu welcher Uhrzeit der App-Kontext zuletzt aktualisiert wurde. Jedes Mal, wenn App-Kontextfelder aktualisiert werden, muss die aktualisierte Uhrzeit aufgezeichnet werden.
teamId [optional] Wird verwendet, um die Organisation oder Gruppe zu identifizieren, der die App gehört.
intentUri [optional] Gibt an, welche App mit dem App-Kontext fortfahren kann, der vom ursprünglichen Gerät übergeben wurde.
appId [optional] Das Paket der Anwendung, für das der Kontext vorgesehen ist. Muss nur von Kontextdienstanbietern verwendet werden. Verweisen Sie auf die Java-Dokumente. Wenn Sie dies nicht tun, wird das Paket des aufrufenden Antwortanbieters verwendet.
title [optional] Der Titel dieses App-Kontexts, z. B. ein Dokumentname oder ein Webseitentitel.
weblink [optional] Die URL der Webseite, die in einem Browser geladen werden soll, um den App-Kontext fortzusetzen.
preview [optional] Bytes des Vorschaubilds, das den App-Kontext darstellen kann.
extras [optional] Ein Schlüssel-Wert-Paarobjekt, das App-spezifische Statusinformationen enthält, die zum Fortsetzen eines App-Kontexts auf dem fortfahrenden Gerät erforderlich sind. Muss angeben, wenn der App-Kontext seine eindeutigen Daten enthält.
LifeTime [optional] Die Lebensdauer des App-Kontexts in Millisekunden. Wird nur für das fortlaufende Szenario verwendet; falls nicht festgelegt, ist der Standardwert -1.

Um mit dem vorherigen Feature „Browserkontinuität“ mit X-Device SDK 1.0 kompatibel zu sein, haben wir zwei weitere Methoden hinzugefügt. Wenn dieses Feature verwendet wird, sollen die folgenden Werte bereitgestellt werden:

Absichts-Feld Schlüssel Wert
browserContextEmptyFlag [optional] Flag, das angibt, ob der Browserkontext leer ist. Nur für das Feature „Browserkontinuität“.
browserHistory [optional] Browserverlaufskontext für die App. Nur für das Feature „Browserkontinuität“. Derzeit wird empfohlen, bis zu 3 URIs bereitzustellen. Wenn mehr URIs bereitgestellt werden, werden sie ignoriert.

Partner-Apps können die Methode addBrowserContext aufrufen, um den Browserverlauf hinzuzufügen. Die folgenden Werte sollten beim Hinzufügen des Browserverlaufs bereitgestellt werden:

Schlüssel Wert
browserWebUri Ein Web-URI, der im Browser auf dem PC geöffnet wird.
(http: oder https:)
title Der Titel der Webseite.
timestamp Der Zeitstempel, der angibt, wann die Webseite zuerst geöffnet oder zuletzt aktualisiert wurde.
favIcon [optional] Das Favicon der Webseite in Bytes; sollte allgemeinen klein sein.

Geräteübergreifendes Windows-Repository auf GitHub

Informationen zum Integrieren des geräteübergreifenden Windows-SDKs in Ihr Projekt finden Sie unter Geräteübergreifendes Windows-Repository auf GitHub.

Eine Liste der häufig gestellten Fragen finden Sie unter Häufig gestellte Fragen zu Phone Link.