移动互联网时代,一个APP的平均推广成本早已经超过了10块。而推广通常分二类:

1、已经下载过的用户,可以直接打开应用(一般人的手机上安装的应用都非常多,要快速找到某个应用是很困难的事情,而且Android、IOS的搜索都做的很烂~ ~ );

2、未下载过的用户,跳转至下载页;

 

手机设备又分为Android、iOS二大阵营,而原理基本上就是通过url scheme来实现:

 

浏览器中直接打开

Android:market://details?id=<package_name>

官方文档: http://developer.android.com/distribute/tools/promote/linking.html  (需要翻墙),它会弹出一个中间页,中间页会显示一个“安装”或“打开”按钮。中国的Android市场太过混乱,好在大家都支持Google官方的这个market协议,建议直接用这个。

 

如果是一个叫A的app想提示下载另外一个B的app,可以参考下面的代码:

private String getGooglePlayStoreUrl(){
    String id = activity.getApplicationInfo().packageName; // current google play is   using package name as id     PackageManager packageManager = activity.getApplicationContext().getPackageManager();
    Uri marketUri = Uri.parse("market://details?id=" + id);
    Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(marketUri);
    if (marketIntent.resolveActivity(packageManager) != null)
      return "market://details?id=" + id;
    else
      return "https://play.google.com/store/apps/details?id=" + id;
}
 
想对用户更友好一点:如果已安装就直接启动应用(跳过上面的中间页)或者未安装时跳到下载界面,可以自己在应用中注册一个自定义的url scheme,然后调用APP自定义的链接,在超过一定时间后(假设500毫秒后)没有响应,就直接跳到下载界面。

iOS
1) 直接跳转浏览器 https://itunes.apple.com/cn/app/idxxx 已安装的话就会显示“打开”,未安装就会提示“下载”;
2) 直接使用APP自己注册的url scheme(前提是你必须已经安装了该APP);
 
iOS9中在应用A中想判断应用B是否已经安装/可直接启动,需要在Info.plist中添加白名单,可自行搜索。
 
想对用户更友好一点:如果已安装就直接启动应用(跳过上面的中间页)或者未安装时跳到下载界面,一样也是使用延时来处理。原理与Android一样,先调用自定义的url scheme,在超过一定时间,假定3S后没有响应,就直接跳到下载页。
 
 
微信扫一扫功能
单独把微信拿出来,是因为做了很多限制,而且因为微信用户群体太过庞大,不得不专门处理。
拿上面的market://details?id=<package_name>来讲,你生成二维码,微信根本就扫不出来。怎么办呢?
 
 
那问题又来了,我怎么知道玩家是通过微信扫一扫过来的啊,很简单。判断HTTP请求的User-Agent
var ua = navigator.userAgent.toLowerCase();
if (/micromessenger/i.test(ua)) {
    //在微信中被打开的...
}

比如Java、Node.js也是类似了,获取HTTP头HTTP_USER_AGENT判断一下即可

可参考:如何判断微信内置浏览器>>

 

=====================================

总结,保守一点就是无论是否安装过应用,浏览器直接访问下面的地址,会打开中间页(Android某个应用商店或iOS的App Store):

Android  market://details?id=<package_name>

iOS https://itunes.apple.com/cn/app/idxxx

但都会遇到被微信拦截的问题。想不被拦截就只能按官方的流程走下去。

 

如果想做到,安装过应用就直接启动,没安装就跳到下载页,思路就是优先使用APP的自定义scheme来尝试打开应用,在超过一定时间后(假设3S)就将网页跳到下载页(就算时间过短了,反正这个中间页也有按钮可以直接打开应用)。

