标签: android-deep-link

Android 应用程序链接在 Android 12 中不起作用,始终在浏览器中打开

我已将 assetlinks 文件托管到我们的域 https://ourdomain/.well-known/assetlinks.json 并且还使用https://developers.google.com/digital-asset-links/tools/generator和 android studio验证了这一点应用程序链接助手并从这两种方式获得了验证状态。但是当我共享调试 APK 进行测试时,它总是在浏览器中打开。我还尝试在应用程序商店上传并从那里下载进行测试,但它总是在浏览器中打开。

注意:对于调试构建,使用了我的笔记本电脑 SHA-256,一旦 Play 商店上的应用程序将托管资产链接文件上的 SHA(通过转到 Play 控制台中的应用程序仪表板然后发布管理 --> 应用程序签名获得 SHA-256)更改为我们的域 https ://ourdomain/.well-known/assetlinks.json

以下是清单文件中使用的代码。


     <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:scheme="https"
                android:host="abc.test.com" />
        </intent-filter>
Run Code Online (Sandbox Code Playgroud)

android deep-linking kotlin android-deep-link android-app-links

67
推荐指数
7
解决办法
6万
查看次数

如何解决 Android get-app-links 返回状态 1024?

我无法获得在 Android 13 上工作的深层链接,我已经遵循了那里的每个教程,但无法让应用程序在进入网站后简单地启动。

我在 android studio 终端中使用了命令:

adb shell pm get-app-links com.where44444.cleanbook
Run Code Online (Sandbox Code Playgroud)

它返回

  com.where44444.cleanbook:
    ID: 0892ecd5-a93b-4064-bb2c-5d6cae6e7ac6
    Signatures: [9D:F7:97:FE:92:94:1A:67:96:80:D4:07:84:F8:42:8E:96:50:2B:C2:2D:CC:19:AD:0F:CC:F1:A4:E0:72:39:BE]
    Domain verification state:
      cleanassistant.net: 1024
      www.cleanassistant.net: 1024
Run Code Online (Sandbox Code Playgroud)

文档说

错误代码为 1024 或更大

特定于设备验证程序的自定义错误代码。

仔细检查您是否已建立网络连接,然后再次调用域验证过程。

我确实通过笔记本电脑和手机连接到互联网。

任何帮助,将不胜感激。

java android android-deep-link

19
推荐指数
2
解决办法
5471
查看次数

Android 12 上的应用链接“legacy_failure”验证错误

我已进行设置assetlinks.jsonAndroidManifest.xml以便在所有以前版本的 Android 中验证所需的应用程序链接。但是,该验证在 Android 12(当前为 Beta 2)中不再起作用。adb shell pm get-app-links <PACKAGE_NAME>返回legacy_failure

Android 12 中的 App Links 验证似乎有一些更改,但文档并没有非常明确地说明需要更改哪些内容以及更改是否向后兼容。

android android-deep-link android-app-links

17
推荐指数
4
解决办法
2万
查看次数

默认情况下,应用程序链接在 Android 12 中无法打开。可能的 SHA256 问题

我已通过在此处上传 assetlinks.json 文件来设置深度链接

https://example.com/.well-known/assetlinks.json
Run Code Online (Sandbox Code Playgroud)

它在 Android 11 之前都可以正常工作。如果不是从 Playstore 下载的,它也可以在 Android 12 中工作(即从我的 android studio 或我从 android studio 制作的 apk 文件安装,即使我使用 Keystore 签署 apk 文件也能工作。)

在 Android 12 上从 Playstore 下载时,如果您进入应用程序设置 -> 默认打开 -> 在应用程序中打开的链接。我们可以看到我的域默认被禁用。我认为这与我在 assetlinks.json 中使用的 sha256 有关

我从 Android studio 中的 App Link Assistant 获取了 assetlinks.json。(我在生成 assetlinks 时也选择了密钥库文件)。

如果我去我的play console->Setup->App integrity->App signing

我可以在数字资产 Json 部分中看到不同的 Sha256(也在应用程序签名密钥证书部分中)

我可以在上传密钥证书部分看到我上传的 Sha256。

我的问题是我应该在 assetlinks.json 中使用哪种 sha256?

我在这里看到我应该同时使用两者。如果应该的话,如何将 sha256 添加到我的 assetlink.json 中。我可以将其添加为像这样的逗号分隔值吗?

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example", …
Run Code Online (Sandbox Code Playgroud)

android deep-linking android-deep-link android-app-links

16
推荐指数
2
解决办法
3万
查看次数

使用导航组件的深层链接时如何重新创建 singleTop 行为?

使用导航组件的深层链接时如何重新创建 singleTop 行为?

我正在使用 Jetpack Navigation,目前正在尝试实现通知点击。其中一个片段用于播放音乐。当您将应用程序设为后台时,会显示一条通知并继续播放音乐。当我点击通知时,我想回到带有回放的片段。我想模仿singleTop行为。

为了处理通知点击,我使用了一个显式的深层链接(PendingIntent带导航图):

