我将发布到Facebook和Twitter的链接,以便深入链接到我的应用程序.我已开始使用Facebook进行测试,只要安装了Facebook应用程序,我的链接就可以正常运行.如果他们没有安装Facebook应用程序,他们就会被带到我的网站.
如果用户没有安装Facebook应用程序或者更频繁地点击我的应用程序的链接并且我总是希望将它们发送到我的应用程序,那么处理回退的最佳做法是什么?
如果用户在Facebook应用中点击深层链接时未安装我的应用,如何获取应用链接数据?在这个问题上,Facebook的文档很少令人惊讶.
我有一个很深的联系 https://fb.me/635533123230265
哪个返回HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>App Link</title>
<meta property="fb:app_id" content="619350481515196">
<meta property="al:android:url" content="instapanel://panel?utm_source=fb&utm_medium=cpi&utm_term=sf&utm_campaign=PROPE">
<meta property="al:android:package" content="com.instapanel.android">
<meta property="al:android:app_name" content="Instapanel">
<meta property="al:web:should_fallback" content="false">
<meta http-equiv="refresh" content="0;url=http://play.google.com/store/apps/details?id=com.instapanel.android">
</head>
<body>Redirecting...</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果已安装该应用程序,则AppLinkData appLinkData = AppLinkData.createFromActivity(activity);
运行正常.
但如果没有安装应用程序,我相信我应该使用AppLinkData.fetchDeferredAppLinkData
.我可以验证在facebook SDK中它发出HTTP请求并接收JSON,但它永远不会包含深层链接{"success":true}
.有任何想法吗?
这是我的代码:
// Fetch data immediately.
AppLinkData appLinkData = AppLinkData.createFromActivity(activity);
App.setAppLinkData(appLinkData); // Handles appLinkData
// In case data is deferred because app wasn't installed yet.
AppLinkData.fetchDeferredAppLinkData(activity, …
Run Code Online (Sandbox Code Playgroud) 我在iOS 9中使用我们的登录系统有一个奇怪的重定向应用程序问题.
现在,我已经允许了abitrary有效负载,并且我的url方案在我的plist文件中正确设置.
这是怎么回事:
现在,如果用户关闭SFSafariViewController,返回我们的应用程序登录页面并尝试再次登录,每次从那里重定向到应用程序,每次调用openUrl AppDelegate方法.
请注意,在iOS9上,我们之前已将应用程序外部重定向到Safari以完成登录过程(而不是使用SFSafariViewController)并遇到相同的问题,而"在应用程序中打开"弹出窗口重定向到应用程序只会显示在第二次登录尝试和向上.
这一切都只发生在iOS 9上.在iOS 8上,此问题不会出现,我们的用户在登录后始终会重定向到该应用.
在OAuth登录后发送到应用程序的重定向URL在首次登录尝试时都是相同的.
有人在iOS 9上遇到过这样的问题吗?
如何从我自己的iOS应用程序中找到另一个应用程序的方案并与其进行深层链接?
更具体地说,我想在某些条件下(由我的代码设置)深入链接到Testflight应用程序.我假设这个人安装了Testflight(这可能是一个不好的假设,但我们可以忍受这个假设).
我知道在Android上,您可以查询应用并发送意图以深入链接到其他人的应用.什么是iOS上的等价物?
我看过WWDC视频与搜索和深层链接的改进有关.在"无缝链接到您的应用程序"视频中,演讲者讨论了如何设置应用程序和相关的Web服务器以支持"通用链接".我不完全清楚的是Universal Links是否适用于iOS 8或仅适用于iOS 9.当他谈到签署apple-app-site-association文件时,他表示只需要签名才能使用iOS 8.为了清楚起见,Universal Links是否适用于iOS 8,现在???
这是我关心的用例.
关联的应用程序打开并通过URL处理要处理的URL
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Void) -> Bool
Run Code Online (Sandbox Code Playgroud)特别:
谢谢!
我能找到的最接近的就是这个问题在这里.但它并没有完全覆盖我的问题.
我的应用设置中有深层链接,使用/ app作为路径前缀.我遇到的问题是类似http://example.com/upgrade
的链接也试图在我的应用程序中打开,即使它在网址中没有/ app.我明白你不能排除前缀指定的网址,但不是只包含那些网址的路径前缀的整点?
基本上我想要像这样的链接深层链接:
http://example.com/app/home
http://example.com/app/specials
Run Code Online (Sandbox Code Playgroud)
但不是这样的链接:
http://exaple.com/
http://example.com/login
Run Code Online (Sandbox Code Playgroud)
这是我在我的清单中所拥有的:
<data android:scheme="http"
android:host="example.com"
android:pathPrefix="/app"/>
Run Code Online (Sandbox Code Playgroud)
编辑1
也找到了这个链接,但我没有任何空前缀,只有一个斜线"/"
编辑2
触发它的网址是http://example.com/upgrade.php?app=1&method=1&uid=1
,我不确定应用程序之后是否?也会触发它所以我将前缀更改为/ application但是也没有用,它仍然触发它们.
编辑3
以下是清单中的其他深层链接数据标记:
资料活动
<data android:scheme="myapp"
android:host="profile"
android:pathPrefix="/"/>
Run Code Online (Sandbox Code Playgroud)
登录/注册活动
<data android:scheme="myapp"
android:host="login"
android:pathPrefix="/signup"/>
Run Code Online (Sandbox Code Playgroud)
主要活动
<data android:scheme="myapp"
android:host="main"
android:pathPrefix="/"/>
<data android:scheme="http"
android:host="test.example.com"
android:pathPrefix="/app"/>
<data android:scheme="http"
android:host="live.example.com"
android:pathPrefix="/app"/>
Run Code Online (Sandbox Code Playgroud)
编辑4
这变得越来越混乱,如果我从活动中删除myapp作为方案的数据标记(或者如果我从前缀为"/"的所有内容中删除pathPrefix)它不再触发来自web urls的深层链接,即使他们有/ app.
我正在Android上实现应用链接.我们的服务器团队已经托管assetlinks.json
在我们的开发端点上/.well-known/assetlinks.json
.
在我的应用程序清单中,我根据官方文档编写了intent过滤器,如下所示:
<!-- Intent filter for supporting deep linking (referred to as magic login links) -->
<intent-filter
android:autoVerify="true"
tools:ignore="UnusedAttribute">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="@string/app_link_login_host"
android:scheme="https" />
<data
android:host="@string/app_link_login_host"
android:scheme="http" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
现在,我的理解是,当应用程序第一次运行时,Android操作系统将搜索清单对于包含主机/方案对,其中所有的意图过滤器autoVerify=true
和VIEW
行动,并DEFAULT
和BROWSABLE
类别都存在.然后它将转到主机URL并assetlinks.json
从/.well-known/
路径请求文件,并使用此json文件中的SHA哈希和包名称来验证应用程序是否允许接受来自给定主机的深层链接.如果此操作成功,则应将应用程序标记为status: always
与意图过滤器内主机提供的链接相关联.如果失败,那么应用程序将被标记为status: never
主机.
但是,我们的服务器团队已经为登台设置了一个新的端点,他们没有将assetlinks.json
文件上传到/.well-known/
路径(事实上他们根本没有托管它).然而,应用程序仍然可以接受来自清单中指定的主机的链接(由于assetlinks
端点上没有文件而应该验证失败).
这是当我意识到也许dev端点assetlinks.json
文件从未用于验证应用程序时,我只是注意到因为深层链接仍然在暂存环境中工作(当它不应该有).
这是Android OS的一个错误(换句话说,它根本不进行资产链接检查?).是的,在安装指向登台的版本之前,我卸载了指向开发服务器的旧应用程序...
以下是官方文档:
https://developer.android.com/training/app-links/
这是段落,特别是我的问题的根源(因为它明确指出,如果任何主机不解析路径上的assetlinks.json
文件/.well-known/
(包括assetlinks.json …
我有几个分支链接,旨在深入链接到我的iOS应用程序并将图像预加载到UIImageView.它们在安装应用程序时可以正常工作,无论它是在后台还是已经终止.但是,如果尚未安装该应用程序,它们将无法运行.它们正确链接到应用程序商店,但是一旦安装了应用程序,参数似乎无法正确流动.
我说参数没有SEEM流过,因为我找不到测试方法,因为我认为没有办法在Xcode中通过deeplink模拟一个全新的应用程序安装.我知道我可以在没有应用程序自动启动的情况下从Xcode构建到我的手机,然后单击深层链接,但到那时,应用程序已经安装在我的手机上,因此它违背了测试的目的.如果有人知道通过deeplink测试应用程序安装的方法,我很乐意接受这些信息并与它一起运行一段时间......
这是一个深层链接的例子,它应该将图形加载到衬衫设计中:
有没有人知道Branch在安装后没有正确发送数据的任何已知问题?
编辑:这是我现在在appDelegate分行代码中得到的内容.我无法证明url没有设置,但HomeViewController没有像非安装后启动那样下载链接图像.就像我之前提到的,我不知道如何模拟这种情况,因为Xcode模拟器总是先安装,所以我没有机会模拟单击预安装链接.
let branch: Branch = Branch.getInstance()
branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: { params, error in
if (error == nil) {
if let url = params["product_picture_url"] as? String {
let url = NSURL(string: url)!
HomeViewController.injectedImageUrl = url
}
}
})
Run Code Online (Sandbox Code Playgroud) 那么可以深入链接到一个片段吗?因此,我的主要活动会根据用户点击的内容启动不同的片段.
所以我使用清单文件中的intent过滤器为我的主要活动创建了一个深层链接.但你怎么会这样做片段?
任何帮助都会有所帮助
谢谢.
我在我的应用程序中启用了应用程序链接。它工作正常。但是在我的应用程序中有一些场景我无法处理传入的 url。在这些情况下,我想将该 url 重定向到设备中的默认浏览器。
目前我尝试做的是使用意图打开带有 url 的浏览器,但它再次重定向到我的应用程序本身。应用程序链接的格式 ->
https://<domain>/<prefix>/<params>
Run Code Online (Sandbox Code Playgroud)
因此,根据参数,我想处理应用程序本身中的应用程序链接或将其重定向到默认浏览器。以下是我尝试使用上述网址打开浏览器的代码
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(appLinkModel.url))
browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER)
browserIntent.resolveActivity(packageManager)?.let {
startActivity(browserIntent)
}
Run Code Online (Sandbox Code Playgroud)
我尝试排除 addCategory() 行,但结果是一样的。应用程序崩溃(因此出现了 resolveActivity()),或者应用程序在循环中自行打开。
我想做的事
所以我想要做的是将 url 重定向到默认浏览器(或显示一个没有我的应用程序的选择器),而不是一次又一次地触发应用程序链接。那么这可能吗?
deep-linking ×10
android ×6
ios ×5
facebook ×2
applinks ×1
branch.io ×1
ios8 ×1
ios9 ×1
iphone ×1
objective-c ×1
openurl ×1
twitter ×1
url-scheme ×1
xcode ×1