你如何处理深度链接插件中的简历场景?

时间:2016-10-06 05:39:47

标签: cordova ionic-framework deep-linking

观察: 1)当应用程序启动设备就绪事件触发时,用户将杀死该应用程序。 如果用户点击应用程序链接,该插件将正确打开应用程序并转到相应的页面。(此处onDevice ready将触发,deeplink observable为崩溃的深层链接服务)。 2)后续步骤1当应用程序切换时,在暂停触发器上,现在用户点击来自gmail的应用程序链接,此处插件打开应用程序,并且" onResume"事件被称为。 问题:相同的ondeviceready .subscribe()是否会服务于同一场景?就我而言,它并没有发生。它永远不会适用于所有后续暂停/恢复(翻转应用程序并再次回到应用程序)。

为了解决这个问题,我在onResume块上添加了相同的调用:

        $cordovaDeeplinks.route({
            '#/home/xyz': {
                target: 'xyz',
                parent: 'home'
            }
        }).subscribe(
            function(match) {
            }, function (nomatch) {       //Since my url doesn't match, i am handling the navigation on nomatch.                        
                var loc = nomatch.$link.fragment;
                $rootScope.$apply(function() {
                    $location.path(loc);
                });
            }
        );

总而言之,我在ondeviceready和onresume call上都有深层链接路由逻辑。

它适用于所有场景,除了: 如果已经消耗了ondeviceready deeplink,则在第一次onresume调用。 1)应用程序启动,ondevice ready事件触发,然后用户杀死应用程序。 2)用户点击了Gmail和应用程序打开的链接。 3)现在切换应用程序并再次单击链接 - 失败----(这是唯一失败的情况) 4)重复步骤3 - 通过 - 工作正常 5)重复步骤3 - 通过 - 工作正常

进一步调试,以下是: 设备就绪:我的应用程序上的观察者在插件上创建deeplink对象之前被调用 On Resume:在插件上创建deeplink对象后调用我的app上的观察者。

要解决此问题,现在我已经更改了我的onprevice ready代码,如下所示,并从onresume中删除了深层链接代码。

   //outside onready
  function subscribe_deeplink(){
       $cordovaDeeplinks.route({
            '#/home/xyz': {
                target: 'xyz',
                parent: 'home'
            }
        }).subscribe(
            function(match) {
            }, function (nomatch) {
                $rootScope.isNavigated = true;
                var loc = nomatch.$link.fragment;
                subscribe_deeplink();
                $rootScope.$apply(function() {
                    $location.path(loc);
                });
            }
        );
    }

   //inside onready
     $cordovaDeeplinks.route({
            '#/home/xyz': {
                target: 'xyz',
                parent: 'home'
            }
        }).subscribe(
            function(match) {
            }, function (nomatch) {
                $rootScope.isNavigated = true;
                var loc = nomatch.$link.fragment;
                subscribe_deeplink();
                $rootScope.$apply(function() {
                    $location.path(loc);
                });
            }
        );

现在,深度链接适用于所有场景中的应用程序..

我想知道一些事情: 1)这是一种建议的方式继续前进吗???? 2)为什么不在deeplink插件上讨论onresume场景。你如何处理简历方案。我错过了一些不足之处

1 个答案:

答案 0 :(得分:0)

Branch.io,我们实际上已将onDeviceReadyonResume挂钩。基本框架:

onDeviceReady: function() {
    Branch.initSession();
},
onResume: function() {
    Branch.initSession();
},
initialize: function() {
    document.addEventListener('resume', onResume, false);
    document.addEventListener('deviceready', onDeviceReady, false);
},
function DeepLinkHandler(data) {
    alert('Data from initSession: ' + data.data);
}

这显然不是与深度链接插件的完美关联,但可能有用作参考点。

无耻插件:您还可以查看Branch.io深层链接平台,因为它可以完成所有相同的操作,还有一些额外的好处,例如延迟深层链接和归因分析。