Przejdź do treści głównej
Wersja: 0.79

Łączenie

Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

Linking zapewnia ogólny interfejs do interakcji z przychodzącymi i wychodzącymi linkami w aplikacji.

Każdy link (URL) posiada schemat URL. Niektóre strony internetowe mają prefiks https:// lub http://, gdzie http to właśnie schemat URL. Dla uproszczenia nazywamy to schematem.

Oprócz https, prawdopodobnie znasz też schemat mailto. Kiedy otworzysz link z tym schematem, twój system operacyjny uruchomi zainstalowaną aplikację pocztową. Podobnie istnieją schematy do dzwonienia i wysyłania SMS-ów. Więcej o wbudowanych schematach URL poniżej.

Podobnie jak ze schematem mailto, możesz linkować do innych aplikacji używając niestandardowych schematów URL. Na przykład, gdy otrzymasz email ze Magic Link od Slacka, przycisk Launch Slack to znacznik kotwicy z href podobnym do: slack://secret/magic-login/other-secret. Tak jak ze Slackiem, możesz poinformować system operacyjny, że chcesz obsługiwać niestandardowy schemat. Gdy aplikacja Slack się otworzy, otrzyma URL użyty do jej uruchomienia. Nazywa się to deep linkingiem. Więcej o tym, jak pobrać deep link do swojej aplikacji.

Niestandardowy schemat URL to nie jedyny sposób otwierania aplikacji na urządzeniach mobilnych. Na przykład, gdy chcesz wysłać komuś link do otwarcia na mobile, użycie niestandardowego schematu nie jest idealne - użytkownik może otworzyć maila na desktopie, gdzie link nie zadziała. Zamiast tego użyj standardowych linków https jak https://www.myapp.io/records/1234546. Na urządzeniach mobilnych można je skonfigurować do otwierania aplikacji. W Androidzie funkcja nazywa się Deep Links, a w iOS Universal Links.

Wbudowane schematy URL

Jak wspomniano we wstępie, istnieją schematy URL dla podstawowych funkcji dostępne na każdej platformie. Poniższa lista nie jest kompletna, ale obejmuje najczęściej używane schematy.

SchemeDescriptioniOSAndroid
mailtoOpen mail app, eg: mailto: hello@world.dev
telOpen phone app, eg: tel:+123456789
smsOpen SMS app, eg: sms:+123456789
https / httpOpen web browser app, eg: https://expo.dev

Jeśli chcesz włączyć deep linki w swojej aplikacji, przeczytaj poniższy przewodnik:

For instructions on how to add support for deep linking on Android, refer to Enabling Deep Links for App Content - Add Intent Filters for Your Deep Links.

If you wish to receive the intent in an existing instance of MainActivity, you may set the launchMode of MainActivity to singleTask in AndroidManifest.xml. See <activity> documentation for more information.

xml
<activity
android:name=".MainActivity"
android:launchMode="singleTask">

Istnieją dwa sposoby obsługi URLi otwierających twoją aplikację.

1. Jeśli aplikacja jest już otwarta, zostaje wysunięta na pierwszy plan i wyzwalane jest zdarzenie 'url' w Linking

Możesz obsłużyć te zdarzenia za pomocą Linking.addEventListener('url', callback) - wywołuje callback({url}) z powiązanym URL

2. Jeśli aplikacja nie jest otwarta, zostaje uruchomiona z URL przekazanym jako initialURL

Możesz obsłużyć te zdarzenia za pomocą Linking.getInitialURL() - zwraca Promise, która rozwiązuje się do URL, jeśli istnieje.


Przykład

Otwieranie niestandardowych ustawień

Wysyłanie intencji (Android)

Dokumentacja

Metody

addEventListener()

tsx
static addEventListener(
type: 'url',
handler: (event: {url: string}) => void,
): EmitterSubscription;

Dodaj handler do zmian w Linking nasłuchując typu zdarzenia url i podając funkcję obsługi.


canOpenURL()

tsx
static canOpenURL(url: string): Promise<boolean>;

Sprawdza, czy zainstalowana aplikacja może obsłużyć podany URL.

