预览:


流程简要说明:

  • 注册或购买一个 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。00.png

  • 解决方法:

    • 情况1:对照邮箱大小写是否一致 02.png
    • 情况2:是否开启里宝塔防篡改。如开启,请关闭。03.png

后续建议

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');

3.设置邮件转发

参考官方教程 https://support.google.com/mail/answer/10957

最后修改:2022 年 06 月 29 日
如果觉得我的文章对你有用,请随意赞赏