【React Native】文件翻譯閱讀紀錄 - APIs - Linking
Facebook Open Source React Native |
基本用法
處理深層鏈接
如果您的應用是從註冊到您應用的外部網址啟動的,則可以從您想要的任何組件訪問和處理它
componentDidMount() {
Linking.getInitialURL().then((url) => {
if (url) {
console.log('Initial url is: ' + url);
}
}).catch(err => console.error('An error occurred', err));
}
有關如何在Android上添加對深層鏈接的支持的說明,請參閱 為應用內容啟用深層鏈接 - 為深層鏈接添加意圖過濾器。
如果您希望在MainActivity的現有實例中接收意圖,可以在AndroidManifest.xml中將MainActivity的launchMode設置為singleTask。有關更多信息,請參閱<activity>文檔。
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
注意:在iOS上,您需要按照此處描述的步驟將RCTLinking鏈接到項目。如果您還想在應用程序執行期間收聽傳入的應用程序鏈接,則需要將以下行添加到* 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];
}
如果您的目標是iOS 8.x或更早版本,則可以使用以下代碼:
// 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];
}
如果您的應用使用的是Universal Links,則還需要添加以下代碼:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
然後在您的React組件上,您將能夠按如下方式收聽鏈接上的事件
componentDidMount() {
Linking.addEventListener('url', this._handleOpenURL);
},
componentWillUnmount() {
Linking.removeEventListener('url', this._handleOpenURL);
},
_handleOpenURL(event) {
console.log(event.url);
}
打開外部鏈接
要開始鏈接的相應活動 (web URL, email, contact etc.), call
Linking.openURL(url).catch(err => console.error('An error occurred', err));
如果您想檢查任何已安裝的應用程序是否可以事先處理給定的URL,您可以調用
Linking.canOpenURL(url).then(supported => {
if (!supported) {
console.log('Can\'t handle url: ' + url);
} else {
return Linking.openURL(url);
}
}).catch(err => console.error('An error occurred', err));
Methods
參考
Methods
constructor()
constructor();
addEventListener()
addEventListener(type, handler);
通過偵聽url事件類型並提供處理程序,為處理更改添加處理程序
removeEventListener()
removeEventListener(type, handler);
通過傳遞url事件類型和處理程序來刪除處理程序
openURL()
openURL(url);
嘗試使用任何已安裝的應用打開給定的網址。
您可以使用其他網址,例如位置(例如Android上的“geo:37.484847,-122.148386”或iOS上的“http://maps.apple.com/?ll=37.484847,122.148386”),聯繫人或任何可以使用已安裝的應用程序打開的其他URL。
該方法返回一個Promise對象。如果用戶確認打開的對話框或網址自動打開,則承諾得到解決。如果用戶取消打開的對話框或者沒有註冊的URL應用程序,則拒絕承諾。
您可以使用其他網址,例如位置(例如Android上的“geo:37.484847,-122.148386”或iOS上的“http://maps.apple.com/?ll=37.484847,122.148386”),聯繫人或任何可以使用已安裝的應用程序打開的其他URL。
該方法返回一個Promise對象。如果用戶確認打開的對話框或網址自動打開,則承諾得到解決。如果用戶取消打開的對話框或者沒有註冊的URL應用程序,則拒絕承諾。
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
url | string | Yes | The URL to open. |
如果系統不知道如何打開指定的URL,則此方法將失敗。如果您傳入的是非http(s)網址,最好首先檢查{@code canOpenURL}。
對於Web URL,必須相應地設置協議(“http://”,“https://”)!
canOpenURL()
canOpenURL(url);
確定已安裝的應用程序是否可以處理給定的URL。
該方法返回一個Promise對象。 當確定是否可以處理給定的URL時,解析承諾並且第一個參數是否可以打開它。
該方法返回一個Promise對象。 當確定是否可以處理給定的URL時,解析承諾並且第一個參數是否可以打開它。
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
url | string | Yes | The URL to open. |
對於Web URL,必須相應地設置協議(“http://”,“https://”)!
從iOS 9開始,您的應用需要在Info.plist中提供LSApplicationQueriesSchemes鍵,否則canOpenURL將始終返回false。
getInitialURL()
getInitialURL();
如果應用程序啟動是由應用程序鏈接觸發的,它將提供鏈接URL,否則它將為null
0 意見