如何实现【讨论】APP免填邀请码的便捷注册方式?

摘要:00x0 具体需求 app中已注册的用户分享一个含有邀请码的二维码,分享到朋友圈新用户在朋友圈打开这个这个链接下载app.新用户安装后打开app后就自动绑定邀请码要求用户不填写任何东西 朋友老板出差给出的需求,感觉挺有意思……搞搞! 00x
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再进行一次签名。
阅读全文