다음을 통해 공유


디바이스 간 작업 연속성에 대한 휴대폰과 연결

모바일 애플리케이션은 프로그래밍 방식으로 최근 웹 사이트 URL을 공유하고 휴대폰과 연결 설정한 Windows PC에 대한 문서 링크를 공유할 수 있습니다. 이 작업 연속성 기능은 "Windows와 연결" 환경과 통합된 Android 디바이스에서 사용할 수 있습니다.

이 기능은 휴대폰과 연결 환경에서 지원되는 디바이스에서만 사용할 수 있습니다.

이 설명서에서는 시나리오 요구 사항, 노출 영역 및 LAF(제한된 액세스 기능) 승인을 포함하여 휴대폰과 연결 작업 연속성 API와 앱을 통합하는 방법을 설명합니다.

휴대폰과 연결 대해 자세히 알아보세요. 스마트폰을 Windows 컴퓨터와 동기화합니다.

시나리오 요구 사항들

작업 연속성 API를 사용하면 Android 앱의 콘텐츠를 휴대폰과 연결 설정한 Windows PC로 동기화할 수 있습니다. 이 API에 대한 액세스 권한을 부여하려면 다음 조건을 충족해야 합니다.

  • Windows PC에서 액세스할 수 있는 유효한 URL인 웹 URL 동기화
  • Windows PC에서 액세스할 수 있는 클라우드 문서 링크 동기화
  • 애플리케이션을 통해 모바일 디바이스에서 액세스할 수 있어야 하는 Windows PC에 로컬 문서 링크 동기화
  • 분당 60회 이상 동기화 안 함
  • 사용자가 앱 환경에 참여하지 않는 경우 콘텐츠를 동기화하지 마세요.

휴대폰과 연결 앱 노드의 "최근에 사용한 항목" 및 "최근 웹 사이트" 및 알림 플라이아웃에서 동기화된 콘텐츠를 표시합니다.

최근에 사용한 앱 및 웹 사이트의 휴대폰과 연결 스크린샷

LAF(제한된 액세스 기능) 승인

휴대폰과 연결 작업 연속성은 LAF(제한된 액세스 기능)입니다. 이 API에 액세스하려면 Android 모바일 디바이스에 미리 로드된 "Windows와 연결" 패키지와 상호 운용하려면 Microsoft의 승인을 받아야 합니다.

액세스를 요청하려면 아래에 나열된 정보를 전자 메일 wincrossdeviceapi@microsoft.com 로 보냅니다.

  • 사용자 환경에 대한 설명
  • 사용자가 기본적으로 웹 또는 문서에 액세스하는 애플리케이션의 스크린샷
  • 애플리케이션의 PackageId
  • 애플리케이션에 대한 Google Play 스토어 링크

요청이 승인되면 기능 잠금을 해제하는 방법에 대한 지침을 받게 됩니다. 승인 시나리오가 충족되는 경우 통신을 기반으로 합니다.위에서 설명한 시나리오 요구 사항입니다.

데이터 처리

microsoft는 휴대폰과 연결 작업 연속성 API를 사용하여 Microsoft 서비스 계약Microsoft 개인정보처리방침에 따라 데이터를 처리하고 전송합니다. 사용자의 연결된 디바이스로 전송되는 데이터는 디바이스 간에 안정적인 데이터 전송을 보장하기 위해 Microsoft의 클라우드 서비스를 통해 처리될 수 있습니다. 이 API에서 처리하는 데이터는 최종 사용자 제어에 따라 Microsoft의 클라우드 서비스에서 유지되지 않습니다.

패키지에 통합할 디바이스 간 SDK는 API에 제공된 데이터가 신뢰할 수 있는 Microsoft 패키지에서만 처리되도록 합니다.

Android 모바일 앱을 휴대폰과 연결 작업 연속성 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(버전 [부].[ major])
엑스트라(번들) contentProviderUri content://com.microsoft.taskcontinuity/b695d1d8 각 패키지에 대해 고유하게 생성됩니다.
엑스트라(번들) requestedContextType 제공된 경우 요청된 앱 컨텍스트 유형을 나타냅니다. 이것은 이진 플래그입니다. 지금은 두 가지 유형이 있습니다... 애플리케이션 컨텍스트: 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을 사용하여 이전의 "브라우저 연속성" 기능과 호환되도록 추가된 또 다른 두 가지 방법이 추가되었습니다. 이 기능을 사용할 때 다음 값을 제공해야 합니다.

의도 필드
browserContextEmptyFlag [선택 사항] 브라우저 컨텍스트가 비어 있는지 여부를 나타내는 플래그입니다. 브라우저 연속성 기능에만 해당합니다.
browserHistory [선택 사항] 앱에 대한 검색 기록 컨텍스트입니다. 이 브라우저 연속성 기능에만 해당합니다. 현재는 최대 3개 URI를 제공하는 것이 좋습니다. 더 많은 항목이 제공되면 무시됩니다.

파트너 앱은 메서드를 호출 addBrowserContext 하여 브라우저 기록을 추가할 수 있습니다. 브라우저 기록을 추가할 때 다음 값을 제공해야 합니다.

browserWebUri PC의 브라우저에서 열리는 웹 URI입니다.
(http: 또는 https:)
title 웹 페이지의 제목.
timestamp 웹 페이지를 처음 열거나 마지막으로 새로 고친 타임스탬프입니다.
favIcon [선택 사항] 웹 페이지의 파비콘(바이트)은 일반적으로 작아야 합니다.

GitHub의 Windows 디바이스 간 리포지토리

GitHub의 Windows 장치 간 리포지토리에서 Windows 장치 간 SDK를 프로젝트에 통합하는 방법에 대한 정보를 찾습니다.

FAQ 목록은 휴대폰과 연결 질문과 대답을 참조하세요.