我已经为我的应用程序描述了一个深层链接意图。
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.appname"
>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme"
>
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustPan"
android:exported="true"
>
<!-- <scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>] -->
<intent-filter>
<!-- com.company.appname://logout-->
<data
android:scheme="com.company.appname"
android:host="logout"
/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
当我跑步时
npx uri-scheme open com.company.appname://logout --android
我收到此提示,似乎显示重复项。
在终端中运行
react-native info
并将结果复制到此处。
System:
OS: macOS 10.15.6
CPU: (16) x64 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
Memory: 4.25 GB / 32.00 GB
Shell: 5.7.1 - /bin/zsh
Binaries:
Node: 14.8.0 - /usr/local/bin/node
Yarn: 1.22.4 - /usr/local/bin/yarn
npm: 6.14.7 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.10.0. - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: iOS 14.3, DriverKit 20.2, macOS 11.1, tvOS 14.3, watchOS 7.2
Android SDK:
API Levels: 29
Build Tools: 29.0.3
System Images: android-29 | Google Play Intel x86 Atom
Android NDK: Not Found
IDEs:
Android Studio: 4.0 AI-193.6911.18.40.6626763
Xcode: 12.3/12C33 - /usr/bin/xcodebuild
Languages:
Java: 1.8.0_282 - /usr/bin/javac
Python: 2.7.16 - /usr/bin/python
npmPackages:
@react-native-community/cli: Not Found
react: ^17.0.1 => 17.0.1
react-native: 0.63.2 => 0.63.2
react-native-macos: Not Found
npmGlobalPackages:
*react-native*: Not Found
提供重现问题的步骤的详细列表。
npx uri-scheme open com.company.appname://logout --android
我希望能够在“打开方式”提示中看到一个选项。
我遇到的问题是第三方库覆盖了我的意图
该库是 https://github.com/FormidableLabs/react-native-app-auth
就我而言,切换
manifestPlaceholders
所示的逻辑这里
对于 AndroidManifest XML 中的硬编码 intent
来说,这是一种享受。 (https://github.com/openid/AppAuth-android#capturing-the-authorization-redirect)。
例如
<manifest ...
xmlns:tools="http://schemas.android.com/tools"
>
...
<activity
android:name="net.openid.appauth.RedirectUriReceiverActivity"
tools:node="replace">
<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="com.example.app"/>
</intent-filter>
</activity>
...
</manifest>
所以发生在我身上的是我的
<data android:scheme
引用了完整的包路径而不是“速记”方案 - 它来自我的 expo 的 app.json 和 android 构建。
因此,我确保主
src/main/AndroidManifest.xml
标签中的 manifest
有一个 package="com.fullpackagepath.specific_appname"
标签,然后我的方案标签仅引用该方案:<data android:scheme="specific_appname" />
。
还有我的博览会
app.json
:
{
"expo": {
name: "specific_appname",
slug: "specific_appname",
...
scheme: "specific_appname",
...
android: {
package: "com.fullpackagepath.specific_appname"
...
}
...
并不是说这是 100% 应该做的事情,只是我如何解决重复的“打开方式”窗口