iosafari中的Javascript后台进程

iosafari中的Javascript后台进程,javascript,jquery,ios,background-process,deep-linking,Javascript,Jquery,Ios,Background Process,Deep Linking,如果用户已在其设备中安装了应用程序,我会尝试将其重定向到应用程序,否则会将其重定向到应用程序下载页面(iTunes)。 我想捕获客户端最后到达的确切url(应用程序url或web url) 是否有任何后台进程来捕获客户端显示的url if (IOSSafari) { window.location.href = appUrl; var startTime = new Date(); setTimeout(function() {

如果用户已在其设备中安装了应用程序,我会尝试将其重定向到应用程序,否则会将其重定向到应用程序下载页面(iTunes)。 我想捕获客户端最后到达的确切url(应用程序url或web url)

是否有任何后台进程来捕获客户端显示的url

if (IOSSafari) 
{    
    window.location.href = appUrl;
    var startTime = new Date();
    setTimeout(function() 
    {                
        if (new Date() - startTime < 600) 
        {                 
            if (window.location.href != webUrl) 
                window.location.href = webUrl;
        }
    }, 500);
}
if(iosafari)
{    
window.location.href=appUrl;
var startTime=新日期();
setTimeout(函数()
{                
如果(新日期()-开始时间<600)
{                 
如果(window.location.href!=webUrl)
window.location.href=webUrl;
}
}, 500);
}
我的尝试(我尝试如下):-

if(iosafari)
{    
回调(appUrl);//第一次回调到我的服务器以识别用户的存在
window.location.href=appUrl;
var startTime=新日期();
setTimeout(函数()
{                
如果(新日期()-开始时间<600)
{                 
如果(window.location.href!=webUrl)
{
//对我的服务器进行第二次回调,以识别用户是否存在
回调(appUrl);
window.location.href=webUrl;
}
}
}, 500);
}
案例1应用程序已安装:-

  • 用户A进入
  • 我的第一次回调有效,用户被重定向到应用程序
  • 现在,表中只有一个条目包含用户A的appUrl。由于用户在应用程序(appUrl)中显示,所以这项工作正常
  • 未安装案例2应用程序:-

  • 用户A进入
  • 我的第一次回调有效,用户被重定向到应用程序
  • 由于该应用程序未出现在设备中,它表示safari无法打开此页面
  • 第二次回调有效,用户重定向到应用程序下载页面
  • 现在表中有2个条目(带有appUrl的条目和带有webUrl的条目)供用户A使用,而不是单个条目(由于用户在下载页面中出现,所以带有webUrl的条目)

  • 获取该值的一个最简单的方法是使用客户端cookie

    document.cookie="lasturl="+xyz+";path=/";
    //xyz is webUrl or appUrl , so write the above line before calling window.location.href=...
    
    document.cookie="lasturl="+deeplinkUrl+";path=/";
    window.location.href=deeplinkUrl;
    
    //or
    
    document.cookie="lasturl="+webUrl+";path=/";
    window.location.href=webUrl;
    

    稍后,您可以在下面的代码中检查“lasturl”的cookie值,并使用一个名为“token”的随机值创建一个新参数

    if (IOSSafari) {    
            callback(appUrl); // first callback to my server to identify the user presence
            var tokenID=parseInt(Math.random()*100000);
            window.location.href = appUrl+"?token="+tokenID;
            var startTime = new Date();
            setTimeout(function() {                
                if (new Date() - startTime < 600) {                 
                    if (window.location.href != webUrl) {
                       callback(appUrl); // second callback to my server to identify the user presence 
                       window.location.href = webUrl+"?token="+tokenID;
                    }
                }
            }, 500);
     }
    
    if(iosafari){
    回调(appUrl);//第一次回调到我的服务器以识别用户的存在
    var tokenID=parseInt(Math.random()*100000);
    window.location.href=appUrl+“?token=“+tokenID;
    var startTime=新日期();
    setTimeout(函数(){
    如果(新日期()-startTime<600){
    如果(window.location.href!=webUrl){
    回调(appUrl);//对我的服务器进行第二次回调以标识用户的存在
    window.location.href=webUrl+“?token=“+tokenID;
    }
    }
    }, 500);
    }
    
    设计“webUrl”时,它可以完成两项任务:

  • 删除表中令牌ID=XXXXX的现有条目[注意,两次传递的令牌值XXXXX相同]

  • 重定向到应用程序下载url


  • 这样,表中只有一个条目,因为“webUrl”负责删除由令牌ID标识的不必要的先前条目。

    对于AppStore链接,有一个跟踪url,该url在记录事件后仅重定向到iTunes

    对于正在安装的应用程序,当它注意到您的网站已打开应用程序ping时,您是否可以将其设置为跟踪url?(这在技术上是可行的,但需要iTunes上的应用程序更新包含代码才能做到这一点)

    当应用程序获得:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    

    谢谢如果重定向到应用程序成功完成,那么我们如何获得cookie值,因为我们在本机应用程序中而不是在浏览器中?@DurgaGanesh:原始问题:“我想捕获准确的url”;没有说明本机应用程序可以使用的信息。请提供详细的背景资料;避免XY问题-@Ruud谢谢。请查看我的编辑。在用户重定向到本机应用程序后,我可以调用回调吗?依我看这是不可能的。如果我是对的,那么什么是另一种聪明的预测方法?(给自己取了一个新名字?@unaccessible:很抱歉这么说,但即使在编辑之后,也没有真正的问题。您说您的回调可以工作,从而在后端生成(可能可以区分的)日志条目。请说明你的问题。试着想象我不是通灵者。@Ruud谢谢你对我的兴趣。我的问题是如何跟踪用户是否重定向到应用程序或下载页面?它不可靠。这会导致不必要的工作。但我喜欢你的思维方式。谢谢我需要防止在数据库中保存额外的条目。而且我的客户端更喜欢日志而不是数据库。我不认为我们可以在两个条目在那里注册后修改日志。
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation