我有一个网页,我希望页面上的特定链接打开我们的原生移动应用程序,如果安装了应用程序,如果没有,请执行它当前正在做的事情(提交表单).
注意:我认为这与智能横幅不同 - 我不想在此页面上显示横幅.如果没有移动应用,我只想要正常的应用流程.
我已经集成branch-sdk
在网页和我的ios应用程序中.我已经成功建立了从网页到iOS应用程序的深层链接(代码未显示),但是在嗅探应用程序是否已安装时,我没有得到结果.
这是我网页上的代码:
branch.init('MY_KEY', null, function(err, data) { console.log('init...'); console.dir(data); }); branch.setIdentity('test-user', function(err, data) { console.log('identity...'); console.dir(data); }); branch.data(function(err, data) { console.log('data...'); console.dir(data); })
这是我application(_:didFinishLaunchingWithOptions:)
在iOS方面的代码:
//Initialize Branch if let branch = Branch.getInstance() { branch.setDebug() branch.initSession(launchOptions: launchOptions, andRegisterDeepLinkHandler: { params, error in if let params = params, error == nil { // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app // params will be empty if no data found // ... insert custom logic here ... print("params: %@", params.description) } }) branch.setIdentity("test-user") } else { readerLog.error("failed to initialize branch") }
每次加载网页时(即使在加载网页之后,并且遵循深层链接),我都会在控制台中输出以下内容.注意这+isfirstsession
是真的,hasApp
属性是null
:
[Log] init... (localhost, line 18) [Log] Object (localhost, line 20) data: "{\"+is_first_session\":true,\"+clicked_branch_link\":false}" data_parsed: {+is_first_session: true, +clicked_branch_link: false} has_app: null identity: null referring_identity: null referring_link: null [Log] identity... (localhost, line 23) [Log] Object (localhost, line 25) identity_id: "352945822373397525" link: "https://nlfd.app.link/?%24identity_id=352945822373397525" link_click_id: "352947632809063724" referring_data: "{\"$one_time_use\":false,\"+click_timestamp\":1485387510,\"_branch_match_id\":\"352945819276765390\",\"_t\":\"352945819276765390\",\"referrer\":\"link_clic…" referring_data_parsed: Object session_id: "352945822337503746" [Log] data... (localhost, line 28) [Log] Object (localhost, line 30) data: "{\"+is_first_session\":true,\"+clicked_branch_link\":false}" data_parsed: null has_app: null identity: null referring_identity: null referring_link: null
我究竟做错了什么?我希望我可以has_app
在初始化后或设置身份后查看属性.假设has_app
在这种情况下返回true 是不正确的吗?有没有更合适的方式来做我想做的事情?
来自Branch.io的Alex在这里:
不幸的是,该has_app
参数不是特别可靠.它足以在显示Open或Install标签之间切换按钮,但理想情况下,您不希望将其用于功能性事物.这是由iOS引起的限制:Apple不允许网页查询设备上安装的应用程序(出于明显的隐私原因),因此Branch必须依赖cookie匹配.这意味着如果我们无法匹配cookie,或者最近没有看到用户,或者用户清除了他们的设备缓存,或者用户自上次分支看到它们以来已经卸载了应用程序,则值has_app
将不正确.
但是,即使Apple不允许网页查询访问这些数据,iOS本身仍然可以对其进行操作.Universal Links就是这样做的 - 当用户打开通用链接(包括分支链接,假设您完成所有配置)时,如果安装了应用程序,该应用程序将打开.如果未安装,则将用户发送到链接的URL.您只需要在该按钮后面添加一个Branch链接.
但请注意,这不适用于表单提交按钮,因此您需要为此提供一些UX解决方法.或者,如果应用程序未打开,您可以通过使用Javascript计时器找到一种在延迟后提交表单的方法.