00x0 具体需求

app中已注册的用户分享一个含有邀请码的二维码,分享到朋友圈
新用户在朋友圈打开这个这个链接下载app.
新用户安装后打开app后就自动绑定邀请码
要求用户不填写任何东西

朋友老板出差给出的需求,感觉挺有意思……搞搞!

00x1 初步分析

1.APP

2.无填写

3.打开APP自动绑定邀请码

新用户没有填写任何信息,也就是说没有任何有效标识能够识别该用户,我们最好的办法就是从其他地方寻找有效标识,必要时可添加一个标识……

00x2 解决方案

想了很多,从其他地方寻找有效标识虽然可行但不稳定,所以我们只能添加一个标识了,那我们在哪添加标识呢?APK!对,只有APK是我们能够掌握的。

先了解一下APK的结构:

APK其实就是一个压缩文件,但是与平常的压缩文件有所不同,将后缀名改为zip打开后我们就可以看到如上结构。

Assets目录,这是存放静态文件的目录,嗯哼?静态文件意味着我们可以任意修改的,可以说是对APK进行了一次简单的反编译。

我们在Assets目录放一个txt文件,暂且命名为key.txt,里面放上邀请码,然后用APP启动后读取该静态文件就可以知道是谁邀请的了。

00x3 实现

我们先写好一个app然后编译打包签名,得到一个APK文件,我们将该APK文件后缀改为ZIP留之待用,新用户通过邀请链接到达下载页面,后台取得请求中的邀请码将其写出为一个新的key.txt,然后将key.txt加入到ZIP文件覆盖原key.txt(待用的ZIP里可以不放key.txt),将ZIP的后缀改为APK后提供给用户下载。


  1. <?php
  2. /*
  3. php 添加一个文件到zip压缩文件中
  4. 参考代码
  5. 来源:https://www.jb51.net/article/62099.htm?tdsourcetag=s_pcqq_aiomsg
  6. */
  7. $zip = new ZipArchive;
  8. if ($zip->open('app.zip') === TRUE) {//app.zip 是已经存在的zip文件,注意中文文件名要注意编码问题
  9.     $zip->addFile('key.txt');//添加新的文件 具体路径自己来呗
  10.     $zip->close();
  11.     echo 'ok';
  12. } else {
  13.     echo 'failed';
  14. }
  15. ?>

00x4 问题

由于之前使用的安卓模拟器进行的测试所以在后续进行实机测试时才发现修改后的APK无法正常安装。

原因

谷歌的签名验证机制

Android 7.0之前的apk签名为v1方案(Jar Signature),Android 7.0之后推出了V2方案,且7.0之前是不支持V2的。

所以,我们之前那样直接修改后是不能直接用的(我使用的安卓模拟器没有签名验证),因此我们需要对我们修改后的APK再进行一次签名。

00x5 问题解决方案

使用Android studio自带的sdk中的apksigner.jar再次签名

apksigner具体使用文档: https://developer.android.com/studio/command-line/apksigner

apksigner sign --ks 签名文件 --ks-key-alias 证书名(别名) --ks-pass pass:签名密码 --key-pass pass:密匙密码 --out ouput.apk(输出路径) input.apk(输入路径)

或者使用jarsigner进行签名