val pendingIntent = NavDeepLinkBuilder(context)
    .setGraph(R.navigation.nav_graph)
    .setDestination(R.id.music)
    .setArguments(...)
    .createPendingIntent()
Run Code Online (Sandbox Code Playgroud)

不幸的是,它清除了任务返回堆栈并将其替换为深层链接目标。我怎样才能防止这种行为?我知道有,NavOptions#shouldLaunchSingleTop但我认为无法将它与PendingIntentand一起使用NavDeepLinkBuilder。是否可以使用 NavOptions 启动深层链接?

android-deep-link android-jetpack-navigation

14
推荐指数
0
解决办法
320
查看次数

带有导航组件的 Android 深层链接无法按预期工作

我希望你们都做得很好。

我有一个小问题;

我正在使用导航组件,单个活动多个片段。我对深层链接有一个小问题。

  • 我已经<nav-graph/>在清单中设置了并且还设置了 launcherMode="singleTask",

  • 我已经<deeplink/>在导航图中设置了。

  • 我已经在片段中处理了意图附加内容。

我的流程是;

  1. 用户点击忘记密码,填写编辑文本,然后请求深层链接邮件。工作正常
  2. 用户单击电子邮件中的深层链接并选择应用程序,然后自动导航到 CreatePasswordFragment(深层链接目标片段)&(我可以在此处处理参数,也可以正常工作)

问题是; 有时如果应用程序在后台打开(例如我请求邮件然后按下主页按钮)并且当我单击深层链接时,最后一个片段运行而不是目标片段,即 CreatePasswordFragment 关于可能导致问题的任何想法?

谢谢!

导航版本:2.2.0

电子邮件附带的深层链接

 http://myurl/forgot-password/?key=sodmoq9wwdW1djkssdqMEdqlsp
Run Code Online (Sandbox Code Playgroud)

导航图

 <deepLink android:id="@+id/deepLink"
    app:uri="http://myurl/forgot-password/?key={key}"/>
 <argument
    android:name="key"
    app:argType="string" />
Run Code Online (Sandbox Code Playgroud)

