feat(push): 新增设备推送和测试功能
- 新增基于设备令牌的推送通知接口 - 添加推送测试服务,支持应用启动时自动测试 - 新增推送测试文档说明 - 更新 APNS 配置和日志记录 - 迁移至 apns2 库的 PushType 枚举 - 替换订阅密钥文件 - 添加项目规则文档
This commit is contained in:
@@ -20,12 +20,11 @@ export class PushTokenService {
|
||||
*/
|
||||
async registerToken(tokenData: RegisterDeviceTokenDto, userId?: string): Promise<UserPushToken> {
|
||||
try {
|
||||
this.logger.log(`Registering push token for user ${userId}`);
|
||||
this.logger.log(`Registering push token for device ${tokenData.deviceToken}`);
|
||||
|
||||
// 检查是否已存在相同的令牌
|
||||
const existingToken = await this.pushTokenModel.findOne({
|
||||
where: {
|
||||
userId,
|
||||
deviceToken: tokenData.deviceToken,
|
||||
},
|
||||
});
|
||||
@@ -41,7 +40,7 @@ export class PushTokenService {
|
||||
lastUsedAt: new Date(),
|
||||
});
|
||||
|
||||
this.logger.log(`Updated existing push token for user ${userId}`);
|
||||
this.logger.log(`Updated existing push token for device ${tokenData.deviceToken}`);
|
||||
return existingToken;
|
||||
}
|
||||
|
||||
@@ -58,10 +57,10 @@ export class PushTokenService {
|
||||
lastUsedAt: new Date(),
|
||||
});
|
||||
|
||||
this.logger.log(`Successfully registered new push token for user ${userId}`);
|
||||
this.logger.log(`Successfully registered new push token for device ${tokenData.deviceToken}`);
|
||||
return newToken;
|
||||
} catch (error) {
|
||||
this.logger.error(`Failed to register push token for user ${userId}: ${error.message}`, error);
|
||||
this.logger.error(`Failed to register push token for device ${tokenData.deviceToken}: ${error.message}`, error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@@ -322,4 +321,34 @@ export class PushTokenService {
|
||||
this.logger.error(`Failed to update last used time: ${error.message}`, error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 直接停用设备令牌(不需要用户ID)
|
||||
*/
|
||||
async deactivateToken(deviceToken: string): Promise<void> {
|
||||
try {
|
||||
this.logger.log(`Deactivating push token: ${deviceToken}`);
|
||||
|
||||
const token = await this.pushTokenModel.findOne({
|
||||
where: {
|
||||
deviceToken,
|
||||
isActive: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (!token) {
|
||||
this.logger.warn(`Device token not found or already inactive: ${deviceToken}`);
|
||||
return;
|
||||
}
|
||||
|
||||
await token.update({
|
||||
isActive: false,
|
||||
});
|
||||
|
||||
this.logger.log(`Successfully deactivated push token: ${deviceToken}`);
|
||||
} catch (error) {
|
||||
this.logger.error(`Failed to deactivate push token: ${deviceToken}: ${error.message}`, error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user