网页二维码推广App的实现的更多相关文章

  1. 使用扫描二维码打开app

    应该不少人遇到过这种需求,扫描二维码打开app如果用户没有这个app则提示它跳转. 用网页直接来调用app是不打可能的,必须原生那边先做一些配置. 首先,安卓和苹果的调用方法是不同的. 所以我们需要先 ...

  2. 手机扫描二维码下载APP,根据操作系统不同自动下载

    Android和IOS手机扫描二维码下载APP,根据OS不同,自动处理相应下载操作.IOS自动跳转至AppStore应用下载页,Android自动下载应用的apk包. <script type= ...

  3. 生成扫描二维码下载app的二维码的方法

    进入APP store苹果应用程序商店,根据分类找到你要生成二维码的APP,然后在浏览器连接里找到ID后的一串数字就是APP的应用ID了. 安卓系统的appid 在电脑浏览器中打开应用宝官网,http ...

  4. android扫描网页二维码进行网页登录

    转载请标明出处: http://www.cnblogs.com/dingxiansen/: 本文出自:丁先森-博客园 周六和朋友去网吧开黑,开机打开TGP,朋友那边开始输入账号密码,我看了他一眼low ...

  5. 微信小程序二维码推广统计

    微信小程序可以通过生成带参数的二维码,那么这个参数是可以通过APP的页面进行监控的 这样就可以统计每个二维码的推广效果. 今天由好推二维码推出的小程序统计工具HotApp小程序统计也推出了带参数二维码 ...

  6. jQuery.qrcode二维码插件生成网页二维码

    如果是一个固定的二维码,我们只需要在网上找个地方生成图片,然后放上图片就可以了.但如果是地址不固定需要根据页面来生成的话.就有两种做法,一个是后端根据页面做一个动态的二维码.一种是前端使用插件生成. ...

  7. h5 扫描二维码打开app和点击下载功能的实现

    window.onload = function () { jumpToapp() } var browser = { isAndroid: function () { return navigato ...

  8. 关于APP上架制作二维码相关

    1.安卓版本APP上架并生成二维码问题:安卓版本上架国内市场,这个情况比较复杂一些,比如百度,网址是以上传APP生成的一个编号来进行的,每次升级更新后都发生了变化,也就相当于每次升级后网址发生改变(比 ...

  9. 如何用C代码生成二维码

    如何用C代码生成二维码 当下因微信和支付宝等手机应用广泛使用,而基于二维码/一维条码的移动支付,也借助手机移动端席卷全国,使得越来越多的人知道有"二维码"这么一种东西. 对于普通用 ...

随机推荐

  1. js中实现字母大小写转换

    js中实现字母大小写转换主要用到了四个js函数: 1.toLocaleUpperCase  2.toUpperCase3.toLocaleLowerCase4.toLowerCase 下面就这四个实现 ...

  2. 【java】:定时任务

    PS:转 http://blog.csdn.net/lotusyangjun/article/details/6450421/

  3. hdu 1231

    最大连续子序列 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  4. xtrabackup工具

    xtrabackup是基于InnoDB存储引擎灾难恢复的.它复制InnoDB的数据文件,尽管数据文件在内部是非一致性的,但在执行灾难恢复时可以保证这些数据文件是一致的,并且可用. 官方原理 在Inno ...

  5. Java入门1day

    Java安装及环境变量配置 1.安装 2.环境变量配置 1) 右击"计算机"-->属性(R)-->高级系统设置-->高级-->环境变量 2) 系统变量(或用 ...

  6. 嵌入式系统coredump设计

    阴沟翻船,马失前蹄,说明凡事皆有可能.自然,程序设计的再好,也会有crash的时候.开发期还还说,正式交付的系统crash自然更是难以承受的.无论何时,死一次就够了,得有方法查个水落石出. 几年前哥去 ...

  7. IIS Connection Timeout vs httpRuntime executionTimeout

    IIS Connection Timeout specifies how long, in seconds, should the code wait before timing out from t ...

  8. Android--入门

    之前自己在学校写过一些安卓应用,那时候没有系统地学过安卓,用到什么就网上找博客.找Demo,然后自己跟着敲一遍,有些东西也不太理解,现在打算做android开发这一块了,趁毕业之前赶紧多学些技术.先是 ...

  9. C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明. ● itoa():将 ...

  10. C#函数式编程之标准高阶函数

    何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的.只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内.那么我们就将这类函数叫做高阶函 ...