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:
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>
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);
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);
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 odpowiedniemimeType
. 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 jakimage/*
ivideo/*
. - 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.