安卓清单

 <activity 
    ...
    android:launchMode="singleTask">
 <nav-graph android:value="@navigation/navigation_main" />
 </activity>`
Run Code Online (Sandbox Code Playgroud)

反编译清单

 <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="http" />

     <data android:host="myurl" />

     <data android:path="/forgot-password/" />
 </intent-filter>
Run Code Online (Sandbox Code Playgroud)

android android-architecture-navigation android-deep-link

13
推荐指数
1
解决办法
5243
查看次数

缺少可变性标志:Android 12 带有 NavDeepLinkBuilder 的待处理意图

我\xc2\xb4已经开始测试我的应用程序在Android 12上的问题,并且收到了一些关于为主屏幕小部件设置的待处理意图的可变性标志的警告。这些可变性标志现在从 SDK 31 开始是强制性的。在 31 之前,此代码可以工作,但会出现 lint 警告:

\n
val myIntent = Intent(context, MainActivity::class.java)\nval myPendingIntent = PendingIntent.getActivity(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT )\nmyRemoteViews.setOnClickPendingIntent(R.id.widget_button, myPendingIntent)\n
Run Code Online (Sandbox Code Playgroud)\n

在 Android 12 上,需要添加第二个标志,如下所示:

\n
val myIntent = Intent(context, MainActivity::class.java)\nval myPendingIntent = PendingIntent.getActivity(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)\nmyRemoteViews.setOnClickPendingIntent(R.id.widget_button, myPendingIntent)\n
Run Code Online (Sandbox Code Playgroud)\n

到目前为止,一切都很好。但是,对于某些小部件操作,不仅需要导航到应用程序,还需要导航到特定片段并添加片段参数。对于这些情况,我\xc2\xb4一直在使用 NavDeepLinkBuilder 创建pendingIntent\n https://developer.android.google.cn/reference/kotlin/androidx/navigation/NavDeepLinkBuilder

\n
val myPendingIntent = NavDeepLinkBuilder(context)\n        .setGraph(R.navigation.nav_main)\n        .setDestination(R.id.myFragment)\n        .setArguments(\n            myFragment.bundle(myArgs)\n        )\n        .createPendingIntent()\nmyRemoteViews.setOnClickPendingIntent(R.id.widget_button, myPendingIntent)\n
Run Code Online (Sandbox Code Playgroud)\n

在您将构建目标设置为 sdk 31 并在 Android 12(模拟器)上构建之前,此方法非常有效。在这种情况下,它会在使用以下堆栈跟踪创建小部件时崩溃:

\n
   2021-11-03 17:41:27.792 20309-20309/com.package.debug E/AndroidRuntime: FATAL EXCEPTION: main\n    Process: com.package.debug, PID: 20309\n    java.lang.RuntimeException: …
Run Code Online (Sandbox Code Playgroud)

android android-pendingintent android-architecture-navigation android-deep-link android-12

11
推荐指数
2
解决办法
4119
查看次数

Chrome 自定义选项卡中的重定向未捕获深层链接

我想捕获 Chrome 自定义选项卡中发生的重定向,以确保用户留在本机移动应用程序中。

Chrome 自定义选项卡的启动方式如下:

val url = "https://demo.company.com/sso/oidc/start/?idp_connection_id=Username-Password-Authentication&status_response_url=https://member.example.com/urgent"
val builder = CustomTabsIntent.Builder()                                                                                                                                         
val customTabsIntent = builder.build()                                                                                                                                           
customTabsIntent.launchUrl(this, Uri.parse(url))
Run Code Online (Sandbox Code Playgroud)

status_response_url在用户进行身份验证后,该网页将重定向到作为参数给出的 URL 。移动应用程序注册适当的方案:

 <intent-filter android:autoVerify="true">
     <action android:name="android.intent.action.VIEW" />
     <category android:name="android.intent.category.DEFAULT" />
     <category android:name="android.intent.category.BROWSABLE" />
     <data
         android:host="member.example.com"
         android:scheme="https" />
  </intent-filter>
Run Code Online (Sandbox Code Playgroud)

不幸的是,系统似乎没有捕获重定向。为什么?

android intentfilter chrome-custom-tabs android-customtabs android-deep-link

11
推荐指数
1
解决办法
6333
查看次数

使用 Jetpack Compose 的深度链接导航到可组合项

当用户在我们的应用程序中进入地理围栏时,我们会向他们显示有关该区域的优惠通知,单击该通知后,应将他们引导至名为 的特定可组合屏幕SingleNotification。我已经遵循了谷歌的代码实验室及其文档,但我还没有设法使到特定屏幕的导航正常工作。现在,单击通知或运行命令adb shell am start -d \xe2\x80\x9ceway://station_offers/date_str/www.test.com/TITLE/CONTENT\xe2\x80\x9d -a android.intent.action.VIEW,只需打开应用程序即可。

\n

该活动在清单中声明如下:

\n
    <activity\n        android:name=".MainActivity"\n        android:exported="true"\n        android:label="@string/app_name"\n        android:screenOrientation="portrait">\n        <intent-filter>\n            <action android:name="android.intent.action.MAIN" />\n\n            <category android:name="android.intent.category.LAUNCHER" />\n\n            <category android:name="android.intent.category.DEFAULT" />\n            <category android:name="android.intent.category.BROWSABLE" />\n        </intent-filter>\n\n        <intent-filter>\n            <action android:name="android.intent.action.VIEW" />\n\n            <category android:name="android.intent.category.DEFAULT" />\n            <category android:name="android.intent.category.BROWSABLE" />\n\n            <data\n                android:host="station_offers"\n                android:scheme="eway" />\n        </intent-filter>\n    </activity>\n
Run Code Online (Sandbox Code Playgroud)\n

我们的 MainNavController 类包含 NavHost,而 NavHost 又包含各种 NavGraph。我只包含了下面的相关图表:

\n
        NavHost(\n            navController = navController,\n            startDestination = NavigationGraphs.SPLASH_SCREEN.route\n        ) {\n....\n            notificationsNavigation()\n....    \n    }\n
Run Code Online (Sandbox Code Playgroud)\n

通知导航图定义如下:

\n
fun …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-deep-link android-jetpack-compose

11
推荐指数
2
解决办法
7350
查看次数

使用参数深度链接到另一个模块

我正在尝试使用深层链接进行跨模块用户导航,并且我需要传递一些参数。由于它位于另一个模块中,因此我无权访问id,因此所有navigate(@IdRes int resId, ...)方法都不适用。

使用 Android Jetpack 的导航组件导航具有键值对的Uri深层链接的最佳方法是什么?Bundle

navigation.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"
    android:id="@+id/navGraph"
    app:startDestination="@id/feature_one">

    <include app:graph="@navigation/feature_one" />
    <include app:graph="@navigation/feature_two />
</navigation>
Run Code Online (Sandbox Code Playgroud)

feature_one.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"
    android:id="@+id/feature_one"
    app:startDestination="@id/oneFragment">
    <fragment
        android:id="@+id/oneFragment"
        android:name="my.app.OneFragment"
        android:label="OneFragment" />
</navigation>
Run Code Online (Sandbox Code Playgroud)

feature_two.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"
    android:id="@+id/feature_two"
    app:startDestination="@id/twoFragment">

    <fragment
        android:id="@+id/twoFragment"
        android:name="my.app.TwoFragment"
        android:label="TwoFragment">
        <deepLink app:uri="myapp://my.app/?myId={myId}" />

        <argument android:name="myId" app:argType="long" />

    </fragment>
</navigation>
Run Code Online (Sandbox Code Playgroud)

OneFragment.kt(:一个模块)

    val bundle = bundleOf("myId" to 123L)

    val …
Run Code Online (Sandbox Code Playgroud)

android android-architecture-navigation androidx android-deep-link

10
推荐指数
1
解决办法
1924
查看次数