Podaj cele udostępniania bezpośredniego

Rysunek 1. Wiersz bezpośredniego udostępniania w arkuszu udostępniania, co pokazuje 1

Aby ułatwić i szybciej korzystać z innych aplikacji, używaj celów bezpośredniego udostępniania aby udostępniać swojej aplikacji adresy URL, obrazy lub inne dane. Bezpośrednie udostępnianie działa prezentując kontakty z komunikatorów i aplikacji społecznościowych bezpośrednio na Androidzie arkusz udostępniania, dzięki któremu użytkownicy nie muszą wybierać aplikacji i wyszukiwać kontakt;

ShortcutManagerCompat to interfejs API AndroidaX, który udostępnia skróty do udostępniania zgodne z wycofanym interfejsem ChooserTargetService API. To jest preferowane sposób opublikowania skrótów do udostępniania i ChooserTargets. Instrukcje: Więcej informacji znajdziesz w sekcji Korzystanie z AndroidaX do obsługi skrótów udostępniania oraz wyboru celów. na tej stronie.

Opublikuj wartości docelowe bezpośredniego udostępniania

Wiersz bezpośredniego udostępniania w arkuszu udostępniania zawiera tylko dynamiczne skróty udostępniane przez Udostępnianie Skróty API. Aby opublikować cele udostępniania bezpośredniego:

  1. W pliku zasobów XML aplikacji zadeklaruj elementy 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. Podczas inicjowania aplikacji użyj setDynamicShortcuts aby uporządkować skróty dynamiczne według ważności.

    Niższy indeks oznacza większą ważność. Jeśli komunikujesz się w aplikacji, mogą to być najważniejsze rozmowy uporządkowane według czasu do aplikacji. Nie publikuj nieaktualnych skrótów; rozmowa bez aktywność użytkowników w ciągu ostatnich 30 dni jest uznawana za nieaktualną.

    Kotlin

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

    Java

    List<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    shortcuts.add(shortcut1);
    shortcuts.add(shortcut2);
    ...
    ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
  3. Jeśli tworzysz aplikację do komunikacji, zgłoś użycie skrótów w pushDynamicShortcut natychmiast za każdym razem, gdy użytkownik odbiera lub wysyła wiadomość do kontaktu. Zobacz Raport o użyciu skrótów dla aplikacji do komunikacji na tej stronie. Na przykład zgłoś użycie wiadomości wysyłanych przez użytkownika przez określ powiązania możliwości w skrócie za pomocą ShortcutInfoCompat.Builder#addCapabilityBinding z funkcją 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);
  4. Jeśli użytkownik usunie kontakt, użyj funkcji removeLongLivedShortcut To jest preferowane sposób usunięcia skrótu niezależnie od tego, czy jest on zapisany w pamięci podręcznej usług Google. Fragment kodu poniżej pokazuje przykładowy, jak to zrobić.

    Kotlin

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

    Java

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

Poprawianie pozycji docelowych w ramach funkcji bezpośredniego udostępniania

