Partager via


Phone Link pour la continuité des tâches inter-appareils

Votre application mobile peut partager par programmation des URL de site Web récents et des liens de documents avec un PC Windows sur lequel Phone Link a été configuré. Cette fonctionnalité de continuité des tâches est disponible sur les appareils Android intégrés à l’expérience « Lien vers Windows ».

Elle est disponible uniquement sur des appareils compatibles avec les expériences Phone Link.

Cette documentation explique comment intégrer votre application à l’API de continuité des tâches Phone Link, y compris les exigences du scénario, la surface d’exposition et l’approbation de la fonctionnalité d’accès limité (LAF).

En savoir plus sur Phone Link : Synchronisez votre smartphone avec votre ordinateur Windows.

Exigences du scénario

L’API de continuité des tâches vous permet de synchroniser le contenu de votre application Android avec un PC Windows sur lequel Phone Link a été configuré. Pour que l'accès à cette API soit accordé, les conditions suivantes doivent être remplies :

  • Synchronisez des URL valides auxquelles le PC Windows peut accéder
  • Synchronisez les liens vers les documents dans le cloud auxquels le PC Windows peut accéder
  • Synchronisez des liens de documents locaux avec le PC Windows qui doivent être accessibles sur l'appareil mobile via votre application
  • NE synchronisez PAS plus de 60 fois par minute
  • NE synchronisez PAS le contenu si l’utilisateur ne participe pas à l'expérience de votre application

Phone Link exposera votre contenu synchronisé dans le nœud Applications sous les rubriques « Récemment utilisée » et « Sites Web récents » et dans un menu volant de notification.

Capture d’écran de Phone Link des applications et sites web récemment utilisés

Approbation de la fonctionnalité d'accès limité (LAF)

La fonctionnalité de continuité des tâches de Phone Link est une fonctionnalité à accès limité (LAF). Pour accéder à cette API, vous devez obtenir l’approbation de Microsoft pour interagir avec le package « Lien vers Windows » préchargé sur les appareils mobiles Android.

Pour demander l’accès, envoyez un e-mail à wincrossdeviceapi@microsoft.com avec les informations énumérées ci-dessous.

  • Description de votre expérience utilisateur
  • Capture d'écran de votre application dans laquelle un utilisateur accède en mode natif à un site web ou à des documents
  • PackageId de votre application
  • Lien Google Play Store pour votre application

Si la demande est approuvée, vous recevrez des instructions sur la façon de déverrouiller la fonctionnalité. Les approbations seront basées sur votre communication, à condition que votre scénario réponde aux Exigences du scénario décrites ci-dessus.

Gestion des données

En utilisant l’API de continuité des tâches Phone Link, Microsoft traite et transfère vos données conformément à l'Accord de services Microsoft et à la Déclaration de confidentialité Microsoft. Les données transférées vers les appareils liés de l’utilisateur peuvent être traitées par les services cloud de Microsoft pour assurer un transfert de données fiable entre les appareils. Les données gérées par cette API ne sont pas conservées par les services cloud de Microsoft soumis au contrôle de l’utilisateur final.

Le kit SDK inter-appareils que vous intégrerez dans votre paquet garantit que les données fournies à l'API ne sont traitées que par des packages Microsoft de confiance.

Pour intégrer votre application mobile Android à l’API de continuité des tâches Phone Link, il faut mettre à jour vos déclarations du manifeste, puis envoyer le contexte de l’application. Consultez les exemples de code ci-dessous.

Déclarations du manifeste d’application Android

Votre application doit enregistrer un récepteur de diffusion pour que le fournisseur de contexte d'application inter-appareils participe au contrat. L'enregistrement doit se faire dans le manifeste comme suit.

<?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>

Exemples de code pour l’envoi du contexte de l’application

Une fois les déclarations du manifeste ajoutées, les applications partenaires peuvent envoyer leur contexte de l’application comme indiqué dans les exemples de code ci-dessous.

Cet exemple montre comment utiliser l’interface IAppContextEventHandler avec Java.

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);

Cet exemple illustre l’utilisation d’une expression d’objet pour implémenter l’interface IAppContextEventHandler avec Kotlin.

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)

Description du protocole

Le protocole est une simple diffusion envoyée depuis le « Lien vers Windows » à chacun des packages qui prennent en charge un type spécifique de fonctionnalité de contexte d’application lorsque « Lien vers Windows » est prêt à obtenir le contexte de l’application.

