我们的 React Native Android 健康应用程序要求用户授权 Garmin 数据来跟踪他们的步数和健身情况。 Garmin 使用 OAuth 1.0 协议,因此在用户授权我们的应用程序访问后,我们需要重定向回我们的应用程序以处理 Garmin 在重定向 URL 中为我们提供的 oauth_verifier。当用户单击授予我们访问权限时,会弹出一个包含两个选项的模式 - 这两个选项都显示我们的应用程序名称和应用程序徽标。仅单击第二个重定向选项(标记为“在不同的应用程序中打开”)才会触发 React Native Linking 来处理完整的重定向 URL 并完成 OAuth 1.0 握手。
就在五月,这个流程正在按设计进行。不确定错误行为何时开始,因为我们很少有 Android 用户希望将他们的 Garmin 设备链接到该应用程序。
这个错误最初出现在今年春天,我可以通过在 AndroidManifest.xml 中的意图过滤器标记中添加主机来修复它
<!--OAuth Garmin URI Scheme-->
<intent-filter android:exported="true">
<!--Redirecting back to app after authorizing-->
<data android:scheme=com.wellnessapp.auth **android:host="garmin"**/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
清单中没有其他意图使用 com.wellnessapp.auth,并且该字符串出现的唯一其他位置是在我们的 build.gradle defaultConfig 对象中,其中
manifestPlaceholders = [appAuthRedirectScheme: com.wellnessapp.auth]
如果您在 Google Play 上分发,可以使用一个技巧来调试这种情况,即转到 Play Console 上的 Deeplinks 仪表板(它是侧栏上的一个选项)。
在该页面中,向下滚动到“Web 链接”并输入您要测试的 uri。它将显示与您的查询匹配的模式的每种组合;如果有不止一个,你就知道为什么 Android 给你两个选择了。