dootask/app/Http/Controllers/Api/PushController.php
kuaifan 9151939ba5 feat(push): 移动端推送从友盟替换为 DooPush 通道
新移动端 (Expo App) 使用 doopush-react-native-sdk 完成设备注册;服务端
按 userid 标签 OR 并集定向推送,替代原友盟 alias 链路。

- 新增 app/Services/DooPushClient.php:DooPush 服务端 HTTP 客户端
  POST /apps/{appId}/push(按 tags 定向)
  POST /apps/{appId}/device-tags/{deviceToken}(绑定 userid 标签)
  DELETE 同上(解绑)
  X-API-Key 鉴权
- 新增 app/Module/Push/PushService.php:推送业务编排
  按 badge(未读数)分组合并下发,减少 HTTP 次数
- 新增 app/Http/Controllers/Api/PushController.php:设备注册/解绑接口
  api/push/register、api/push/unregister
- 修改 app/Models/UmengAlias.php:pushMsgToUserid 入口在
  DooPushClient::enabled() 时委托新通道,否则保留旧友盟链路
- 修改 config/dootask.php:新增 doopush 段(appId/apiKey/baseURL/tag_name)
- 修改 routes/web.php:注册 api/push/{method} 路由
- 同步 routes/api-map.md(doc:api-map 自动生成)

旧 EEUI App 推送链路完全不动;新 App 通过 .env 的 DOOPUSH_ENABLED=yes 启用。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-17 06:55:07 +00:00

72 lines
2.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Api;
use App\Module\Base;
use App\Module\Doo;
use App\Services\DooPushClient;
use Request;
/**
* 推送相关接口DooPush 通道)。
*
* 路由api/push/{method}(见 routes/web.php
* - registerApp 端登录后上报 deviceToken + userid后端调 DooPush 设 userid 标签
* - unregisterApp 端登出/换号时调用,后端调 DooPush 解除标签
*/
class PushController extends AbstractController
{
/**
* 绑定推送设备到当前会员(设置 DooPush userid 标签)。
*
* @apiParam {String} device_token DooPush SDK 注册返回的 deviceToken不是平台 token
*/
public function register__index()
{
$userid = Doo::userId();
$token = trim(Request::input('device_token', ''));
if ($token === '') {
return Base::retError('device_token 不能为空');
}
if (!DooPushClient::enabled()) {
return Base::retError('推送服务未启用');
}
try {
$resp = DooPushClient::setUserTag($token, $userid);
if (!$resp->successful()) {
return Base::retError('设置标签失败: ' . $resp->status());
}
} catch (\Throwable $e) {
return Base::retError('设置标签异常: ' . $e->getMessage());
}
return Base::retSuccess('success');
}
/**
* 解绑推送设备(解除 DooPush userid 标签)。
*
* @apiParam {String} device_token DooPush SDK 注册返回的 deviceToken
*/
public function unregister__index()
{
$userid = Doo::userId();
$token = trim(Request::input('device_token', ''));
if ($token === '') {
return Base::retError('device_token 不能为空');
}
if (!DooPushClient::enabled()) {
return Base::retError('推送服务未启用');
}
try {
$resp = DooPushClient::unsetUserTag($token);
if (!$resp->successful()) {
return Base::retError('解绑标签失败: ' . $resp->status());
}
} catch (\Throwable $e) {
return Base::retError('解绑标签异常: ' . $e->getMessage());
}
unset($userid); // 当前实现按 token 解绑;保留 userid 拉取以约束鉴权语义
return Base::retSuccess('success');
}
}