Champ d'intention Clé Valeur
Action N/A com.microsoft.crossdevice.appcontextrequest corrigé pour le lien vers Windows. Le demandeur sera com.microsoft.appmanager
Extras (bundle) version 2.0 (version [inférieure].[supérieure])
Extras (bundle) contentProviderUri content://com.microsoft.taskcontinuity/b695d1d8 généré de manière unique pour chaque package.
Extras (bundle) requestedContextType S’il est fourni, indiquez le type de contexte d’application demandé. Il s’agit d’un indicateur binaire, pour l’instant nous avons deux types... Contexte d’application : 0x01 et contexte de l’historique du navigateur : 0x02.

Après avoir reçu la diffusion, le kit SDK est responsable de la validation et de la gestion des informations. Les packages qui reçoivent la diffusion sont censés envoyer le contexte de l'application pour établir un lien vers Windows. Les valeurs suivantes doivent être fournies par les applications partenaires lors de l’envoi du contexte de l’application :

Clé Valeur Informations supplémentaires
type [obligatoire] Indicateur binaire qui indique le type de contexte de l’application envoyé à lien vers Windows. La valeur doit être cohérente avec le requestedContextType.
createTime [obligatoire] Horodatage indiquant l’heure de création du contexte de l’application.
lastUpdatedTime [obligatoire] Horodatage indiquant l’heure de la dernière mise à jour du contexte de l’application. Lors de chaque mise à jour des champs du contexte de l’application, l’heure mise à jour doit être enregistrée.
teamId [en option] Permet d’identifier l’organisation ou le groupe auquel appartient l’application.
intentUri [en option] Utilisé pour indiquer quelle application peut poursuivre le contexte d'application transmis par l'appareil d'origine.
appId [en option] Package de l’application pour laquelle le contexte est utilisé. Seuls les fournisseurs de services de contexte doivent l’utiliser. Consultez la documentation Java. En cas d'omission, le package du fournisseur de la réponse appelante sera utilisé.
title [en option] Titre de ce contexte d’application, tel qu’un nom de document ou un titre de page Web.
weblink [en option] URL de la page Web à charger dans un navigateur pour poursuivre le contexte de l’application.
preview [en option] Octets de l'image de prévisualisation pouvant représenter le contexte de l'application.
extras [en option] Objet de paire clé-valeur contenant des informations d’état spécifiques à l’application nécessaires pour poursuivre un contexte d’application sur l’appareil de continuité. Doit être fourni lorsque le contexte de l'application a ses données uniques.
LifeTime [en option] Durée de vie du contexte de l’application en millisecondes. Utilisée uniquement pour les scénarios en cours. Si cette valeur n'est pas définie, la valeur par défaut est -1.

Pour être compatible avec la fonctionnalité « Continuité du navigateur » précédente à l’aide du Kit SDK X-Device 1.0, nous avons ajouté deux méthodes supplémentaires. Les valeurs suivantes doivent être fournies lors de l’utilisation de cette fonctionnalité :

Champ d'intention Clé Valeur
browserContextEmptyFlag [en option] Indicateur pour indiquer si le contexte du navigateur est vide. Uniquement pour la fonction de continuité du navigateur.
browserHistory [en option] Contexte d’historique de navigation de l’application. Uniquement pour la fonction de continuité du navigateur. Il est actuellement recommandé de fournir jusqu’à 3 URI. Si d’autres sont fournis, ils seront ignorés.

Les applications partenaires peuvent appeler la méthode addBrowserContext pour ajouter l’historique du navigateur. Les valeurs suivantes doivent être fournies lors de l’ajout de l’historique du navigateur :

Clé Valeur
browserWebUri URI web qui s’ouvre dans le navigateur sur PC.
(http: ou https:)
title Titre de la page Web.
timestamp Heure à laquelle la page web a été ouverte pour la première fois ou actualisée pour la dernière fois.
favIcon [en option] En général, le favicon de la page Web en octets doit être petit.

Dépôt inter-appareils Windows sur GitHub

Recherchez des informations sur l’intégration du kit SDK inter-appareils Windows dans votre projet dans le Dépôt inter-appareils Windows sur GitHub.

Pour obtenir la liste des questions fréquentes, consultez Questions fréquentes sur Phone Link.