직접 공유 타겟 제공

그림 1: 1로 표시된 Sharesheet의 직접 공유 행

다른 앱 사용자가 더 쉽고 빠르게 사용할 수 있도록 직접 공유 타겟을 사용하세요. URL, 이미지 또는 다른 종류의 데이터를 앱과 공유할 수 있습니다. 직접 공유 작동 Android에서 메시지 및 소셜 앱의 연락처를 바로 표시 Sharesheet, 사용자가 앱을 선택한 후 연락처를 검색하지 않아도 됨

ShortcutManagerCompat 드림 공유 바로가기를 제공하는 AndroidX API이며 지원 중단된 ChooserTargetService API와 호환됩니다. 선호 공유 바로가기와 ChooserTargets을 모두 게시하는 방법입니다. 자세한 내용은 AndroidX를 사용하여 공유 바로가기와 선택기 타겟 모두 제공을 참고하세요. 이 페이지에 나와 있습니다.

직접 공유 타겟 게시하기

Sharesheet 직접 공유 행에는 공유 바로가기 API 직접 공유를 게시하려면 다음 단계를 완료하세요. 있습니다

  1. 앱의 XML 리소스 파일에서 share-target 요소를 선언합니다.

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity">
        <data android:mimeType="text/plain" />
        <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" />
    </share-target>
    </shortcuts>
    
  2. 앱이 초기화될 때 setDynamicShortcuts 사용 중요도에 따라 동적 바로가기를 정렬합니다.

    지수가 낮을수록 중요도가 더 높습니다. 이해관계자와 소통하고 있는 경우 앱에 표시되는 인기 대화가 최신순으로 정렬될 수 있습니다. 있습니다. 오래된 바로가기는 게시하지 마세요. 없는 대화 비활성으로 간주됩니다.

    Kotlin

    ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))
    

    자바

    List<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    shortcuts.add(shortcut1);
    shortcuts.add(shortcut2);
    ...
    ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
    
    
  3. 커뮤니케이션 앱을 개발하는 경우 다음을 통해 바로가기 사용 보고 사용자가 매번 pushDynamicShortcut 메시지를 받거나 연락처로 전송합니다. 다음의 바로가기 사용 보고: 커뮤니케이션 앱을 참고하세요. 예를 들어 단축키에 기능 결합을 지정하여 ShortcutInfoCompat.Builder#addCapabilityBinding 드림 actions.intent.SEND_MESSAGE 기능 사용

    Kotlin

    val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
      ...
      .setShortLabel(firstName)
      .setLongLabel(fullName)
      .setCategories(matchedCategories)
      .setLongLived(true)
    .addCapabilityBinding("actions.intent.SEND_MESSAGE").build()
    ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
    

    자바

    ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
      ...
      .setShortLabel(firstName)
      .setLongLabel(fullName)
      .setCategories(matchedCategories)
      .setLongLived(true)
      .addCapabilityBinding("actions.intent.SEND_MESSAGE")
      .build();
    
    ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
    
  4. 사용자가 연락처를 삭제하는 경우 다음을 사용합니다. removeLongLivedShortcut 선호 시스템에 의해 캐시되었는지 여부와 관계없이 바로가기를 삭제하는 방법 제공합니다 다음 코드 스니펫은 이 작업을 실행하는 방법의 예를 보여줍니다.

    Kotlin

    val deleteShortcutId = "..."
    ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))
    

    자바

    String deleteShortcutId = "...";
    ShortcutManagerCompat.removeLongLivedShortcuts(
        myContext, Arrays.asList(deleteShortcutId));
    
    

직접 공유 타겟의 순위 향상

