直接共有ターゲットを提供する

<ph type="x-smartling-placeholder">
</ph>
図 1: Sharesheet の直接共有行(1 で表示)

直接共有ターゲットを使用して、他のアプリのユーザーが簡単かつ迅速に行えるようにする を使用して、URL や画像などのデータをアプリと共有します。直接共有の仕組み メッセージやソーシャル アプリの連絡先を Android のスマートフォンに直接表示できます Sharesheet。ユーザーはアプリを選択して連絡先を検索する必要がありません。

ShortcutManagerCompat 共有ショートカットを提供する AndroidX API です。 非推奨の ChooserTargetService API と互換性があります。この方法は、 共有ショートカットと ChooserTargets の両方を公開できます。手順については、 AndroidX を使用して共有ショートカットと ChooserTargets の両方を提供するをご覧ください。 ご覧ください

ダイレクト シェア ターゲットを公開する

Sharesheet ダイレクト シェアの行には、Google Chat によって提供される動的ショートカットのみが表示されます。 ショートカット共有 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 を使用する 重要性順に動的ショートカットを 並べ替えることができます

    インデックスが小さいほど、重要度が高くなります。個人または少人数のグループに 上位の会話を新しい順に並べて表示できます。 説明します。使われていないショートカットを公開しない会話を 過去 30 日間のユーザー アクションは、古いものとみなされます。

    Kotlin

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

    Java

    List<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    shortcuts.add(shortcut1);
    shortcuts.add(shortcut2);
    ...
    ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
    
  3. 通信アプリを開発している場合は、 ユーザーがアクセスするたびに直ちに pushDynamicShortcut 連絡先との間でメッセージを送受信します。ショートカットの使用状況をレポート: 通信アプリをご覧ください。たとえば、ユーザーが送信したメッセージの使用状況を ショートカットの ShortcutInfoCompat.Builder#addCapabilityBindingactions.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)
    

    Java

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

    Java

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

直接共有ターゲットのランキングを改善する

