【讨论】APP的免填邀请码解决方案
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后提供给用户下载。
<?php
/*
php 添加一个文件到zip压缩文件中
参考代码
来源:https://www.jb51.net/article/62099.htm?tdsourcetag=s_pcqq_aiomsg
*/
$zip = new ZipArchive;
if ($zip->open('app.zip') === TRUE) {//app.zip 是已经存在的zip文件,注意中文文件名要注意编码问题
$zip->addFile('key.txt');//添加新的文件 具体路径自己来呗
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
?>
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的免填邀请码解决方案的更多相关文章
- 发现了一个App拉新工具:免填邀请码
去年公司开始着手开发一个App项目,从调研到开发完成,前前后后历时快半年(没少加班),目前产品已经上架了各个应用市场,名字就不提了,省得说我打广告.今年开年说要开始做冷启动了,大家都知道,这才是最苦逼 ...
- 手机app传统邀请码安装与免邀请码安装区别,如何选择呢?
App 邀请机制是每个产品几乎必做的功能点,它一般以两种形式存在:一是作为常置功能用于推荐,二是作为裂变活动用于邀请. 无论以哪种形式出现,都可以归为社交分享的一种表现方式.相较于营销推广,邀请好友机 ...
- 今日头条极速版邀请码以及其它APP邀请码大全
现在大多手机新闻APP都需要输入码,在网上找了很久,最终找到一个比较全的文章,本人试过,都是可以使用的! 第1个比较好,可边看新闻,边收益!嘻嘻!平时写代码累了,休息刷一下!或者在睡觉前刷新一下,每天 ...
- 花生日记_花生日记APP下载_花生日记邀请码
花生日记 国内领先的社交电商导购分享平台. 独创社交电商3+模式,社交+电商+社群,上线1个月注册用户超百万.合作商家涵括各个类目以及平台.为数万宝妈提供月收入3000以上兼职收入. 微信扫描下方二维 ...
- 斐讯 天天牛绑定教程 邀请码:8vozbf
天天牛邀请码 8vozbf 可以领取4代牛 最近斐讯推出了天天牛养成计划. 不过官方没有任何的指示教程,所以个人分享一个教程给大家. 1. 先把把旧的钱包备份一下 ,切记!! 而且一定要记得自己设的密 ...
- 【原创】“借贷宝”砸钱,邀请码 GZZKZK2 (注册成功每人可得20现金,可直接提现)。。。而这只是开始
作为IT/互联网资深码农的我,从专业技术角度剖析其流程,确认其各个环节控制严格,无欺诈嫌疑, 最佳运气邀请码 : GZZKZK2, 你在注册时值得拥有, 无邀请码无奖励, 亲一定要记住.对 APP操作 ...
- Python 练习册--生成唯一激活码(邀请码)
题目是这样子的: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 分析 其实要生成 ...
- 借贷宝推广得现金是真的_注册就送人民币20元_邀请码CRJYQTK
动动手指,20元立即到手.即优步uber打车和滴滴专车豪投数亿元争夺专车市场之后,一款名为借贷宝的APP推广在网上流传开来,目前主要看重的就是它的推广力度,豪投20亿让大众来推广.简单流程:下载借贷宝 ...
- C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! !
原文:C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! ! 一般我们在开发Windows Phone 8 APP ,有时会需要超连结连到其他的网页,但 ...
随机推荐
- python中将xmind转成excel
需求:最近公司项目使用tapd进行管理,现在遇到的一个难题就是,使用固定的模板编写测试用例,使用excel导入tapd进行测试用例管理,觉得太过麻烦,本人一直喜欢使用导图来写测试用例,故产生了这个工具 ...
- 如何系统学习C 语言(中)之 指针篇
谈到指针,我们可能会想到钟表上的指针,但这里的指针不是现实生活中看得见摸得着的钟表上的指针,c 语言中的指针只存在于逻辑思维中,物理上并不存在. 同时,指针也是C 语言中最精华的部分,通过灵活地运用指 ...
- python编程中的流程控制
内容概要 成员运算 身份运算 流程控制 详细 1.成员运算 定义:判断某个个体在不在某个群体内 关键词:in(在) /// not in(不在) 例: num_list = [1, 2, 3, 4, ...
- pip切换源
pip国内的一些镜像 阿里云http://mirrors.aliyun.com/pypi/simple/ 中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/ ...
- loadruuner12基准测试流程
基准测试:单用户测试 一.归纳基准测试: 方法一:单用户循环5次 1.调试好脚本(加检查点,在VuGen中运行成功) 2.打开控制台,设置Run-time Settings 3.迭代次数:5 4.Pa ...
- PHP、TP6框架及JavaScript的单步调试
目录 一.PHP程序的调试 1. 单个PHP程序的调试 2. PHP框架代码的调试 二.JavaScript程序的调试 三.总结 参考资料:https://www.bilibili.com/video ...
- Part 27 Remove # from URL AngularJS
There are 4 simple steps to remove # from URLs in Angular. Step 1 : Enable html5mode routing. To do ...
- Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑
Django 小实例S1 简易学生选课管理系统 第6节--实现登录逻辑 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 业务逻辑 本教程第四节里 ...
- ECharts 点击事件
一个问题 ECharts 点击出现多个弹窗
- 日志收集之rsyslog to kafka
项目需要将日志收集起来做存储分析,数据的流向为rsyslog(收集) -> kafka(消息队列) -> logstash(清理) -> es.hdfs: 今天我们先将如何利用rsy ...