通过react-navigation设置打开APP的scheme
react-navigation官网(不知道什么时候更新了,我还在用1.5.11)[https://reactnavigation.org/docs/en/deep-linking.html]
一、ios
1. 设置path
(通过如path:"Complaint",则启动的时候是:你的scheme://Complaint)
配置path(具体语法可以参考官网):
const RouteConfigs = {
Complaint: {
screen: Complaint,//投诉
path: 'Complaint',
}
}
2. 设置URI Prefix
在react-navigation 入口处添加下面内容:
import {Platform} from "react-native";
const prefix = Platform.OS == 'android' ? 'mychat://mychat/' : 'mychat://';
//...others code
// 我的是在根目录下的app.js,<App/> 是我的入口
<App uriPrefix={prefix} />
3. 在xcode中打开AppDelegate.m
文件,如下图:
#import "AppDelegate.h"
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
// 在这里添加这句
#import <React/RCTLinkingManager.h>
@implementation AppDelegate
//省略其他的代码
// 在@end前台添加上下面这段
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [RCTLinkingManager application:application openURL:url
sourceApplication:sourceApplication annotation:annotation];
}
@end
4. 直接在模拟器上测试
-
react-native run-ios
; - xcrun simctl openurl booted zhlx://Complaint
输入内容回车即可:
二、Android
1. 对于Android的话,和ios有点不太一样,就是需要设置host,通过在APP入口文件添加的
const prefix = Platform.OS == 'android' ? 'mychat://mychat/' : 'mychat://';
有童鞋就已经猜出来了。
2. android/app/src/main/AndroidManifest.xml
中添加intent-filter
;
个人不懂Android(web前端),所以在使用的时候遇到了个坑,如下所示,我将官网让放的
intent-filter
放到了一个intent-filter
里面(示例1),结果运行打包什么的都没问题,但是打包成apk安装到手机后才发现APP的icon没了,桌面找不到,只能在设置里面看到,改为(示例2)后才正确使用。
示例1:
<intent-filter>
<!--这里是原来就有的-->
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<!--这里是react-navigation 让添加的-->
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="mychat" android:host="mychat"/>
</intent-filter>
示例2:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<!-- 这里添加 -->
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="mychat" android:host="mychat"/>
<!-- 这里结束 -->
</intent-filter>
官网截图:
3.运行程序测试
- 运行
react-native run-android
adb shell am start -W -a android.intent.action.VIEW -d "mychat://mychat/chat/Eric" com.simpleapp
mychat://mychat/chat/Eric 就是在浏览器或者其他外部打开并跳转到APP的链接;
大家可以对比参考ios和Android的scheme:
- ios:mychat://chat/Eric
- android :mychat://mychat/chat/Eric
end !