Android Sharesheet には、一定数のダイレクト シェア ターゲットが表示されます。これらの 提案はランク順に並べられます。サイトの掲載順位を上げるには、 ショートカットを作成します。

  • すべての shortcutIds が一意であり、異なるターゲットで再利用されないようにします。
  • 次の呼び出しによってショートカットが長く存続するようにする setLongLived(true)
  • 会話に関連するショートカットについて、ショートカットの使用状況を報告します 対応するショートカットを再公開して ShortcutManagerCompat.pushDynamicShortcut を使用します。 詳しくは、通信アプリのショートカットの使用状況を報告するをご覧ください。 ページをご覧ください。
  • 無関係な直接共有ターゲットや最新でない直接共有ターゲットは指定しないでください。たとえば、 ユーザーが過去 30 日間にメッセージを送信していない連絡先
  • SMS アプリでは、ショートコードや会話のショートカットは提供しないでください 迷惑メールの可能性があると判断されました。ユーザーがこの脆弱性を悪用する可能性は、 会話に集中できます。
  • setCategories() を呼び出して、ショートカットを 該当する mimeType できます。たとえば 連絡先が RCS または MMS に対応していない場合、 対応するショートカットを、次のような非テキスト MIME タイプに関連付けます。 image/*video/*
  • 特定の会話で、動的ショートカットがプッシュされて使用されると、 ショートカット ID は変更しないでください。これにより、使用状況データが確実に おすすめします

ユーザーがダイレクト共有ターゲットをタップした場合、アプリはユーザーを ターゲットのサブジェクトに対して直接アクションを実行できます。表示しない 曖昧性除去の UI に配置する必要があります。 タップしたターゲットです。たとえば、メッセージ アプリでダイレクト シェアの target は、選択したユーザーとの会話ビューにユーザーを誘導します。「 キーボードが表示され、メッセージには共有データが事前入力されます。

Sharing Shortcuts API

Android 10(API レベル 29)以降では、 ShortcutInfo.Builder がメソッドと機能強化を追加しました には、共有ターゲットに関する追加情報を提供します。

setCategories()
Android 10 以降では、カテゴリを使用して、特定のスレッドでの 共有インテントまたはアクションを処理できます。共有の宣言をご覧ください。 target をご覧ください。ショートカットには必須です 共有ターゲットとして使用します。
setLongLived()

公開停止になったショートカットを有効にするかどうかを指定する (動的ショートカットまたは固定ショートカットとして)アプリによって非表示になります。ショートカットが 保存されていても、さまざまなシステム サービスによってキャッシュに保存される 動的ショートカットとしての公開が停止されました

ショートカットを長期にわたって維持すると、ランキングが向上します。Google ランキングをご覧ください。

setShortLabel()setLongLabel()

ショートカットを個々のユーザーに公開する場合は、 setLongLabel() の名前と任意の略称(ニックネームやファースト ネームなど) 名前(setShortLabel() 内)。

GitHub で共有ショートカットを公開している例をご覧ください。

ショートカット画像を提供する

共有ショートカットを作成するには、setIcon() で画像を追加する必要があります。

共有ショートカットはさまざまなシステム サーフェスに表示されることがあり、形状が変わることもあります。 また、Android バージョン 7、8、9(API レベル 25、 (26、27、28)を使用すると、背景のないビットマップのみのアイコンが表示される可能性があります。 大幅に低下させます意図したとおりのショートカットを表示するために アダプティブ ビットマップを指定するには、IconCompat.createWithAdaptiveBitmap() を使用します。

アダプティブ ビットマップがアダプティブ アイコンに適用されるガイドラインとサイズと同じになるようにしてください。 これを実現する最も一般的な方法は、目的の正方形のビットマップを 72 x 72 dp、それを 108 x 108 dp の透明なキャンバスの中央に配置する。アイコンが 透明な領域を含める場合は 背景色を含める必要がありますそれ以外の場合 透明な領域が黒く表示されます。

特定の形状にマスキングした画像を提供しないようにしてください。たとえば 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 内で上記の <share-target> 例と合致する共有ショートカットをユーザーが選択した場合、アプリは次の共有インテントを取得します。

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)

Java

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)

Java

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)

Java

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)

Java

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 を使用して共有ショートカットと ChooserTarget の両方を提供する

AndroidX 互換性ライブラリを使用できるようにするには、アプリのマニフェストを メタデータの Chooser-target-service と intent-filter のセットが含まれている必要があります。詳しくは、 現在の 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>

共有ショートカットに関するよくある質問

ショートカットの使用状況データはどのように保存され、デバイス外に保持されますか?

ショートカットは完全にデバイス上のシステムデータ ディレクトリに保存され、 作成します。ショートカット内の情報(アイコン、インテント、 システム サービスとリソースのみがアクセスできる ショートカットを公開しているのと同じアプリです

直接共有の歴史

Android 6.0(API レベル 23)で導入されたダイレクト シェアを使用すると、 ChooserTargetService を通じて ChooserTarget オブジェクトを提供します。結果: 事後対応的にオンデマンドで取得できるため、ターゲットの読み込みに時間がかかります。

Android 10(API レベル 29)では、ChooserTargetService Direct は 新しい Sharing Shortcuts API で API を共有します。結果を取得する代わりに Shared Shortcuts API を使用すると、アプリでダイレクト シェアを 事前にターゲットを絞ることも できますこれにより、直接共有を取得するプロセスが迅速になりました。 ShareSheet を準備する際にターゲットを指定します。ChooserTargetService 直接共有 機能し続けますが、システムは指定されたターゲットを Sharing Shortcuts API を使用するどのターゲットよりも低く抑えられます。

Android 11(API レベル 30)では、ChooserTargetService サービスが非推奨になりました。 ショートカットの共有 API は、ダイレクト シェア ターゲットを提供する唯一の方法です。

共有ターゲットの公開ショートカットとランチャーの違い ショートカット(Google Chat 内でアプリアイコンを長押ししたときの一般的なショートカットの使い方)

「共有ターゲット」の目的で公開されているショートカットは、すべてランチャーのショートカットでもあり、アプリアイコンを長押しするとメニュー内に表示されます。アクティビティごとの最大ショートカット数の制限は、アプリが公開しているショートカットの総数(共有ターゲットと旧式のランチャー ショートカットの合計)にも適用されます。

公開する必要がある共有ショートカットの数に関するガイダンスはどのようなものですか。

共有ショートカットの数は、動的な ショートカットを getMaxShortcutCountPerActivity(android.content.Context)。1 つのプロジェクトで ただし、共有ショートカットは表示可能で、 長押しして共有シートに表示されます。ほとんどのアプリ ランチャーがオン 縦表示で最大 4 つまたは 5 つのショートカットを長押し表示する 横表示では 8 文字こちらを参照 よくある質問 をご覧ください。