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

Posted

技术标签:

【中文标题】您如何处理深度链接插件中的简历场景?【英文标题】:How you handle on resume scenarios in deep-link plugin? 【发布时间】:2016-10-06 05:39:46 【问题描述】:

观察: 1)当应用启动时,设备就绪事件触发,然后用户终止应用。 如果用户单击应用程序链接,插件会正确打开应用程序并转到相应的页面。(此处 onDevice 就绪将触发,并且可观察的深度链接为传入的深度链接提供服务)。 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 调用中都有深度链接路由逻辑。

它适用于所有场景,除了: 如果 ondeviceready 深层链接已被使用,则在第一次 onresume 调用上。 1) 应用程序启动,ondevice 就绪事件触发,然后用户终止应用程序。 2) 用户点击了 Gmail 中的链接并打开了应用程序。 3)现在切换应用程序并再次单击链接-失败----(这是唯一失败的情况) 4)重复第3步-通过 - 工作正常 5)重复第3步 - 通过 - 工作正常

进一步调试,发现如下: 设备就绪:在插件上创建深度链接对象之前调用我的应用程序上的观察者 On Resume :在插件上创建深层链接对象后调用我的应用程序上的观察者。

为了解决这个问题,现在我已将我的 ondevice 就绪代码更改如下,并从 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】:

在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 深度链接平台,因为它做所有相同的事情以及一些额外的好处,如延迟深度链接和归因分析。

【讨论】:

以上是关于您如何处理深度链接插件中的简历场景?的主要内容,如果未能解决你的问题,请参考以下文章

您如何处理模型类中的外键关系

您如何处理 Apache Pig 中的空输入文件或丢失的输入文件?

您如何处理 Flash AS3 中的实时视频流?

您如何处理 REST API 服务器中的高吞吐量函数?

您如何处理源代码管理中的 Visual Basic 6.0 frm 和 frx 文件?

如何在 tkinter GUI 位于同一文件中的情况下运行 python 脚本?您如何处理用户条目?