mirror of
https://github.com/kuaifan/dootask.git
synced 2026-07-28 00:48:02 +00:00
新移动端 (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>
72 lines
2.4 KiB
PHP
72 lines
2.4 KiB
PHP
<?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)。
|
||
* - register:App 端登录后上报 deviceToken + userid,后端调 DooPush 设 userid 标签
|
||
* - unregister:App 端登出/换号时调用,后端调 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');
|
||
}
|
||
}
|