jarsigner  -verbose  -keystore [您的私钥存放路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [您的证书名称]

#jarsigner的参数说明

-keystore 参数指定您的私钥的绝对路径,例如: C:\Users\wz\Desktop\sign_verification\abcAndroidKey.jks

-signedjar 参数指定签名后apk文件存放绝对的路径,例如 C:\Users\wz\Desktop\sign_verification\oppoemptyapk-      release-signed.apk

[未签名的文件路径] 指定要签名apk文件的绝对路径,也就是从要认领应用的平台下载到的,例如  C:\Users\wz\Desktop\sign_verification\oppoemptyapk-release-unsigned.apk

[您的证书名称] 是指您创建密钥时,您设置的证书名称,其实就是签名中的别名(即:keyAlias)

【讨论】APP的免填邀请码解决方案的更多相关文章

  1. 发现了一个App拉新工具:免填邀请码

    去年公司开始着手开发一个App项目,从调研到开发完成,前前后后历时快半年(没少加班),目前产品已经上架了各个应用市场,名字就不提了,省得说我打广告.今年开年说要开始做冷启动了,大家都知道,这才是最苦逼 ...

  2. 手机app传统邀请码安装与免邀请码安装区别,如何选择呢?

    App 邀请机制是每个产品几乎必做的功能点,它一般以两种形式存在:一是作为常置功能用于推荐,二是作为裂变活动用于邀请. 无论以哪种形式出现,都可以归为社交分享的一种表现方式.相较于营销推广,邀请好友机 ...

  3. 今日头条极速版邀请码以及其它APP邀请码大全

    现在大多手机新闻APP都需要输入码,在网上找了很久,最终找到一个比较全的文章,本人试过,都是可以使用的! 第1个比较好,可边看新闻,边收益!嘻嘻!平时写代码累了,休息刷一下!或者在睡觉前刷新一下,每天 ...

  4. 花生日记_花生日记APP下载_花生日记邀请码

    花生日记 国内领先的社交电商导购分享平台. 独创社交电商3+模式,社交+电商+社群,上线1个月注册用户超百万.合作商家涵括各个类目以及平台.为数万宝妈提供月收入3000以上兼职收入. 微信扫描下方二维 ...

  5. 斐讯 天天牛绑定教程 邀请码:8vozbf

    天天牛邀请码 8vozbf 可以领取4代牛 最近斐讯推出了天天牛养成计划. 不过官方没有任何的指示教程,所以个人分享一个教程给大家. 1. 先把把旧的钱包备份一下 ,切记!! 而且一定要记得自己设的密 ...

  6. 【原创】“借贷宝”砸钱,邀请码 GZZKZK2 (注册成功每人可得20现金,可直接提现)。。。而这只是开始

    作为IT/互联网资深码农的我,从专业技术角度剖析其流程,确认其各个环节控制严格,无欺诈嫌疑, 最佳运气邀请码 : GZZKZK2, 你在注册时值得拥有, 无邀请码无奖励, 亲一定要记住.对 APP操作 ...

  7. Python 练习册--生成唯一激活码(邀请码)

    题目是这样子的: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 分析 其实要生成 ...

  8. 借贷宝推广得现金是真的_注册就送人民币20元_邀请码CRJYQTK

    动动手指,20元立即到手.即优步uber打车和滴滴专车豪投数亿元争夺专车市场之后,一款名为借贷宝的APP推广在网上流传开来,目前主要看重的就是它的推广力度,豪投20亿让大众来推广.简单流程:下载借贷宝 ...

  9. C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! !

    原文:C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! ! 一般我们在开发Windows Phone 8 APP ,有时会需要超连结连到其他的网页,但 ...

随机推荐

  1. pvcreate vgcreate lvcreate 扩容

    centos6 服务器磁盘扩容 1.创建物理卷 /dev/sdb #pvcreate /dev/sdb 参数:/dev/sdb 设备名 2.创建卷组 vg_02 #vgcreate  vg_02  / ...

  2. Vue 基础自查——watch、computed和methods的区别

    1 前言 创建一个Vue实例时,可以传入一个选项对象 const vm = new Vue({ data: { msg: 'hello' }, computed: {}, methods: {}, w ...

  3. Linux&C open creat read write lseek 函数用法总结

    一:五个函数的参数以及返回值. 函数                                 参数                      返回值     open (文件名,打开方式以及读 ...

  4. 大白话讲解如何解决HttpServletRequest的请求参数只能读取一次的问题

    大家在开发过程中,可能会遇到对请求参数做下处理的场景,比如读取上送的参数中看调用方上送的系统编号是否是白名单里面的(更多的会用request中获取IP地址判断).需要对请求方上送的参数进行大小写转换或 ...

  5. LoadRunner12回放与录制

    系统版本 本人的操作系统是win10 版本是loadrunner12. 开启loadrunner自带的机票预订服务器 找到loadrunner自带的机票预订测试服务器下图中点击启动 如下图所示代表启动 ...

  6. 谷粒 | 18 | Hystrix熔断器

    Spring Cloud调用接口过程 Spring Cloud 在接口调用上,大致会经过如下几个组件配合: Feign ----->Hystrix ->Ribbon ->Http C ...

  7. kafka删除topic中的数据,适用于比较高的版本

    server.properties中增加选项 delete.topic.enable=true 修改之后重启kafka 进入kafka目录,输入命令 bin/kafka-topics.sh --zoo ...

  8. centos 添加sudo 权限

    https://apple.stackexchange.com/a/82527 visudo user1    ALL=(user2) NOPASSWD: /bin/bash amy  ALL=(AL ...

  9. java自定义序列化

    自定义序列化 1.问题引出 在某些情况下,我们可能不想对于一个对象的所有field进行序列化,例如我们银行信息中的设计账户信息的field,我们不需要进行序列化,或者有些field本省就没有实现Ser ...

  10. 菜鸡的Java笔记 第三十 - java 异常的捕获及处理

    异常的捕获及处理        1.异常的产生分析以及所带来的影响        2.异常的处理的基本格式        3.异常的处理流程        4.异常的处理模式        5.自定义 ...