h5跳转到 苹果 ios app store 应用商店 的APP详情页面

在开发  h5跳转到 ios系统 app store的时候遇到两个问题

原理

  1. 判断是安卓还是苹果,如果为苹果显示苹果的标签,点击a标签,执行跳转唤起APP(openAPP),加一个定时器,三秒(可根据需求调整)之后,如果没有唤起成功,跳转到App Store下载页面。
  2. 不管iOS还是Android,浏览器都不可能预知本地是否安装了某个APP的。或者更严谨地说,我们不能通过浏览器来预知本地是否安装。因为就算浏览器可以读取本地应用的安装列表,但是目前也没任何一家浏览器提供查询的API,所以这条路是走不通的。

问题 1

ios中是不能通过window.location.href来跳转的。浏览器会报非法地址。

解决

插入a标签模拟点击事件。

问题 2

ios跳转到app之后,之后的还会执行再继续打开app store

解决

通过document.webkitHidden判断是否是visibilitychange  窗口不可见

 

if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {
        var loadDateTime = new Date();
        
        //ios9可以通过配置一个已有的链接打开app,需要给服务器上传一个校验文件
        // window.location.href = 'https://www.umacaroon.com';

        $('body').append("<a id='to_ios_app' href='ios跳转app链接'></a>")
        var obj = document.getElementById('to_ios_app');
        obj.click();

        //会提示此链接非私人链接

        //目前还有一个问题需要用iframe来解决,到时候补充

        setTimeout(function () {

            // window.alert(document.webkitHidden)
            // window.location = 'https://itunes.apple.com/app/id1271022527?mt=8'
            
            //判断是不是可见
            if (typeof document.webkitHidden === 'undefined') {
                $('body').append("<a id='to_ios_market' href='https://itunes.apple.com/app/id1271022527?mt=8'></a>")
                var obj = document.getElementById('to_ios_market');
                obj.click();
            }
        }, 600);
    } 

 

要实现H5跳转APP指定页面,需要在APP中配置对应的Scheme URL,并在H5中通过该URL来触发跳转。以下是一个示例代码: ``` // H5页面中的代码 function jumpToApp() { var schemeUrl = "myapp://page?id=123"; // 这里的URL需要根据实际情况进行修改 window.location.href = schemeUrl; } // APP中的代码 // iOS // 在Info.plist文件中添加以下代码 <key>LSApplicationQueriesSchemes</key> <array> <string>myapp</string> // 这里的myapp需要和H5中的schemeUrl保持一致 </array> // 在AppDelegate.m中添加以下代码 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { NSString *scheme = [url scheme]; if ([scheme isEqualToString:@"myapp"]) { NSString *host = [url host]; NSString *path = [url path]; // 根据host和path来判断跳转到哪个页面 ... return YES; } return NO; } // Android // 在AndroidManifest.xml中添加以下代码 <activity android:name=".MainActivity" android:launchMode="singleTask" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="myapp"/> // 这里的myapp需要和H5中的schemeUrl保持一致 </intent-filter> </activity> // 在MainActivity中添加以下代码 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); String scheme = intent.getScheme(); if ("myapp".equals(scheme)) { String host = intent.getData().getHost(); String path = intent.getData().getPath(); // 根据host和path来判断跳转到哪个页面 ... } } ``` 以上是一个基本的实现方式,具体的实现需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间在飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值