问题标签 [deeplink]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
4684 浏览

facebook - 适用于 IOS 和 Android 应用的 Deeplink 解决方案适用于 Facebook

深度链接(通用链接或应用链接)教程太多了。但他们中的大多数都展示了如何在 Android 或 IOS 应用程序中启用它。还有付费的云解决方案,但它们提供了很多功能。但我在现实生活中面临三个主要问题:

  1. 某些浏览器不允许应用链接工作。例如,您可以将 http://example.com 配置为在应用程序中捕获,但如果用户通过 Facebook 应用程序单击此链接,则它不会被处理,并且 Facebook 浏览器会显示该网站。
  2. 没有唯一的标准解决方案来处理 Android 和 IOS 应用程序的链接。
  3. 如果移动设备上没有安装应用程序并且用户单击应用程序链接,则没有实际的解决方案。

我写了这个问答,这是我研究的结果(花了太多时间),没有一个独特且适用于所有案例的解决方案。

代码来自我的工作解决方案,但我删除了一些部分只是为了展示这个想法。如果有一些编译问题,请按照算法编写自己的代码

这是解决方案,即使您知道一些步骤,也要一步一步来,因为代码中有技巧。代码部分的注释行中也有一些解释,请阅读它们。

示例是通过您的 Android 和 IOS 应用程序处理深度链接 http://example.com/v/,并在末尾添加一个参数,例如 http://example.com/v/id-of-user?key=value。

1. 配置安卓

1.1 将活动信息添加到您的 AndroidManifest.xml 文件中:

1.2 创建一个名为 appLinkHandlerActivity 的活动,它将处理点击的链接

2.配置IOS

这比安卓复杂,这里我会解释必要的点。请参考文档: https ://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW1

https://www.raywenderlich.com/128948/universal-links-make-connection

2.1 在 Apple Developer Portal 上创建 App ID 时,您必须启用关联域。重要问题:您需要购买 Apple 开发者帐户才能启用此选项,这意味着如果不购买开发者帐户,您将无法在您的 IOS 项目上尝试 AppLinks。

2.2 在 XCode 项目中,打开“Capabilites”选项卡并将 Associated Domains 切换为 On。如果您没有在 Apple Developer Portal App ID 部分中启用 Associated Domains,这可能无法选择通过单击 Associated Domains 选项下的 + 按钮添加权利,写入“applinks:example.com”。

2.3 在您的网络服务器上创建一个名为“apple-app-site-association”的文件,该文件必须通过 https://example.com/apple-app-site-association 访问 HTTPS 是强制性的,如果它不是有效的SSL 证书 App Link 可能不起作用。将以下行添加到 apple-app-site-association 文件中:

appID 是 {“Team ID”.“Bundle ID of your App”} 的格式。您可以在 Developer Portal 的 Membership Details 部分中找到您的 teamID。

我们处理链接 http://example.com/v/parameters,但在这里您会看到“/ios/*”的另一个路径配置。需要绕过不支持的浏览器,后面会解释。

2.4 在 AppDelegate.m 文件中添加两个方法来处理用户对 example.com 的点击

3. 管理未击中的点击。

3.1 好的,您的 android 和 IOS 应用程序应该处理链接 http://example.com/v/blabla 上的点击,并将“blabla”参数传递给我展示的方法中使用的 pCode 变量。但某些浏览器(如 Facebook 应用)可能会禁用应用链接以使其正常工作。在这种情况下,用户单击会转到您的 Web 服务器,并且浏览器会尝试显示 http://example.com/v/blabla 的内容,这可能是 404 Page Not Found。为了处理这些点击,我们将配置 Apache Web 服务器并将用户重定向到您的应用程序。如果您使用 IIS 或其他,我不知道该怎么做,但是您可以以此为示例并使用相同的算法来配置您的 Web 服务器。

3.2 在 example.com 根目录的 .htaccess 文件中写入以下行

4. 将用户重定向到应用程序

4.1 .htaccess 文件中的重定向规则显示在第 3 步,将用户重定向到 deeplink.php 文件。所以这是该文件的内容,用于将用户重定向到您的应用程序。

5.向IOS用户显示一个链接以点击

5.1 这里是 http://deep.example.com/deeplink-ios.php 文件的内容。用户将看到如下所示的页面,当他们单击链接时,该请求应由您的 IOS 应用程序处理。

六、案例分析:

6.1 安卓

6.1.1 案例 1 – 应用程序安装在设备上
• 浏览器对 http://example.com/v/blabla 的请求
• Android 捕获链接并创建在清单文件中配置的活动