Arkusz udostępniania Androida pokazuje stałą liczbę celów bezpośredniego udostępniania. Te są sortowane według pozycji. Możesz potencjalnie poprawić pozycję swojej firmy w rankingu w następujący sposób:

  • Upewnij się, że wszystkie elementy shortcutIds są unikalne i nigdy nie były używane w różnych środowiskach docelowych.
  • Zadbaj o trwałość skrótu przez połączenie setLongLived(true)
  • W przypadku skrótów dotyczących rozmów zgłoś użycie skrótów dla wiadomości wychodzących i przychodzących przez ponowne opublikowanie odpowiednich skrótów do ShortcutManagerCompat.pushDynamicShortcut. Zobacz Zgłaszanie skrótów do aplikacji do komunikacji na tej stronie .
  • Unikaj podawania nietrafnych lub nieaktualnych celów bezpośredniego udziału, np. – kontakty, do których użytkownik nie wysłał w ciągu ostatnich 30 dni wiadomości.
  • W przypadku aplikacji do obsługi SMS-ów unikaj podawania skrótów do krótkich kodów lub rozmów. zidentyfikowanych jako potencjalny spam. Użytkownicy z dużym prawdopodobieństwem udostępnią dane tych rozmów.
  • Wywołaj setCategories(), aby powiązać skrót z odpowiednie mimeType . Przykład: w aplikacji do obsługi SMS-ów – jeśli kontakt nie obsługuje czatów RCS lub MMS-ów, kojarzyć odpowiedni skrót z typami MIME nietekstowymi, takimi jak image/* i video/*.
  • Po przekazaniu dynamicznego skrótu i zastosowaniu w danej rozmowie nie zmieniaj identyfikatora skrótu. Zapewni to przechowywanie danych o korzystaniu dotyczące pozycji w rankingu.

Jeśli użytkownik kliknie cel bezpośredniego udostępniania, aplikacja musi przenieść go do interfejsu, w którym mogą wykonać działanie bezpośrednio na obiekcie, na który są kierowane. Nie prezentuj użytkownik zobaczy interfejs ujednoznacznienia i nie umieszczaj go w interfejsie niepowiązanym z kliknij cel. Na przykład w aplikacji do obsługi wiadomości kliknięcie bezpośredniego udostępniania Kierowanie użytkownika do widoku rozmowy z wybraną osobą. klawiatura jest widoczna, a wiadomość jest wstępnie wypełniona udostępnionymi danymi.

Interfejs Shared Skróty API

Począwszy od Androida 10 (poziom interfejsu API 29): ShortcutInfo.Builder dodane metody i ulepszenia które zawierają dodatkowe informacje o docelowym udziale:

setCategories()
Począwszy od Androida 10 kategorie są też używane do filtrowania skrótów, które może obsługiwać intencje i działania związane z udostępnianiem. Przeczytaj sekcję Deklarowanie udostępnienia . To pole jest wymagane w przypadku skrótów do wykorzystania jako wartości docelowych udostępniania.
setLongLived()

Określa, czy skrót jest prawidłowy po cofnięciu jego publikacji lub stały się niewidoczne przez aplikację (jako skrót dynamiczny lub przypięty). Jeśli skrót może być przechowywana w pamięci podręcznej przez różne usługi systemowe, nawet jeśli została cofnięta jako skrót dynamiczny.

Długotrwałe zastosowanie skrótu może poprawić jego pozycję w rankingu. Zobacz najlepsze tytuły ranking, by dowiedzieć się więcej.

setShortLabel(), setLongLabel()

Przy publikowaniu skrótu dla pojedynczej osoby podaj pełne imię i nazwisko w języku setLongLabel() oraz dowolną krótką nazwę, np. pseudonim lub imię w języku: setShortLabel().

Zobacz przykład publikowania na GitHubie skrótów do udostępniania.

Dodaj zdjęcie skrótu

Aby utworzyć skrót do udostępniania, musisz dodać obraz za pomocą usługi setIcon().

Skróty udostępniania mogą wyświetlać się na platformach systemowych i mogą zmieniać ich kształt. Oprócz tego niektóre urządzenia z Androidem w wersji 7, 8 lub 9 (poziom interfejsu API 25, 26, 27 i 28) mogą wyświetlać ikony z bitmapą bez tła, co znacząco zmniejsza kontrast. Aby upewnić się, że skrót wygląda poprawnie, aby zapewnić adaptacyjną mapę bitową za pomocą interfejsu IconCompat.createWithAdaptiveBitmap().

Upewnij się, że adaptacyjne mapy bitowe są zgodne z wytycznymi i wymiarami ustawionymi dla ikon adaptacyjnych. Najczęstszym sposobem osiągnięcia tego celu jest skalowanie odpowiedniej mapy bitowej do 72 x 72 dp i środek na przezroczystym obszarze 108 x 108 dp. Jeśli ikona zawiera przezroczyste obszary, musisz dodać kolor tła; w przeciwnym razie, przezroczyste obszary są czarne.

Nie przesyłaj obrazów zamaskowanych do określonego kształtu. Na przykład przed Androida 10 (poziom interfejsu API 29) i na potrzeby bezpośredniego udostępniania najczęściej umieszczano awatary użytkowników. Elementy ChooserTarget, które zostały zamaskowane pod kątem okręgu. Arkusz udostępniania Androida i inne na platformach systemowych w Androidzie 10 są teraz dostępne w formie zdjęć skrótów do kształtów i motywów. Preferowana metoda udostępniania skrótów, przez ShortcutManagerCompat automatycznie kształtuj obiekty backcompat Bezpośrednie udostępnianie ChooserTarget kręgów dla Ciebie.

Deklarowanie celu udostępnienia

Cele udostępniania muszą być zadeklarowane w pliku zasobów aplikacji, podobnie jak w przypadku statycznych definicji skrótów. Dodaj udostępnienie definicje docelowe w elemencie głównym <shortcuts> w pliku zasobów, wraz z innymi statycznymi definicjami skrótów. Każdy element <share-targets> zawiera informacje o typie udostępnianych danych, kategorii dopasowania oraz klasa docelowa, która będzie obsługiwać intencję udostępniania. Kod XML wygląda podobny do tego:

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

Element danych w celu udziału jest podobny do specyfikacji danych w filtrze intencji. Każdy docelowy udział może mieć wiele kategorii, które służą wyłącznie do dopasowania do opublikowanych skrótów aplikacji. z definicjami miejsc docelowych udziału. Kategorie mogą mieć dowolne zdefiniowane aplikacje .

Jeśli użytkownik wybierze skrót udostępniania na karcie udostępniania na Androidzie, który odpowiada przykładowemu docelowi udostępniania powyżej, aplikacja otrzyma ten zamiar udostępniania:

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>

Jeśli użytkownik otworzy cel udostępniania za pomocą skrótów Menu z aplikacjami, intencja utworzona podczas dodawania skrótu do udostępniania Skrót ManagerCompat. Ponieważ ma to inną intencję, usługa Intent.EXTRA_SHORTCUT_ID nie będzie dostępna, i w razie potrzeby trzeba będzie przekazać go ręcznie.

Zgłaszanie użycia skrótów w aplikacjach do komunikacji

Jeśli tworzysz aplikację do komunikacji, możesz poprawić swoją pozycję w Arkusz udostępniania na Androidzie obejmujący raportowanie wykorzystania wiadomości wychodzących i przychodzących. Aby to zrobić, ponownie opublikuj skrót rozmowy reprezentujący kontakt za pomocą ShortcutManagerCompat.pushDynamicShortcut

Wykorzystanie skrótów i powiązania funkcji są zgodne wstecznie z Androidem 5.0 (API 21).

Zgłaszanie użycia skrótów do wiadomości wychodzących

Raportowanie wykorzystania wiadomości wysyłanych przez użytkownika działa podobnie jak klikając przycisk „Wyślij”, po utworzeniu wiadomości.

Aby aktywować raportowanie wykorzystania, określ powiązania możliwości w skrócie do ShortcutInfoCompat.Builder#addCapabilityBinding z funkcją 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);

Jeśli wiadomość wychodząca jest przeznaczona na czat grupowy, musisz też dodać Audience jako recipient jest powiązany z możliwością.

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

Zgłaszanie użycia skrótów do wiadomości przychodzących

Aby aktywować raportowanie użytkowania, gdy użytkownik otrzyma wiadomość, taką jak SMS, wiadomości czatu, e-maila lub powiadomień, należy dodatkowo określić możliwość w skrócie przez ShortcutInfoCompat.Builder#addCapabilityBinding z funkcję actions.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);

Jeśli wiadomość przychodząca pochodzi z czatu grupowego, musisz też dodać Audience jako typ sender. jest powiązana z daną funkcją.

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

Korzystaj z AndroidaX, aby udostępniać skróty do udostępniania i cele wyboru

Aby można było korzystać z biblioteki zgodności z AndroidemX, plik manifestu aplikacji musi zawierać zestaw meta-data selectr-target-service i intent-filters. Zapoznaj się z aktualnym interfejsem ChooserTargetService Direct Share API.

Ta usługa jest już zadeklarowana w bibliotece zgodności, więc użytkownik to robi nie muszą deklarować usługi w pliku manifestu aplikacji. Natomiast link z aktywność udostępniania w usłudze musi być uwzględniona jako cel wyboru dostawcy usług.

W poniższym przykładzie implementacja ChooserTargetService to androidx.core.content.pm.ChooserTargetServiceCompat, która jest już zdefiniowany W Androidzie X:

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

Najczęstsze pytania na temat udostępniania skrótów

Jak są przechowywane dane o korzystaniu ze skrótów i czy użytkownik opuszcza urządzenie?

Skróty są w całości zapisywane na urządzeniu w systemowym katalogu danych w zaszyfrowanej partycji dysku. informacje w skrótach, takie jak ikona, intencja, a nazwiska i nazwiska osób oraz zasobów są dostępne tylko dla usług systemowych, ta sama aplikacja, która publikuje skróty.

Jaka jest historia bezpośredniego udostępniania?

Wprowadziliśmy bezpośrednie udostępnianie w Androidzie 6.0 (poziom interfejsu API 23), aby umożliwić aplikacjom: dostarcza obiekty ChooserTarget za pomocą ChooserTargetService. Wyniki były pobierane w reakcji na żądanie, co powodowało długi czas wczytywania wartości docelowych.

W Androidzie 10 (poziom interfejsu API 29) zastąpiliśmy kartę ChooserTargetService Direct Udostępniaj interfejsy API nowemu interfejsowi Provisioning Shortcuts API. Zamiast pobierać wyniki reaktywnie na żądanie, interfejs Share Shortcuts API umożliwia publikowanie bezpośredniego udostępniania cele z wyprzedzeniem. To szybko przyspieszyło proces pobierania bezpośredniego udostępniania. podczas przygotowywania arkusza ShareSheet. Bezpośrednie udostępnianie ChooserTargetService będzie nadal działać, ale system będzie klasyfikować cele podane wartość niższą niż w przypadku jakiegokolwiek celu, który korzysta z interfejsu Share Shortcuts API.

Android 11 (poziom interfejsu API 30) wycofał usługę ChooserTargetService, Udostępnianie skrótów API to jedyny sposób określania celów bezpośredniego udostępniania.

Czym opublikowane skróty do celów udostępniania różnią się od programu uruchamiającego skrótów (typowe korzystanie ze skrótów po długim naciśnięciu ikon aplikacji program uruchamiający)?

Wszystkie skróty opublikowane dla „celu współdzielenia” jest również programem uruchamiającym i będzie widoczny w menu po przytrzymaniu ikony aplikacji. maksymalna liczba skrótów na działanie dotyczy również łącznej liczby skróty publikowane przez aplikację (udostępnianie celów i starszych skrótów programu uruchamiającego; łącznie).

Jaką liczbę skrótów do udostępniania należy opublikować?

Liczba skrótów udostępniania jest ograniczona do tego samego limitu dynamicznych skróty dostępne przez getMaxShortcutCountPerActivity(android.content.Context) Można publikować do tego limitu, ale należy pamiętać, że skróty udostępniania mogą być widoczne w Menu z aplikacjami i przytrzymaj go, a także w arkuszu udostępniania. Większość programów uruchamiających aplikacje jest włączona przytrzymanie może wyświetlić maksymalnie 4 lub 5 skrótów w trybie pionowym; 8 w trybie poziomym. Zobacz to Najczęstsze pytania , gdzie znajdziesz więcej informacji i wskazówek na temat udostępniania skrótów.