【讨论】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 ,有时会需要超连结连到其他的网页,但 ...
随机推荐
- 树莓派-openeuler安装
一.安装准备 1.硬件安装 2.下载openeuler镜像 3.sd卡格式化 sd格式化工具 4.镜像校验 二.镜像烧写 选择树莓派官方烧写工具,耐心等待... 三.网络配置 1.寻找树莓派的ip地址 ...
- 《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)
1.简介 我们在实际工作中,有可能遇到有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据.网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期.这 ...
- java实现微信分享
之前项目中涉及到了微信分享的功能,然后总结下供有需要的朋友参考下. 在做之前可以先看下<微信JS-SDK说明文档>,大致了解下.我自己的工程目录是 1.HttpService和HttpSe ...
- Java 在PPT中创建散点图
本文将以Java代码示例展示如何在PPT幻灯片中创建散点图表. 创建图表前 需要在Java程序中导入用于操作PPT的jar包 Free Spire.Presentation for Java.可参考如 ...
- k8s入坑之路(5)kube-apiserver详解
API Server kube-apiserver 是 Kubernetes 最重要的核心组件之一,主要提供以下的功能 提供集群管理的 REST API 接口,包括认证授权.数据校验以及集群状态变更等 ...
- SpringBoot 中发布ApplicationEventPublisher,监听ApplicationEvent 异步操作
有这么一个业务场景:当用户注册后,发送邮件到其邮箱提示用户进行账号激活,且注册成功的同时需要赠送新人用户体验卡券. 业务有了,那么问题也就来了. What? 问题....问题?我听说你有问题? 来拔刀 ...
- 输入指令npx webpack-dev-server报错:Error: Cannot find module ‘webpack-cli/bin/config-yargs‘的解决方法
输入指令npx webpack-dev-server报错:Error: Cannot find module 'webpack-cli/bin/config-yargs'的解决方法 输入指令:npx ...
- 菜鸡的Java笔记 - java 枚举
枚举 枚举属于加强版的多例设计模式 多例设计模式与枚举 多例设计模式的本质在于构造方法的私有化.而后在类的内部产生若干个实例化对象,随后利用一个 st ...
- eclipse下的python环境安装
添加python开发环境到eclipse: 点击help--install New Software 点击add,弹出新窗口: Name:填PyDev Location:填 http://pyde ...
- 菜鸡的Java笔记 第十六 - java 引用传递
referenceDelivery 引用传递是整个java 的精髓,也是所有初学者最难学的地方 引用的本质:同一块堆内存可以被不同的栈内存所指向 下面通过三道程序来进行引用传 ...