6.1.2 案例2 - 应用程序安装在设备上
• http://example.com/v/blabla 的浏览器请求
• Android 无法捕获链接。
• 浏览器连接到Web 服务器,请求/v/blabla
• 由于.htaccess 文件中的配置,它被重定向到deeplink.php?/v/blabla
• deeplink.php 得知它是android,并重定向到:intent:// share/v/blabla/#Intent;scheme=myapp;S.browser_fallback_url=http%3A%2F%2Fexample.com%2Fget-app%2F;package=com.example.app
• Android 捕获针对意图的请求: //,因此由于清单文件中的配置,myapp://share/v/blabla 由活动处理

6.1.3 Case-3 - 应用程序未安装
• http://example.com/v/blabla 的浏览器请求
• Android 无法捕获链接。
• 浏览器连接到Web 服务器,请求/v/blabla
• 由于.htaccess 文件中的配置,它被重定向到deeplink.php?/v/blabla
• deeplink.php 得知它是android,并重定向到:intent:// share/v/blabla/#Intent;scheme=myapp;S.browser_fallback_url=http%3A%2F%2Fexample.com%2Fget-app%2F;package=com.example.app
• Android 捕获针对意图的请求: //, 但是没有为 id: com.example.app 安装应用程序。在某些情况下,它会回退并将浏览器重定向到 http://example.com/get-app 或应用程序的 Play 商店安装页面

6.2 IOS

6.2.1 Case-1 – 应用程序安装在设备上
• 浏览器对 http://example.com/v/blabla 的请求
• IOS 捕获链接并调用 AppDelegate.m 中的 continueUserActivity 方法

