【React Native】文件翻譯閱讀紀錄 - APIs - Linking

by - 上午9:00

Facebook Open Source React Native
Linking

基本用法

處理深層鏈接

如果您的應用是從註冊到您應用的外部網址啟動的,則可以從您想要的任何組件訪問和處理它
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應用程序,則拒絕承諾。
參數:
NAMETYPEREQUIREDDESCRIPTION
urlstringYesThe URL to open.
如果系統不知道如何打開指定的URL,則此方法將失敗。如果您傳入的是非http(s)網址,最好首先檢查{@code canOpenURL}。
對於Web URL,必須相應地設置協議(“http://”,“https://”)!

canOpenURL()

canOpenURL(url);
確定已安裝的應用程序是否可以處理給定的URL。

該方法返回一個Promise對象。 當確定是否可以處理給定的URL時,解析承諾並且第一個參數是否可以打開它。
參數:
NAMETYPEREQUIREDDESCRIPTION
urlstringYesThe URL to open.
對於Web URL,必須相應地設置協議(“http://”,“https://”)!
從iOS 9開始,您的應用需要在Info.plist中提供LSApplicationQueriesSchemes鍵,否則canOpenURL將始終返回false。

getInitialURL()

getInitialURL();
如果應用程序啟動是由應用程序鏈接觸發的,它將提供鏈接URL,否則它將為null



You May Also Like

0 意見