次の方法で共有


デバイス間のタスク継続のためのPhone Link

モバイルアプリケーションは、Phone Linkを設定したWindows PCへの最新のウェブサイトURLとドキュメントリンクをプログラムで共有できます。 このタスク継続機能は、「Windowsへのリンク」エクスペリエンスと統合されたAndroidデバイスで利用できます。

この機能は、Phone Linkエクスペリエンスでサポートされるデバイスでのみ使用できます。

このドキュメントでは、シナリオ要件、表面積、限定アクセス機能(LAF)の承認など、Phone Link Task Continuity APIとアプリを統合する方法について説明します。

Phone Linkの詳細:スマートフォンをWindowsコンピュータに同期します。

シナリオ要件

タスク継続APIを使用すると、AndroidアプリからPhone Linkを設定したWindows PCにコンテンツを同期できます。 このAPIへのアクセスを許可するには、次の条件を満たす必要があります。

  • Windows PCがアクセスできる有効なURLであるウェブURLを同期化してください
  • Windows PCからアクセス可能なクラウドドキュメントリンクを同期してください
  • アプリケーションを介してモバイルデバイスからアクセスできる必要があるWindows PCへのローカルドキュメントリンクを同期してください
  • 1分間に60回以上同期しないでください
  • ユーザーがあなたのアプリエクスペリエンスに参加していない場合は、コンテンツを同期しないでください

Phone Linkは、同期したコンテンツをアプリノードで「最近使用」と「最近のウェブサイト」の下に表示し、通知フライアウトします。

最近使用したアプリと Web サイトのスマートフォン連携スクリーンショット

制限付きアクセス機能 (LAF) の承認

Phone Link Task Continuityは限定アクセス機能(LAF)です。 このAPIにアクセスするには、Androidモバイルデバイスにプリロードされた「Windowsへのリンク」パッケージと相互運用するためのMicrosoftの承認を得る必要があります。

アクセスを要求するには、以下の情報をEメールwincrossdeviceapi@microsoft.comで送信してください。

  • ユーザーエクスペリエンスの説明
  • ユーザーがウェブまたはドキュメントにネイティブにアクセスするアプリケーションのスクリーンショット
  • アプリケーションのPackageId
  • アプリケーションのGoogle Playストアへのリンク

要求が承認されると、機能のロックを解除する方法についての指示が表示されます。 承認は、シナリオが上記のシナリオ要件を満たしている場合に限り、あなたのコミュニケーションに基づいて行われます。

データ処理

Microsoftは、Phone Link Task Continuity APIを使用して、Microsoft Services AgreementおよびMicrosoft Privacy Statementに従ってあなたのデータを処理および転送します。 リンクされたユーザー デバイスに転送されたデータは、デバイス間のデータ転送における高い信頼性を確保するために、Microsoft のクラウド サービスを通じて処理される場合があります。 このAPIで処理されるデータは、エンドユーザー制御の対象となるMicrosoftのクラウドサービスによって保持されません。

パッケージに統合するCross-Device SDKは、APIに提供されるデータが信頼できるMicrosoftパッケージだけで処理されることを保証します。

AndroidモバイルアプリをPhone Link Task Continuity APIに統合するには、マニフェスト宣言を更新してからアプリのコンテキストを送信する必要があります。 次のサンプルコード例を参照してください。

Androidアプリマニフェスト宣言

アプリは、契約に参加するクロスデバイスアプリコンテキストプロバイダーのブロードキャストレシーバを登録する必要があります。 登録は、次のようにマニフェストに記載する必要があります。

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

アプリコンテキストを送信するためのコードサンプル

マニフェスト宣言が追加されると、パートナーアプリは以下のコード例に示すようにアプリコンテキストを送信できます。

この例では、JavaとのIAppContextEventHandlerインターフェイスの使用を示します。

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

この例では、オブジェクト式を使用してKotlinとのIAppContextEventHandlerインターフェイスを実装する方法を示します。

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)

プロトコルの説明