Android Sharesheet에는 정해진 수의 직접 공유 타겟이 표시됩니다. 이러한 추천은 순위를 기준으로 정렬됩니다 키워드 검색 결과 다음과 같은 방법을 사용합니다.

  • 모든 shortcutIds가 고유하고 여러 대상에 재사용되지 않는지 확인합니다.
  • 다음을 호출하여 바로가기가 오래 지속되는지 확인합니다. setLongLived(true)
  • 대화 관련 바로가기의 경우 바로가기 사용 보고 해당 바로가기를 다시 게시하여 발신 및 수신 메일에 적용 ShortcutManagerCompat.pushDynamicShortcut까지 자세한 내용은 커뮤니케이션 앱의 바로가기 사용 보고를 참고하세요. 페이지를 참조하세요.
  • 관련성 없거나 오래된 Direct Share 타겟을 제공하지 마세요. 예를 들어 사용자가 지난 30일 이내에 메시지를 보내지 않은 연락처가 여기에 해당합니다.
  • SMS 앱의 경우 쇼트 코드나 대화의 바로가기를 제공하지 마세요. 스팸일 가능성이 있는 것으로 파악되었습니다. 사용자가 공유할 가능성이 매우 낮음 확인할 수 있습니다.
  • setCategories()를 호출하여 바로가기를 적절한 mimeType 속성을 참고하세요. 예를 들어 SMS 앱의 경우, 연락처에서 RCS 또는 MMS를 사용할 수 없으면 해당 바로가기를 비텍스트 MIME 유형과 연결합니다. image/*video/*.
  • 특정 대화의 경우 동적 바로가기가 푸시되고 사용이 보고되면 바로가기 ID를 변경하지 마세요. 이를 통해 사용 데이터를 보관할 수 있습니다. 를 참조하세요.

사용자가 직접 공유 타겟을 탭하면 앱은 사용자를 대상의 주제에 대해 직접 작업을 수행할 수 있습니다. 사용자에게 명확성 UI를 표시하지 마세요. 탭한 타겟과 관련 없는 UI에 명확성 UI를 배치하지 마세요. 예를 들어 메시지 앱에서 직접 공유를 타겟은 사용자가 선택한 사람과의 대화 뷰로 이동합니다. 이 키보드가 표시되고 메시지가 공유 데이터로 미리 채워집니다.

Sharing Shortcuts API

Android 10 (API 수준 29)부터 ShortcutInfo.Builder님이 메서드와 개선사항을 추가했습니다. 공유 타겟에 대한 추가 정보 제공:

setCategories()
Android 10부터 공유 인텐트 또는 작업을 처리할 수 있는 바로가기를 필터링하는 데 카테고리도 사용됩니다. 공유 선언하기 대상을 참조하세요. 바로가기에 필수 입력란입니다. 공유 타겟으로 사용되어야 합니다.
setLongLived()

앱에서 동적 바로가기 또는 고정된 바로가기로 게시되지 않았거나 표시되지 않도록 설정된 경우에 바로가기가 유효한지 여부를 지정합니다. 단축키가 수명이 길기 때문에 동적 바로가기로 게시 취소되었습니다.

바로가기가 오래 지속되도록 하면 바로가기의 순위가 향상될 수 있습니다. 자세한 내용은 최고 순위 획득하기를 참고하세요.

setShortLabel(), setLongLabel()

개인 바로가기를 게시하는 경우 setLongLabel()에는 전체 이름을, setShortLabel()에는 닉네임이나 이름 같은 짧은 이름을 포함하세요.

GitHub에 공유 바로가기를 게시하는 예를 확인해 보세요.

바로가기 이미지 제공

공유 바로가기를 만들려면 setIcon()를 통해 이미지를 추가해야 합니다.

공유 바로가기는 시스템 화면 전체에서 표시할 수 있으며 그 형태를 변경할 수 있습니다. 또한 Android 버전 7, 8 또는 9(API 수준 25, 26, 27, 28)를 실행하는 일부 기기에서는 배경이 없는 비트맵 전용 아이콘을 표시할 수 있으며, 이로 인해 대비가 크게 감소합니다. 바로가기가 의도한 대로 표시되는지 확인하려면 IconCompat.createWithAdaptiveBitmap()를 사용하여 적응형 비트맵을 제공합니다.

적응형 비트맵은 적응형 아이콘의 가이드라인 및 측정기준 집합을 따라야 합니다. 이를 수행하는 가장 일반적인 방법은 원하는 정사각형 비트맵 크기를 72x72dp이고 108x108dp 투명 캔버스 안에 그 중심을 맞춥니다. 아이콘 투명 영역을 포함하는 경우 배경 색상을 포함해야 합니다. 그렇지 않으면 투명한 영역은 검은색으로 나타납니다.

특정 도형으로 마스킹된 이미지를 제공하지 마세요. 예를 들어 Android 10(API 수준 29) 이전에는 직접 공유 ChooserTarget과 관련하여 원으로 마스킹된 사용자 아바타를 제공하는 것이 일반적이었습니다. Android Sharesheet 및 기타 이제 Android 10의 시스템 표면에서 바로가기 이미지의 도형과 테마를 설정합니다. 공유 바로가기를 제공하는 데 선호되는 메서드인 ShortcutManagerCompat를 사용하면 이전 버전과 호환되는 직접 공유 ChooserTarget 객체의 모양을 원으로 자동 설정합니다.

공유 타겟 선언하기

정적 바로가기 정의와 마찬가지로 앱의 리소스 파일에서 공유 타겟을 선언해야 합니다. 공유 항목 추가 리소스 파일의 <shortcuts> 루트 요소 내부에 있는 타겟 정의 다른 정적 바로가기 정의와 함께 표시됩니다 각 <share-targets> 요소 여기에는 공유된 데이터 유형, 일치하는 카테고리, 대상 클래스를 정의합니다. XML 코드는 :

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity">
    <data android:mimeType="text/plain" />
    <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" />
  </share-target>
</shortcuts>

공유 타겟의 데이터 요소는 인텐트 필터의 데이터 사양과 비슷합니다. 각 공유 타겟에는 앱의 게시된 바로가기와 일치시키는 데만 사용되는 여러 카테고리 공유 타겟 정의가 있어야 합니다 카테고리에는 임의의 앱 정의가 포함될 수 있음 값으로 사용됩니다.

사용자가 Android Sharesheet에서 위의 타겟 공유 예와 일치하는 공유 바로가기를 선택하는 경우 앱은 다음과 같은 공유 인텐트를 가져옵니다.

Action: Intent.ACTION_SEND
ComponentName: {com.example.android.sharingshortcuts /
                com.example.android.sharingshortcuts.SendMessageActivity}
Data: Uri to the shared content
EXTRA_SHORTCUT_ID: <ID of the selected shortcut>

사용자가 런처 바로가기에서 공유 타겟을 열면 앱은 공유 바로가기를 추가할 때 생성된 인텐트를 ShortcutManagerCompat와 같은 다른 버전의 단축키를 사용할 수 있습니다. 인텐트가 다르기 때문에 Intent.EXTRA_SHORTCUT_ID는 사용할 수 없습니다. 필요한 경우 ID를 수동으로 전달해야 합니다.

커뮤니케이션 앱의 바로가기 사용 보고

커뮤니케이션 앱을 개발하는 경우 Android Sharesheet: 발신 및 수신 메시지 모두의 사용량을 보고하여 이렇게 하려면 다음을 통해 연락처를 나타내는 대화 바로가기를 다시 게시하세요. ShortcutManagerCompat.pushDynamicShortcut

바로가기 사용 및 기능 결합은 Android 5.0과 호환됩니다. (API 21).

발신 메일에 대한 바로가기 사용 보고

사용자가 보낸 메시지 사용량 보고는 기능적으로 다음과 유사합니다. '보내기'를 클릭하고 버튼을 클릭합니다.

사용량 보고를 트리거하려면 바로가기에서 기능 결합을 지정하세요. ShortcutInfoCompat.Builder#addCapabilityBinding까지 actions.intent.SEND_MESSAGE 기능 사용

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
.addCapabilityBinding("actions.intent.SEND_MESSAGE").build()
ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

자바

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE")
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

발신 메시지가 그룹 채팅용인 경우 Audience도 추가해야 합니다. 매개변수 값을 recipient로 지정 기능과 관련되어 있습니다

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", listOf("Audience")).build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

자바

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", Arrays.asList("Audience"))
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

수신 메시지의 바로가기 사용 보고

사용자가 SMS와 같은 메시지를 받을 때 사용량 보고를 트리거하려면 다음 안내를 따르세요. 채팅 메시지, 이메일 또는 알림의 경우 기능을 추가로 지정해야 합니다. 바로 가기에서 바인딩을 ShortcutInfoCompat.Builder#addCapabilityBindingactions.intent.RECEIVE_MESSAGE 기능

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE").build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

자바

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE")
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

그룹 채팅을 통해 받은 메시지의 경우 Audience도 추가해야 합니다. 매개변수 값(sender 유형) 기능과 관련이 있습니다

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", listOf("Audience")).build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

자바

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", Arrays.asList("Audience"))
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

AndroidX를 사용하여 공유 바로가기와 ChooserTargets 모두 제공하기

AndroidX 호환성 라이브러리로 작업하려면 앱 매니페스트에 메타데이터 선택기 타겟 서비스와 인텐트 필터 집합이 포함되어 있어야 합니다. 자세한 내용은 현재 ChooserTargetService Direct Share API

이 서비스는 호환성 라이브러리에 이미 선언되어 있으므로 사용자는 앱의 매니페스트에서 서비스를 선언할 필요가 없습니다. 그러나 서비스에 대한 공유 활동이 선택기 타겟으로 고려되어야 함 제공업체

다음 예에서 ChooserTargetService 구현은 다음과 같습니다. androidx.core.content.pm.ChooserTargetServiceCompat - 이미 정의되어 있음 : AndroidX:

<activity
    android:name=".SendMessageActivity"
    android:label="@string/app_name"
    android:theme="@style/SharingShortcutsDialogTheme">
    <!-- This activity can respond to Intents of type SEND -->
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <!-- Only needed if you import the sharetarget AndroidX library that
         provides backwards compatibility with the old DirectShare API.
         The activity that receives the Sharing Shortcut intent needs to be
         taken into account with this chooser target provider. -->
    <meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value="androidx.sharetarget.ChooserTargetServiceCompat" />
</activity>

공유 바로가기 FAQ

바로가기 사용 데이터는 어떻게 저장되며 기기 외부로 전송되나요?

바로 가기는 기기 내의 시스템 데이터 디렉터리에 완전히 암호화합니다. 바로가기에 포함된 정보(예: 아이콘, 인텐트, 사람과 리소스의 이름은 시스템 서비스에서만 액세스할 수 있고 바로가기를 게시하는 것입니다.

직접 공유의 역사는 어떻게 되나요?

직접 공유는 Android 6.0 (API 수준 23)에 도입되어 앱에서 ChooserTargetService를 통해 ChooserTarget 객체를 제공합니다. 결과: 요청에 따라 사후 대응적으로 검색되어 타겟의 로드가 느려집니다.

Android 10 (API 수준 29)에서는 ChooserTargetService Direct를 대체했습니다. 새로운 Sharing Shortcuts API로 API를 공유하세요. 결과를 가져오는 대신 요청 시 사후 대응적으로 공유 바로가기 API를 사용하면 앱에서 직접 공유를 게시할 수 있습니다. 계획할 수 있습니다 이로 인해 직접 공유 검색 프로세스가 빠르게 빨라졌습니다. 타겟의 범위를 지정합니다. ChooserTargetService 직접 공유 이 메커니즘은 계속 작동하지만 시스템은 지정된 타겟의 순위를 공유 바로가기 API를 사용하는 어떤 대상보다 낮은 수준이 될 수 있습니다.

Android 11 (API 수준 30)에서는 ChooserTargetService 서비스가 지원 중단되었습니다. 공유 바로가기 API를 통해서만 직접 공유 타겟을 제공할 수 있습니다.

공유 타겟에 대해 게시된 바로가기와 런처의 차이점 바로 가기 (앱 아이콘을 길게 누를 때 일반적으로 사용되는 런처)?

'공유 대상'에 대해 게시된 모든 바로가기 또 다른 용도이며 앱 아이콘을 길게 누르면 메뉴에 표시됩니다. 이 활동별 최대 바로가기 개수 제한은 앱이 게시하는 바로가기 (타겟 및 기존 런처 바로가기 공유) 합)

게시해야 하는 공유 바로가기 수에 관한 안내는 무엇인가요?

공유 바로가기 수는 동일한 동적 한도로 제한됩니다. 단축키 목록을 getMaxShortcutCountPerActivity(android.content.Context) 사용자는 원하는 몇 개나 될 수도 있지만, 공유 바로가기는 눈에 잘 띄도록 공유 시트에서 길게 누른 다음 대부분의 앱 런처는 길게 누르기가 세로 모드에서 최대 4~5개의 바로 가기를 표시하고 8개가 가로 모드로 표시됩니다. 보기 FAQ 에서 바로가기 공유에 관한 자세한 내용과 안내를 확인하세요.