6.2.2 案例2 – 应用程序安装在设备上
• 浏览器请求http://example.com/v/blabla
• IOS 无法捕获链接。
• 浏览器连接到Web 服务器,请求/v/blabla
• 由于.htaccess 文件中的配置,它被重定向到deeplink.php?/v/blabla
• deeplink.php 得知它是IOS,并重定向到:http:// deep.example.com/deeplink-ios.php?/v/blabla
• deeplink-ios.php 文件显示用户的 URL。URL 为:http://lify.me/ios/v/blabla
• 用户点击该 URL,浏览器请求 http://lify.me/ios/v/blabla
• 由于路径配置,IOS 捕获请求“ /ios/*” 在 apple-app-site-association 文件中并调用 AppDelegate.m 中的 continueUserActivity 方法
• 如果IOS 因任何原因无法捕获对http://lify.me/ios/v/blabla 的请求,它将表现为设备上未安装应用程序。看那个案例。

6.2.3 Case-2 – 应用程序未安装在设备上
• http://example.com/v/blabla 的浏览器请求
• IOS 无法捕获链接。
• 浏览器连接到Web 服务器,请求/v/blabla
• 由于.htaccess 文件中的配置,它被重定向到deeplink.php?/v/blabla
• deeplink.php 得知它是IOS,并重定向到:http:// deep.example.com/deeplink-ios.php?/v/blabla
• deeplink-ios.php 文件显示用户的 URL。URL 为:http://lify.me/ios/v/blabla
• 用户点击 URL,浏览器请求 http://lify.me/ios/v/blabla
• 如果 IOS 无法捕获对 http 的请求://lify.me/ios/v/blabla
• 浏览器连接到 Web 服务器,请求 /ios/v/blabla
• 由于 Web 服务器上的 .htaccess 文件中的配置,它被重定向到 http://itunes.apple.com/install-of-your-app

6.3 在非 Android 或 IOS 设备上单击应用链接
• 浏览器请求 http://example.com/v/blabla
• 设备操作系统无法捕获链接。
• 浏览器连接到Web 服务器,请求/v/blabla
• 由于.htaccess 文件中的配置,它被重定向到deeplink.php?/v/blabla
• deeplink.php 得知它既不是IOS 也不是Android,并重定向到:http ://example.com/non-mobile

0 投票
0 回答
945 浏览

android - 从 webview Android 应用程序内的浏览器打开链接

所以我按照这篇文章的指示,我仍然无法让我的应用程序打开应用程序内的链接。

我做了很多研究。请记住,我对开发 android 非常陌生。谁能帮我?

如果有人单击链接(例如:styleonem.co/about)以转到该页面中的该 URL,我想做的是打开一个意图。

现在发生的事情是它打开了应用程序(很好!)但它永远不会在 Webview 中加载 url。我以为我已经把这一切都整理好了,但我已经连续数周搜索并尝试学习这个新的应用程序界面,但我仍然无法弄清楚。

下面是我的代码

AndroidManifest.xml:

MainActivity.java:

0 投票
1 回答
809 浏览

android - Android 免安装应用深层链接

我在功能模块中声明了以下内容。我在移动设备中测试了即时应用程序,它运行成功。但是当我输入此 url 时,它不会导致即时应用程序。从 URL 启动即时应用程序的程序是什么。提前致谢

0 投票
1 回答
239 浏览

android - 使用 Branch.io 在不同设备上生成相同的链接

有什么方法可以使用 Branch.io 在不同设备上生成相同的链接?我的意思是:在我发布的应用程序中。我想和朋友分享这个。我单击以在一台设备上共享并获取链接然后我想从另一台设备共享相同的帖子。我得到第二个链接。他们不同。但我需要它们是一样的。

0 投票
1 回答
2260 浏览

deep-linking - 深度链接到 Google Assistant 应用程序

我有一个 Facebook Messenger 聊天机器人,它是更广泛平台的一部分,其中还包括 Google Assistant Action。

在某些情况下,我希望我的用户从 Messenger 应用程序切换到 Google Assistant 应用程序(iOS 和 Android 上),这样他们就可以对我的 Action 说话。

据我了解,不可能通过 GA Action 向用户“推送”消息(或“唤醒”Action),所以我想使用某种深度链接将用户从 Messenger 转发到 Google Assistant 应用. 至少 - 只是为了启动应用程序,充其量 - 使用转发参数启动它,例如“user_id”或代表用户发送给 GA 的消息。

我该怎么做?

我如何知道适用于 iOS 和 Android 的 Google Assistant 应用程序的深层链接“scheme://”?

0 投票
6 回答
21940 浏览

ios - WKWebView 未打开自定义 URL 方案(js 在新窗口中打开自定义方案链接)

我的应用程序中有一个WKWebView。我不使用UIWebView,因为出于某种奇怪的原因,它无法正确打开包含大量 JS 代码的网页。

当我点击带有自定义 url 方案 "scm://"的链接时,它什么也不做......

我的代码:

当我单击自定义 url 时,永远不会调用 handleError(),也不会调用 decisionPolicyForNavigationAction()。

0 投票
0 回答
1067 浏览

android - Android firebase 深度链接结果为空

这是我的代码。来自onSuccess penddingDynamicLinkData为空

在我的清单文件中

这是我的链接:

https://link.moneylover.me/addbudget?utm_campaign=test&utm_medium=test&utm_source=test

以前我已经测试过并且运行良好。目前我正在使用firebase version: "11.4.2"

让我知道任何想法。

0 投票
1 回答
865 浏览

android - 深度链接 - PathPattern 正则表达式限制

所以我的目标是深度链接任何具有这种格式的 URL MyWebsite/en/flyers/ {StoreName} -flyer- {StoreId}

当 StoreName 没有减号时,此 url https://www.salewhale.ca/en/flyers/walmart-flyer-2864 工作正常。但是在这种情况下https://www.salewhale.ca/en/flyers/canadian-tire-flyer-25659深层链接将不起作用,操作系统只会打开浏览器而不是为任何具有的链接选择 StoreActivity -减StoreName 中的符号。

这是我下面的清单,您可以快速尝试。

PS:我知道Android pathPattern 不是真正的正则表达式。

0 投票
1 回答
63 浏览

android - 通过 Playstore 延迟深层链接

我正在尝试配置我的延迟深层链接,但它仅在我的应用程序已安装时才有效,我一直是DeeplinkMe 教程,但我只能从 playstore 下载我的应用程序,当我打开时,它会进入主要活动,而不是清单上定义的那个。这是我的清单文件:

深联配置:

在此处输入图像描述

0 投票
1 回答
206 浏览

mobile - 如何在 Facebook 上分享 App Deep Link 与常规链接,用于移动和桌面

我正在为一个在移动和桌面上使用的网站开发 facebook 共享功能。我们有一个深层链接,可用于链接到应用程序,如果在移动设备上未安装应用程序,我们会将用户带到应用程序商店。

这是完美的,但在桌面计算机上打开共享的情况下,体验不太理想。

理想情况下,我们希望找到一种方法,如果他们在桌面上打开共享,那么号召性用语/按钮会转到网站。

在最坏的情况下,我认为当在桌面计算机上单击 App Deep Link 时,我们会重定向到该网站。

想法?