このプロトコルは、「Windowsへのリンク」から特定のタイプのアプリコンテキスト機能をサポートする各パッケージに送信される単純なブロードキャストであり、「Windowsへのリンク」はアプリコンテキストを取得する準備ができています。

意図フィールド
アクション 該当なし com.microsoft.crossdevice.appcontextrequest Windowsへのリンク用に修正されました。 依頼者は com.microsoft.appmanager
エキストラ(バンドル) version 2.0(バージョン[minor].[major])
エキストラ(バンドル) contentProviderUri content://com.microsoft.taskcontinuity/b695d1d8 パッケージごとに一意に生成されます。
エキストラ(バンドル) requestedContextType 指定されている場合は、要求されるアプリコンテキストタイプを指定します。 これはバイナリフラグですが、現在2種類あります...アプリコンテキスト:0x01、ブラウザの履歴コンテキスト:0x02。

放送を受信した後、SDKは情報の検証と処理を担当します。 ブロードキャストを受信するパッケージからの期待は、Windowsへのリンクにアプリコンテキストを送信することです。 アプリコンテキストを送信するときは、パートナーアプリによって次の値が提供される必要があります。

追加情報
type [必須] LTWに送信されるアプリコンテキストタイプを示すバイナリフラグ。 値はrequestedContextTypeと一致している必要があります。
createTime [必須] アプリコンテキストの作成時間を表すタイムスタンプ。
lastUpdatedTime [必須] アプリコンテキストの最後に更新された時刻を表すタイムスタンプ。 アプリコンテキストのフィールドが更新されるたびに、更新された時刻を記録する必要があります。
teamId [任意] アプリが属する組織またはグループを識別するために使用されます。
intentUri [任意] 発信元デバイスから渡されたアプリコンテキストを継続できるアプリを示すために使用します。
appId [任意] コンテキストの対象となるアプリケーションのパッケージ。 これを使用する必要があるのは、コンテキストサービスプロバイダーだけです。 Javaのドキュメントを参照してください。省略すると、発信応答プロバイダーのパッケージが使用されます。
title [任意] このアプリコンテキストのタイトル(ドキュメント名やウェブページのタイトルなど)。
weblink [任意] アプリコンテキストを続行するためにブラウザにロードするウェブページのURL。
preview [任意] アプリコンテキストを表すプレビューイメージのバイト数。
extras [任意] 継続中のデバイス上でアプリコンテキストを継続するために必要なアプリ固有の状態情報を含むキーと値のペアオブジェクト。 アプリコンテキストに固有のデータがある場合に提供する必要があります。
LifeTime [任意] アプリコンテキストのライフタイム(ミリ秒単位)。 継続的なシナリオでだけ使用されます。設定されていない場合、デフォルト値は-1です。

X-Device SDK 1.0を使用した以前の「ブラウザ継続性」機能との互換性を確保するために、さらに2つの方法が追加されました。 この機能を使用する場合は、次の値を指定する必要があります。

意図フィールド
browserContextEmptyFlag [任意] ブラウザコンテキストが空かどうかを示すフラグ。 これは、ブラウザの継続性機能の場合だけです。
browserHistory [任意] アプリのブラウズ履歴コンテキスト。 これは、ブラウザの継続性機能の場合だけです。 現在、最大3つのURIを提供することをお勧めします。 それ以上の情報が提供される場合によっては無視されます。

パートナーアプリはaddBrowserContextメソッドを呼び出してブラウザの履歴を追加できます。 ブラウザ履歴を追加する場合は、次の値を指定する必要があります。

browserWebUri PC上のブラウザで開くウェブURI。
(http:またはhttps:)
title ウェブページのタイトル。
timestamp ウェブページが最初に開いた、または最後にリフレッシュされたタイムスタンプ。
favIcon [任意] バイト単位のウェブページのファビコンは、一般的に小さくする必要があります。

GitHubのWindows Cross-Deviceレポ

Windows Cross-Device SDKをプロジェクトに統合する方法については、GitHubのWindows Cross-Deviceレポを参照してください。

よくある質問のリストについては、Phone Linkに関するよくある質問を参照してください。