feat(push): 添加多厂商推送集成支持
- 实现了华为 HMS 推送服务集成 - 实现了小米推送服务集成 - 实现了 OPPO 推送服务集成 - 实现了 vivo 推送服务集成 - 实现了荣耀推送服务集成 - 实现了 FCM 推送服务集成 - 添加了统一的厂商推送接口和检测机制 - 添加了推送配置 API 和存储管理 - 添加了推送令牌管理和设备注册功能 - 添加了模拟器环境的推送测试用例
这个提交包含在:
父节点
f423a2acb2
当前提交
60171ed90c
2
.hvigor/cache/file-cache.json
vendored
2
.hvigor/cache/file-cache.json
vendored
文件差异因一行或多行过长而隐藏
2
.hvigor/cache/task-cache.json
vendored
2
.hvigor/cache/task-cache.json
vendored
文件差异因一行或多行过长而隐藏
@ -32,20 +32,20 @@
|
||||
"IS_HVIGORFILE_TYPE_CHECK": false,
|
||||
"TASK_TIME": {
|
||||
"923fe53966c6cd9343e11af776cd4b05be315ea4b200b02e4d5dfb0f929b73bf": {
|
||||
"CreateModuleInfo": 591083,
|
||||
"PreCheckSyscap": 186208,
|
||||
"ProcessIntegratedHsp": 333500,
|
||||
"SyscapTransform": 12419000,
|
||||
"ProcessStartupConfig": 799500,
|
||||
"ConfigureCmake": 57125,
|
||||
"BuildNativeWithCmake": 53875,
|
||||
"BuildNativeWithNinja": 125916,
|
||||
"BuildJS": 765334
|
||||
"CreateModuleInfo": 299292,
|
||||
"PreCheckSyscap": 126000,
|
||||
"ProcessIntegratedHsp": 331000,
|
||||
"SyscapTransform": 7137708,
|
||||
"ProcessStartupConfig": 783208,
|
||||
"ConfigureCmake": 53875,
|
||||
"BuildNativeWithCmake": 53292,
|
||||
"BuildNativeWithNinja": 121458,
|
||||
"BuildJS": 653333
|
||||
},
|
||||
"77aabe6c19463543339f337db9c84e4d10fd2f56ea0aedaf85a0214d59e93ec4": {
|
||||
"ConfigureCmake": 68125,
|
||||
"BuildNativeWithCmake": 139875,
|
||||
"BuildNativeWithNinja": 437542
|
||||
"ConfigureCmake": 76458,
|
||||
"BuildNativeWithCmake": 126167,
|
||||
"BuildNativeWithNinja": 223750
|
||||
}
|
||||
},
|
||||
"APIS": [
|
||||
@ -56,13 +56,157 @@
|
||||
"ENABLE_CPP_FUNCTION_LEVEL_INCREMENTAL": false
|
||||
},
|
||||
"CONFIG_PROPERTIES": {},
|
||||
"BUILD_ID": "202604291536118220",
|
||||
"BUILD_ID": "202605051732210700",
|
||||
"ERROR_MESSAGE": [
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605040",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605040",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605008",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605008",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605008",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605008",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605008",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605040",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10605038",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10505001",
|
||||
"TIMESTAMP": "1777448175246"
|
||||
"TIMESTAMP": "1777973544163"
|
||||
},
|
||||
{
|
||||
"CODE": "10505001",
|
||||
"TIMESTAMP": "1777973544163"
|
||||
}
|
||||
],
|
||||
"TOTAL_TIME": 3424986416
|
||||
"TOTAL_TIME": 3094060000
|
||||
}
|
||||
}
|
||||
文件差异内容过多而无法显示
加载差异
文件差异内容过多而无法显示
加载差异
文件差异内容过多而无法显示
加载差异
文件差异内容过多而无法显示
加载差异
@ -2,10 +2,12 @@ import common from '@ohos.app.ability.common'
|
||||
import type { LoginSession, SDKConfig } from './core/Types'
|
||||
import { SDKContext } from './core/SDKContext'
|
||||
import { ImClient } from './im/ImClient'
|
||||
import { PushSDK } from './push/PushSDK'
|
||||
import { UpdateSDK } from './update/UpdateSDK'
|
||||
|
||||
export class XuqmSDK {
|
||||
private static _imClient: ImClient | null = null
|
||||
private static _pushClient: PushSDK = new PushSDK()
|
||||
|
||||
static async init(context: common.UIAbilityContext, config: SDKConfig): Promise<void> {
|
||||
SDKContext.init(config)
|
||||
@ -35,4 +37,8 @@ export class XuqmSDK {
|
||||
static get update(): UpdateSDK {
|
||||
return UpdateSDK
|
||||
}
|
||||
|
||||
static get push(): PushSDK {
|
||||
return XuqmSDK._pushClient
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,21 +1,34 @@
|
||||
import { push } from '@kit.PushKit'
|
||||
import { pushService } from '@kit.PushKit'
|
||||
import { HttpClient } from '../core/HttpClient'
|
||||
import { SDKContext } from '../core/SDKContext'
|
||||
|
||||
const HARMONY_PUSH_VENDOR = 'HARMONY'
|
||||
const HARMONY_PLATFORM = 'HARMONY'
|
||||
|
||||
class PushRegisterBody {
|
||||
vendor: string = 'HARMONY'
|
||||
vendor: string = HARMONY_PUSH_VENDOR
|
||||
token: string = ''
|
||||
platform: string = 'harmony'
|
||||
platform: string = HARMONY_PLATFORM
|
||||
imUserId: string | null = null
|
||||
}
|
||||
|
||||
class PushUnregisterBody {
|
||||
vendor: string = 'HARMONY'
|
||||
token: string = ''
|
||||
platform: string = 'harmony'
|
||||
}
|
||||
|
||||
export class PushSDK {
|
||||
async initPush(imUserId?: string): Promise<void> {
|
||||
await PushSDK.initPush(imUserId)
|
||||
}
|
||||
|
||||
async unregisterPush(imUserId: string): Promise<void> {
|
||||
await PushSDK.unregisterPush(imUserId)
|
||||
}
|
||||
|
||||
async registerToken(token: string, imUserId?: string): Promise<void> {
|
||||
await PushSDK.registerToken(token, imUserId)
|
||||
}
|
||||
|
||||
async unregisterToken(imUserId: string): Promise<void> {
|
||||
await PushSDK.unregisterToken(imUserId)
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize HarmonyOS Push Kit and register the token with the server.
|
||||
* Call this after user login.
|
||||
@ -24,13 +37,12 @@ export class PushSDK {
|
||||
*/
|
||||
static async initPush(imUserId?: string): Promise<void> {
|
||||
try {
|
||||
const token: string = await push.getToken()
|
||||
const token: string = await pushService.getToken()
|
||||
if (token && token.length > 0) {
|
||||
await PushSDK.registerToken(token, imUserId)
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('[XuqmSDK] Push Kit getToken failed:', JSON.stringify(err))
|
||||
throw err
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,12 +59,29 @@ export class PushSDK {
|
||||
* obtained the token through your own Push Kit integration.
|
||||
*/
|
||||
static async registerToken(token: string, imUserId?: string): Promise<void> {
|
||||
const config = SDKContext.getConfig()
|
||||
const userId = imUserId ?? SDKContext.getUserId()
|
||||
if (!userId) {
|
||||
console.warn('[XuqmSDK] Push registration skipped: IM user id is empty.')
|
||||
return
|
||||
}
|
||||
const query = PushSDK.queryString([
|
||||
new QueryItem('appId', config.appKey),
|
||||
new QueryItem('userId', userId),
|
||||
new QueryItem('vendor', HARMONY_PUSH_VENDOR),
|
||||
new QueryItem('token', token),
|
||||
new QueryItem('platform', HARMONY_PLATFORM),
|
||||
new QueryItem('deviceId', token),
|
||||
new QueryItem('brand', 'HUAWEI'),
|
||||
new QueryItem('model', 'HarmonyOS'),
|
||||
new QueryItem('osVersion', 'HarmonyOS'),
|
||||
])
|
||||
const body = new PushRegisterBody()
|
||||
body.token = token
|
||||
if (imUserId !== undefined) {
|
||||
body.imUserId = imUserId
|
||||
}
|
||||
await HttpClient.post<void>('/api/push/register', body)
|
||||
await HttpClient.post<void>('/api/push/register', body, query)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,7 +89,30 @@ export class PushSDK {
|
||||
*/
|
||||
static async unregisterToken(imUserId: string): Promise<void> {
|
||||
const config = SDKContext.getConfig()
|
||||
const query = `appId=${encodeURIComponent(config.appId)}&userId=${encodeURIComponent(imUserId)}&vendor=HARMONY`
|
||||
const query = PushSDK.queryString([
|
||||
new QueryItem('appId', config.appKey),
|
||||
new QueryItem('userId', imUserId),
|
||||
new QueryItem('vendor', HARMONY_PUSH_VENDOR),
|
||||
new QueryItem('platform', HARMONY_PLATFORM),
|
||||
])
|
||||
await HttpClient.delete<void>('/api/push/unregister', query)
|
||||
}
|
||||
|
||||
private static queryString(items: QueryItem[]): string {
|
||||
const parts: string[] = []
|
||||
for (const item of items) {
|
||||
parts.push(`${encodeURIComponent(item.key)}=${encodeURIComponent(item.value)}`)
|
||||
}
|
||||
return parts.join('&')
|
||||
}
|
||||
}
|
||||
|
||||
class QueryItem {
|
||||
key: string
|
||||
value: string
|
||||
|
||||
constructor(key: string, value: string) {
|
||||
this.key = key
|
||||
this.value = value
|
||||
}
|
||||
}
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户