React-Native [ANDROID] 深度链接“打开方式”重复项

问题描述 投票:0回答:2

描述

我已经为我的应用程序描述了一个深层链接意图。

<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

我收到此提示,似乎显示重复项。 Screenshot_1613643017

React Native 版本:

在终端中运行

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

重现步骤

提供重现问题的步骤的详细列表。

  1. 配置AndroidManifest和我的一样
  2. 奔跑
    npx uri-scheme open com.company.appname://logout --android

预期结果

我希望能够在“打开方式”提示中看到一个选项。

android reactjs react-native deep-linking
2个回答
0
投票

我遇到的问题是第三方库覆盖了我的意图

该库是 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>

0
投票

所以发生在我身上的是我的

<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% 应该做的事情,只是我如何解决重复的“打开方式”窗口

© www.soinside.com 2019 - 2024. All rights reserved.