Łączenie
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.
| Scheme | Description | iOS | Android |
|---|---|---|---|
mailto | Open mail app, eg: mailto: hello@world.dev | ✅ | ✅ |
tel | Open phone app, eg: tel:+123456789 | ✅ | ✅ |
sms | Open SMS app, eg: sms:+123456789 | ✅ | ✅ |
https / http | Open web browser app, eg: https://expo.dev | ✅ | ✅ |
Włączanie Deep Links
Jeśli chcesz włączyć deep linki w swojej aplikacji, przeczytaj poniższy przewodnik:
- Android
- iOS
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.
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
NOTE: On iOS, you'll need to add the
LinkingIOSfolder into your header search paths as described in step 3 here. If you also want to listen to incoming app links during your app's execution, you'll need to add the following lines to your*AppDelegate.m:
// iOS 9.x or newer
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}
If you're targeting iOS 8.x or older, you can use the following code instead:
// iOS 8.x or older
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [RCTLinkingManager application:application openURL:url
sourceApplication:sourceApplication annotation:annotation];
}
If your app is using Universal Links, you'll need to add the following code as well:
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
Obsługa Deep Links
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 linków i Deep Links (Universal Links)
- TypeScript
- JavaScript
Otwieranie niestandardowych ustawień
- TypeScript
- JavaScript
Pobieranie Deep Link
- TypeScript
- JavaScript
Wysyłanie intencji (Android)
- TypeScript
- JavaScript
Dokumentacja
Metody
addEventListener()
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()
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:
| Name | Type | Description |
|---|---|---|
| url Required | string | The 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
LSApplicationQueriesSchemeswInfo.plist, w przeciwnym raziecanOpenURL()zawsze zwrócifalse.
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()
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()
static openSettings(): Promise<void>;
Otwiera aplikację Ustawienia i wyświetla niestandardowe ustawienia aplikacji, jeśli istnieją.
openURL()
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:
| Name | Type | Description |
|---|---|---|
| url Required | string | The 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
static sendIntent(
action: string,
extras?: Array<{key: string; value: string | number | boolean}>,
): Promise<void>;
Uruchamia intencję Androida z dodatkowymi parametrami.
Parametry:
| Name | Type |
|---|---|
| action Required | string |
| extras | Array<{key: string, value: string | number | boolean}> |