Metoda zwraca obiekt Promise. Gdy zostanie określone, czy podany URL może być obsłużony, promise rozwiązuje się, a pierwszym parametrem jest wartość logiczna wskazująca, czy można go otworzyć.

Promise zostanie odrzucona w Androidzie, jeśli niemożliwe było sprawdzenie dostępności URL lub przy targetowaniu Androida 11 (SDK 30) bez podania odpowiednich zapytań intencji w AndroidManifest.xml. Podobnie w iOS, promise zostanie odrzucona bez podania konkretnego schematu w kluczu LSApplicationQueriesSchemes w Info.plist (patrz poniżej).

Parametry:

NameTypeDescription
url
Required
stringThe URL to open.

Dla adresów URL stron internetowych protokół ("http://", "https://") musi być odpowiednio ustawiony!

Ta metoda ma ograniczenia w iOS 9+. Z oficjalnej dokumentacji Apple:

  • Jeśli twoja aplikacja jest powiązana ze starszą wersją iOS, ale działa w iOS 9.0 lub nowszym, możesz wywołać tę metodę do 50 razy. Po osiągnięciu limitu kolejne wywołania zawsze zwrócą false. Jeśli użytkownik ponownie zainstaluje lub zaktualizuje aplikację, iOS zresetuje limit.

Od iOS 9 twoja aplikacja musi również zawierać klucz LSApplicationQueriesSchemes w Info.plist, w przeciwnym razie canOpenURL() zawsze zwróci false.

Przy targetowaniu Androida 11 (SDK 30) musisz określić intencje dla schematów, które chcesz obsługiwać w AndroidManifest.xml. Listę popularnych intencji można znaleźć tutaj.

Na przykład, aby obsługiwać schematy https, do manifestu należy dodać:

<manifest ...>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https"/>
</intent>
</queries>
</manifest>

getInitialURL()

tsx
static getInitialURL(): Promise<string | null>;

Jeśli uruchomienie aplikacji zostało wywołane przez link, metoda zwróci jego adres URL, w przeciwnym razie zwróci null.

Aby obsługiwać deep linking w Androidzie, zobacz https://developer.android.com/training/app-indexing/deep-linking.html#handling-intents

getInitialURL może zwrócić null, gdy zdalne debugowanie JS jest aktywne. Wyłącz debugger, aby mieć pewność, że zostanie przekazany.


openSettings()

tsx
static openSettings(): Promise<void>;

Otwiera aplikację Ustawienia i wyświetla niestandardowe ustawienia aplikacji, jeśli istnieją.


openURL()

tsx
static openURL(url: string): Promise<any>;

Próbuje otworzyć podany url w dowolnej zainstalowanej aplikacji.

Możesz użyć innych adresów URL, np. lokalizacji (np. "geo:37.484847,-122.148386" na Androidzie lub "https://maps.apple.com/?ll=37.484847,-122.148386" w iOS), kontaktów lub dowolnych innych URLi otwieranych przez zainstalowane aplikacje.

Metoda zwraca obiekt Promise. Jeśli użytkownik potwierdzi okno dialogowe lub URL otworzy się automatycznie, promise zostanie rozwiązane. Jeśli użytkownik anuluje okno dialogowe lub nie ma aplikacji obsługującej URL, promise zostanie odrzucone.

Parametry:

NameTypeDescription
url
Required
stringThe URL to open.

Ta metoda zakończy się niepowodzeniem, jeśli system nie wie, jak otworzyć podany URL. Jeśli przekazujesz URL inny niż http(s), najlepiej najpierw sprawdzić canOpenURL().

Dla adresów URL stron internetowych protokół ("http://", "https://") musi być odpowiednio ustawiony!

Ta metoda może zachowywać się inaczej w symulatorze. Na przykład linki "tel:" nie mogą być obsłużone w symulatorze iOS, ponieważ nie ma dostępu do aplikacji telefonicznej.


sendIntent()
Android

tsx
static sendIntent(
action: string,
extras?: Array<{key: string; value: string | number | boolean}>,
): Promise<void>;

Uruchamia intencję Androida z dodatkowymi parametrami.

Parametry:

NameType
action
Required
string
extrasArray<{key: string, value: string | number | boolean}>