在基于 meteorjs (myapp://) 构建的科尔多瓦应用程序中处理深度链接

Posted

技术标签:

【中文标题】在基于 meteorjs (myapp://) 构建的科尔多瓦应用程序中处理深度链接【英文标题】:Handle deep linking in cordova app built on meteorjs (myapp://) 【发布时间】:2015-09-11 19:53:51 【问题描述】:

我正在构建一个 meteorjs 应用程序并将其部署为适用于 androidios 的本机 (cordova) 应用程序。

我需要深度链接到我的应用,这样我就可以通过点击网站上的链接来启动它。

我已经使用 Eddy Verbruggen (https://github.com/EddyVerbruggen/Custom-URL-scheme) 的 cordova 插件实现了 URL Scheme,并通过点击“myapp://”格式的链接成功启动了我的应用程序。

问题是,即使应用程序成功启动,handleOpenUrl 挂钩也没有被触发。

Meteor.startup(function() 
    handleOpenURL = function handleOpenURL(url) 
        console.log("received url: " + url);
        // parse url and proceed accordingly
    
);

没有任何记录。所以我无法将任何参数传递给我的应用程序,甚至无法检测到应用程序是通过遵循“myapp://”URL 方案的链接启动的。

另外,我注意到即使我的应用程序已经打开,如果我切换到浏览器并点击一个特殊的“myapp://”链接,而不是切换到我的(已经打开的)应用程序,一个新的实例应用程序正在启动。

[edit] 原来这两个问题是相关的。一旦我阻止了应用程序的新实例被初始化,handleOpenUrl 函数就会成功触发。

我使用 Android 模拟器进行所有测试。我还没有机会在 iOS 上进行测试。

[edit] iOS 根本没有给出这个问题。这只是一个 Android 问题。

如果有人对在 meteorjs 中实现自定义 URL 方案有任何经验,非常感谢您的反馈!

【问题讨论】:

你是如何让你的自定义 url 在模拟器上的 android 中工作的?我无法让模拟器注册它,但它在 ios 中效果很好 【参考方案1】:

我设法解决了我面临的问题。这是解决方案,适用于面临类似问题的其他人。

首先,它只发生在 Android 上。 iOS启动应用并触发handleOpenUrl函数没有任何问题。

我在 Android 上遇到的两个问题原来是相互关联的。每次都会触发一个新的应用实例,从而阻止了 handleOpenUrl 函数被触发。

通过在 mobile-config.js 文件中添加一行代码解决了这两个问题:

App.setPreference("AndroidLaunchMode", "singleTask");

【讨论】:

以上是关于在基于 meteorjs (myapp://) 构建的科尔多瓦应用程序中处理深度链接的主要内容,如果未能解决你的问题,请参考以下文章

MeteorJs“loginWIthPassword”似乎在方法中不起作用

MeteorJS 和 Coffeescript

MeteorJS在点击事件中获取MongoDB ID

在 MeteorJS 中获取原始 mongo db 引用

如何使用 Meteorjs 使用 URL 参数

查询由另一个 Meteor js 应用程序中的应用程序创建的集合