Android 深度 link OAuth 回调 URI 无效
Android deep link for OAuth callback URI not working
我正在尝试在非常基本的 Android 应用程序中使用隐式深度 link。目标是使用 Strava 的 OAuth 服务器演示基本的 OAuth 流程以访问其 API.
Strava 自动将 'localhost' 加上您在注册 'app' 时输入的任何授权回调域列入白名单。我依赖本地主机。
我有一个 activity 加上一些片段。在 Android Studio 中,我向非初始片段添加了深度 link。我的初始片段要求输入登录名和密码,然后创建一个 IntentUri 来访问 Strava OAuth 服务器。这一切顺利,它在 OAuth 请求中传递回调 URI 以及授权请求。问题是回调URI没有深入link.
我尝试了几种回调 URI 的组合:
- http:///localhost/fibonacci/itemFragment
- localhost/fibonacci/itemFragment
- 我的应用程序://localhost/fibonacci/itemFragment
None 这些工作(是的,我总是在 OAuth 请求和 xml 中同时更新描述深度 link 的 URI。
- 回调 URI 触发打开浏览器的请求。
- Strava 站点将回调 uri 标记为无效。
- 回调似乎没有发生。
我也尝试通过创建快捷方式对此进行测试,但在每个浏览器中都会尝试打开快捷方式。
下面是我的 android 清单文件、我的 shortcuts.xml 文件和我的 nav_graph.xml.
即使 Strava 出于某种原因无法工作,我至少应该能够使用快捷方式。
感谢任何帮助。
--------------------AndroidManifest.xml-------------------- ------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fibonacci">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Fibonacci">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Fibonacci.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
</application>
</manifest>
------------------------shortcuts.xml-------------------- ------------------
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="RichShortcut"
android:enabled="true"
android:shortcutShortLabel="@string/static_shortcut_label_short"
android:shortcutLongLabel="@string/static_shortcut_label_long"
android:shortcutDisabledMessage=
"@string/static_shortcut_disabled_message">
<!-- android:icon="@drawable/donut_with_sprinkles">-->
<intent
android:action="android.intent.action.VIEW"
android:data="myapp://localhost/fibonacci/itemFragment" />
</shortcut>
</shortcuts>
------------------------nav_graph.xml---------------- ----------------------
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/FirstFragment"
android:name="com.example.fibonacci.FirstFragment"
android:label="@string/first_fragment_label"
tools:layout="@layout/fragment_first">
<action
android:id="@+id/action_FirstFragment_to_SecondFragment"
app:destination="@id/SecondFragment" />
</fragment>
<fragment
android:id="@+id/SecondFragment"
android:name="com.example.fibonacci.SecondFragment"
android:label="@string/second_fragment_label"
tools:layout="@layout/fragment_second">
<action
android:id="@+id/action_SecondFragment_to_FirstFragment"
app:destination="@id/FirstFragment" />
</fragment>
<fragment
android:id="@+id/loginFragment"
android:name="com.example.fibonacci.ui.login.LoginFragment"
android:label="fragment_login"
tools:layout="@layout/fragment_login" />
<fragment
android:id="@+id/itemFragment"
android:name="com.example.fibonacci.ItemFragment"
android:label="fragment_item_list"
tools:layout="@layout/fragment_item_list">
<deepLink
android:id="@+id/deepLink"
app:uri="myapp://localhost/fibonacci/itemFragment" />
</fragment>
</navigation>
您尚未在清单的导航图中注册 <deepLink>
,因此它永远不会被 Android OS.
触发
根据 implicit deep link documentation:
To enable implicit deep linking, you must also make additions to your app's manifest.xml file. Add a single <nav-graph>
element to an activity that points to an existing navigation graph, as shown in the following example:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Fibonacci.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
<!-- This line is what adds the correct intent filter for your deepLink -->
<nav-graph android:value="@navigation/nav_graph" />
</activity>
我正在尝试在非常基本的 Android 应用程序中使用隐式深度 link。目标是使用 Strava 的 OAuth 服务器演示基本的 OAuth 流程以访问其 API.
Strava 自动将 'localhost' 加上您在注册 'app' 时输入的任何授权回调域列入白名单。我依赖本地主机。
我有一个 activity 加上一些片段。在 Android Studio 中,我向非初始片段添加了深度 link。我的初始片段要求输入登录名和密码,然后创建一个 IntentUri 来访问 Strava OAuth 服务器。这一切顺利,它在 OAuth 请求中传递回调 URI 以及授权请求。问题是回调URI没有深入link.
我尝试了几种回调 URI 的组合:
- http:///localhost/fibonacci/itemFragment
- localhost/fibonacci/itemFragment
- 我的应用程序://localhost/fibonacci/itemFragment
None 这些工作(是的,我总是在 OAuth 请求和 xml 中同时更新描述深度 link 的 URI。
- 回调 URI 触发打开浏览器的请求。
- Strava 站点将回调 uri 标记为无效。
- 回调似乎没有发生。
我也尝试通过创建快捷方式对此进行测试,但在每个浏览器中都会尝试打开快捷方式。
下面是我的 android 清单文件、我的 shortcuts.xml 文件和我的 nav_graph.xml.
即使 Strava 出于某种原因无法工作,我至少应该能够使用快捷方式。
感谢任何帮助。
--------------------AndroidManifest.xml-------------------- ------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fibonacci">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Fibonacci">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Fibonacci.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
</application>
</manifest>
------------------------shortcuts.xml-------------------- ------------------
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="RichShortcut"
android:enabled="true"
android:shortcutShortLabel="@string/static_shortcut_label_short"
android:shortcutLongLabel="@string/static_shortcut_label_long"
android:shortcutDisabledMessage=
"@string/static_shortcut_disabled_message">
<!-- android:icon="@drawable/donut_with_sprinkles">-->
<intent
android:action="android.intent.action.VIEW"
android:data="myapp://localhost/fibonacci/itemFragment" />
</shortcut>
</shortcuts>
------------------------nav_graph.xml---------------- ----------------------
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/FirstFragment"
android:name="com.example.fibonacci.FirstFragment"
android:label="@string/first_fragment_label"
tools:layout="@layout/fragment_first">
<action
android:id="@+id/action_FirstFragment_to_SecondFragment"
app:destination="@id/SecondFragment" />
</fragment>
<fragment
android:id="@+id/SecondFragment"
android:name="com.example.fibonacci.SecondFragment"
android:label="@string/second_fragment_label"
tools:layout="@layout/fragment_second">
<action
android:id="@+id/action_SecondFragment_to_FirstFragment"
app:destination="@id/FirstFragment" />
</fragment>
<fragment
android:id="@+id/loginFragment"
android:name="com.example.fibonacci.ui.login.LoginFragment"
android:label="fragment_login"
tools:layout="@layout/fragment_login" />
<fragment
android:id="@+id/itemFragment"
android:name="com.example.fibonacci.ItemFragment"
android:label="fragment_item_list"
tools:layout="@layout/fragment_item_list">
<deepLink
android:id="@+id/deepLink"
app:uri="myapp://localhost/fibonacci/itemFragment" />
</fragment>
</navigation>
您尚未在清单的导航图中注册 <deepLink>
,因此它永远不会被 Android OS.
根据 implicit deep link documentation:
To enable implicit deep linking, you must also make additions to your app's manifest.xml file. Add a single
<nav-graph>
element to an activity that points to an existing navigation graph, as shown in the following example:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Fibonacci.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
<!-- This line is what adds the correct intent filter for your deepLink -->
<nav-graph android:value="@navigation/nav_graph" />
</activity>