预览:
流程简要说明:
- 注册或购买一个
apple id
账户(广告位招租) - 购买软件礼品卡喂给
apple id
(广告位招租) - 注册或购买一个
google voice
账户(广告位招租) - 在
appleid.apple.com
登录你的apple id
开启两步认证 - 绑定手机号时,使用你
google voice
账户持有的号码 - 参考文档,将此项目部署完成,然后将网站链接发给用户
- 用户登录时在网站获取验证码,便可完成登录
一.配置账户
1.使用你的 google voice 账户登录 GCP 控制面板:cloud.google.com
2.登录后,在左侧侧边栏找到 api和服务
,点击子项 oauth同意屏幕
3.点击右侧的 创建项目 按钮
4.项目名称和位置用默认填写的就行,然后点击创建
5.等待页面加载完成,User Type 选外部
6.应用名称
(随便);用户支持地址邮件
选你的账户;已获授权的网域
填你的域名(如果你的域名是 my.domain.com 这种子域名,填 domain.com 就行);开发者联系信息
填你的账户;点击 保存并继续。
7.范围页面无需设置,直接点击 保存并继续
8.添加测试用户
,输入你的 google voice
账户邮箱
9.点击凭据 -> 创建凭据 -> oauth
10.应用类型
:web应用
;授权js来源
填写你的域名
(如果你的域名是 my.domain.com 这种子域名,那就填 my.domain.com,!和上面的填法不一样!带http或https);授权重定向url
填写你的域名
,并在末尾加上 /callback
(如果你的域名是 my.domain.com 这种子域名,那就填 my.domain.com/callback)
11.等待创建完成,然后在弹出的对话框中,点击下载 json
文件;将文件重命名为 credentials.json
后上传到网站根目录。
12.顶部搜索框搜索 gmail api
;点击第一个搜索结果,点击启用
13.左侧侧边栏找到 api和服务
,回到 oauth同意屏幕
页面。点击发布应用
,把测试版
变成正式版
二.配置网站
1.宝塔新建网站,解析域名。
2.网站配置:
- 网站目录加上
/public
- 移除防跨站
- 伪静态选择
thinkphp
- 确保PHP这些函数没有被禁用:
putenv
proc_open
proc_get_status
3.CD到网站目录。拉取代码
git clone https://github.com/AppleIdLoginHelper/LoginHelper
4.安装 composer 命令(已安装可跳过)
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
5.安装依赖包
composer install
6.授权
chmod 755 -R *
chown www -R *
7.复制配置文件
cp .example.env .env
8.编辑配置文件,配置数据库
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = 你的数据库名称
USERNAME = 数据库用户
PASSWORD = 数据库用户密码
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
9.配置其他选项
[OTHER]
AUTO_REFRESH = false
REFRESH_INTERVAL = 5
BLOCK_WEBSITE_LOGIN = false
BLOCK_ICLOUD_LOGIN = false
AUTO_REFRESH
网页自动刷新开关,开启需改为true
REFRESH_INTERVAL
如果开启网页自动刷新,则每隔几秒刷新一次BLOCK_WEBSITE_LOGIN
是否拦截官网登录验证码(appleid.apple.com),开启需改为true
BLOCK_ICLOUD_LOGIN
是否拦截网页icloud登录验证码(icloud.com),开启需改为true
10.新建数据库(和前面配置匹配),导入/database/verify.sql
下的数据库。
11.进入控制器目录app/controller
,编辑文件 Index.php
// 开了 oauth2.0 的 gmail 账户 也是接收其他 gmail 转发邮件的收件箱
$email_address = '';
// '你买的有google voice号的gmail账户' => '(对应下载的软件名称或其他备注) 绑定这个gv号的apple id账户',
$email_correspondence = [
'' => '',
];
$email_address
就是你的 google voice 账户$email_correspondence
是为了解决多个 apple id 共用一个面板设计的
情境假设
- 你有两个 apple id ,一个可以下载应用 app_a,一个可以下载应用 app_b
- 你的 google_voice_1 账户持有的电话号码绑定了可以下载 app_a 的 apple_id_a
- 你的 google_voice_2 账户持有的电话号码绑定了可以下载 app_b 的 apple_id_b
- 你开启了 oauth2.0 的 google voice 账户是 google_voice_1
- 修改 google_voice_2 账户的设置,将邮件转发到 google_voice_1 账户
- 那么你应该这么配置上面的代码
$email_address = '<google_voice_1>';
$email_correspondence = [
'<google_voice_1>' => '(app_a) <apple_id_a>',
'<google_voice_2>' => '(app_b) <apple_id_b>',
];
- 如果你只有一个 apple id ,填写模板是
$email_address = '<google_voice_1>';
$email_correspondence = [
'<google_voice_1>' => '(app_a) <apple_id_a>',
];
- 填写示范
$email_address = 'appleid@gmail.com';
$email_correspondence = [
'appleid@gmail.com' => '(netflix) apple@icloud.com',
];
12.在网站目录下执行,复制生成的链接,在浏览器中粘贴访问
php quickstart.php
13.授权谷歌 Google 验证
- 选择当前登录的账户
- 会提示
此应用未经 Google 验证
- 点左边的
高级
(不是那个大的蓝色按钮) - 再点击
转到你的域名
- 授予 gmail 应用访问权限
- 会重定向到你的网站,根据页面提示操作
14.最后授权完成,会显示callback
字符,粘贴到ssh,回车。
12.然后正常情况下应该是返回
大功告成!访问 https://your.domain.com/test
浏览效果吧!
故障排查
- 提示:mkdir(): permission denied
进入网站根目录,执行
chmod 755 -R *
chown www -R *
- 未定义数组索引: messages
收件箱需要有至少一封包含关键词 Apple Id 的邮件。一般来说 google voice 收到的短信都会自动转发到 gmail 收件箱中
- 我想要修改 google voice 账户登录密码
可以,但修改完成后,需要重新执行授权。进入网站根目录,执行:
rm -rf token.json
php quickstart.php
- mysql 1366 incorrect string value
更新到最新 commit
即可
- 方法不存在:app\controller\Index->index()
访问网站的路径是 /test
- Token has been expired or revoked.
在GCP控制台将应用发布成正式应用,token便可长期有效
- 账户列显示 unknow
$email_correspondence
配置存在问题,程序不知道邮箱验证码应该分配给哪一个 Apple ID。
解决方法:
- 情况1:对照邮箱大小写是否一致
- 情况2:是否开启里宝塔防篡改。如开启,请关闭。
- 情况1:对照邮箱大小写是否一致
后续建议
1.关闭 debug 模式
虽然使用的是最新 thinkphp
版本,但是为了安全,仍建议关闭调试模式
- 进入网站根目录
- 编辑
.env
- 将
APP_DEBUG = true
改成APP_DEBUG = false
2.修改网站路径
默认路径是 test
,为了确保只有你和用户知道这个地址,建议修改
- 进入网站根目录
- 进入
route
目录 - 编辑
app.php
- 将第一个
test
改成其他字符串
例如,将Route::get('/test', 'index/test');
——改成——>Route::get('/amdyes', 'index/test');