TPNS SDK 在代码位置 TPushAlarmManager.set 处使用了一个隐式 PendingIntent,用于触发 SDK 内部心跳。
您可以参见 Google 隐式 PendingIntent 处理帮助文档 提出的针对建议,TPNS SDK 已进行如下自查:
a. 使用的 setAction 为 SDK 自声明的静态广播 action,无对外暴露风险;
b. 涉及 PendingIntent 的打开目标为 SDK 内部静态广播,且已添加 SDK 内部自声明的广播权限,属于可信任组件。
Google 文档提及 “Fixing this issue is recommended but not mandatory. The publication status of your app will be unaffected by the presence of this issue.”。
综合考虑,TPNS 此处当前使用的 PendingIntent 为可信任安全 PendingIntent,且 Google 提示的此项内容不会影响您的应用上架。当前您可以忽视此项提示,继续上架您的应用。
使用自定义铃声可以通过创建通知渠道实现:
n_ch_id
进行推送,厂商通道需指定厂商渠道 ID,如华为通道需指定hw_ch_id
,小米通道需指定xm_ch_id
。说明:
- 目前仅华为、小米、FCM 和 TPNS 通道支持自定义铃声。
- 部分厂商推送通道使用通道渠道需要先进行通知分类权限申请,相关说明和申请步骤可参见 厂商通道消息分类功能使用说明。
- 针对华为推送通道,如果您的应用在华为推送控制台申请开通华为推送服务时,选择的数据处理位置为中国区,自定义渠道功能将不再适用于您的应用,即不支持利用通知渠道能力进行通知铃声自定义,详见 自定义通知渠道。
如需关闭联合保活功能,请在应用初始化的时候,例如 Application 或 LauncherActivity 的 onCreate 中调用如下接口,并传递 false 值:
注意:仅 1.1.6.0 之后版本支持关闭联合保活功能,1.1.6.0之前版本TPNS 默认开启联合保活能力,且不可关闭。
XGPushConfig.enablePullUpOtherApp(Context context, boolean pullUp);
若您使用 gradle 自动集成方式,请在自身应用的 AndroidManifest.xml 文件 <application> 标签下配置如下结点,其中 xxx
为任意自定义名称;如果使用手动集成方式,请修改如下节点属性:
<!-- 在自身应用的AndroidManifest.xml文件中添加如下结点,其中 xxx 为任意自定义名称: -->
<!-- 关闭与 TPNS 应用的联合保活功能,请配置 -->
<provider
android:name="com.tencent.android.tpush.XGPushProvider"
tools:replace="android:authorities"
android:authorities="应用包名.xxx.XGVIP_PUSH_AUTH"
android:exported="false" />
若控制台有以下日志打印,则表明联合保活功能已经关闭:I/TPush: [ServiceUtil] disable pull up other app
。
针对“用户同意隐私服务协议” 场景,开发者可以在 AndroidManifest.xml 文件添加以下节点,应用首次安装启动时即不会自启推送服务,直到调用了推送服务注册接口XGPushManager.registerPush()
才会开启:
<meta-data
android:name="XG_SERVICE_PULL_UP_OFF"
android:value="true" />
鸿蒙系统完全兼容 Android SDK,推送功能可正常使用。
厂商 | 是否需要上架应用市场 |
---|---|
小米 | 否,个人开发者账号即可 开通小米平台推送服务 |
魅族 | 否,个人开发者账号即可 开通魅族平台推送服务 |
FCM | 否,个人开发者账号即可开通 FCM 推送服务 |
华为 | 否,个人开发者账号即可 开通华为平台推送服务 |
OPPO | 是,且需要企业开发者账号可 开通 OPPO 平台推送服务 |
vivo | 是 ,且需要企业开发者账号可 开通 vivo 平台推送服务 |
开发者在集成 vivo 厂商通道推送服务后,部分安全检测工具可能会提示 “APP 包含未使用的权限字符串”,详情如下:
问题来源:vivo 厂商通道推送 SDK 版本名 2.3.4。
涉及类文件:com.vivo.push.util.z 涉及敏感权限字符串:android.permission.GET_ACCOUNTS。
注意:经检查发现最新的 vivo 厂商通道推送 SDK 版本名 3.0.0.3 中同样包含此问题。
问题代码来源为 vivo 厂商通道推送 SDK,TPNS 项目组无法变更其内容;此问题已向 vivo 推送服务相关人员反馈,表示相关静态字段为 SDK 遗留代码,并无实际使用,会尽快排期修复。 当前可参考的快速解决办法如下:
请参见 排查工具指南 使用排查工具进行自动化排查,一般有如下错误:
不支持2015年后发布的努比亚机型,因为努比亚新的系统版本增加了超级省电的功能(会迅速将后台进程停止),移动推送 TPNS Service 无法启动,所以努比亚机型无法注册成功。
自 TPNS SDK 1.1.6.3 版本起,为避免在非本品牌手机上、其他品牌的推送服务在后台自启、传输用户数据,会在非本品牌手机上禁用其他品牌的推送服务组件。
华为在账号、游戏、推送等不同功能上有一些公共组件,TPNS 禁用推送组件可能会导致其它服务功能在非华为品牌手机上同样不能启动;若您需要关闭此禁用功能,可配置以下内容:
在 AndroidManifest.xml 文件 application 标签下添加节点配置,并重装应用(需卸载后重装)。
<meta-data
android:name="tpns-disable-component-huawei-v2"
android:value="false" />
<meta-data
android:name="tpns-disable-component-huawei-v4"
android:value="false" />
当订阅者点击您的通知时,可以根据您的配置跳转至指定的应用内页面、H5、Deeplink 等,来满足您在不同场景下的需求。详情请参见 通知点击跳转。
回调 | 抵达回调 | 点击回调 |
---|---|---|
小米 | 不支持 | 支持 |
魅族 | 不支持 | 支持 |
FCM | 不支持 | 支持 |
华为 | 不支持 | 支持 |
OPPO | 不支持 | 支持 |
vivo | 不支持 | 支持 |
注意:厂商通道的点击回调需 SDK 版本1.2.0.1及以上版本支持;旧版本仅支持华为、小米、魅族、vivo。
由于厂商通道推送的 title 和 content 是拼接在 intent 中下发的,因此,在使用 onNotifactionClickedResult、onNotificationShowedResult 方法时,无法获取 title 和 content。如需获取参数,请使用 intent 的方式,详情请参考 通知点击跳转。
在应用运行日志中观察到如下类似日志:
[OtherPushClient] handleUpdateToken other push token is : other push type: huawei
表示您的应用注册该厂商通道失败,您可以通过获取厂商通道注册失败的返回码来进行问题定位和排查,详情请参见 厂商通道注册失败排查指南。
目前 IM 已使用 TPNS 提供的厂商 jar 包,请按照下方表格替换相关依赖包,替换后即可解决。
推送通道 | 系统要求 | 条件说明 |
---|---|---|
小米推送 | MIUI | 使用小米推送,添加依赖:implementation 'com.tencent.tpns:xiaomi:1.2.1.3-release' |
华为推送 | EMUI | 使用华为推送,添加依赖:implementation 'com.tencent.tpns:huawei:1.2.1.3-release' implementation 'com.huawei.hms:push:5.0.2.300' |
Google FCM 推送 | Android 4.1及以上 | 手机端需安装 Google Play Services 且在中国大陆地区以外使用。添加依赖:implementation 'com.google.firebase:firebase-messaging:20.2.3' |
魅族推送 | Flyme | 使用魅族推送,添加依赖:implementation 'com.tencent.tpns:meizu:1.2.1.3-release' |
OPPO 推送 | ColorOS | 并非所有 OPPO 机型和版本都支持使用 OPPO 推送,使用 OPPO 推送,添加依赖:implementation 'com.tencent.tpns:oppo:1.2.1.3-release' |
vivo 推送 | FuntouchOS | 并非所有 vivo 机型和版本都支持使用 vivo 推送,使用 vivo 推送,添加依赖:implementation 'com.tencent.tpns:vivo:1.2.1.3-release' |
推送 API 字段设置示例如下,其中 icon_color: 123456,即为 RGB 颜色 #01e240:
{
"message": {
"android": {
"small_icon": "notification_icon",
"icon_color": 123456
}
}
}
适配后的具体效果如下,建议参考 Demo logo 图标进行作图。
说明:
- small icon 必须是带 Alpha 透明通道的 PNG 图片。
- 背景必须是透明。
- 周围不宜留过多 padding。
- 建议统一使用46 x 46px,过小图片会模糊,过大系统会自动缩小。
以上两种情况,需要在 drawable 不同分辨率的文件夹下对应放置一张名称必须为 stat_sys_third_app_notify 的图片,详情请参考 TPNS Android SDK 中魅族厂商依赖目录的 flyme-notification-res 文件夹。
tpns-configs.json
文件中的 "debug"
字段置为 true
, 运行命令: ./gradlew --rerun-tasks :app:processReleaseManifest
并通过"TpnsPlugin"
关键字进行分析。
2. 单击【sync projects】。
3. 在项目的 External Libraries 中查看是否有相关依赖。
在 AndroidX 项目工程的 gradle.properties 文件中添加如下属性:
android.useAndroidX=trueandroid.enableJetifier=true
说明:
- android.useAndroidX=true,表示当前项目启用 AndroidX。
- android.enableJetifier=true,表示将依赖包迁移到 AndroidX。
开发者在集成各厂商通道推送服务后,部分安全检测工具可能会提示 “App 存在通过 HTTP 明文传输信息的行为” ,具体 HTTP 地址涉及:
http://new.api.ad.xiaomi.com/logNotificationAdActions,http://resolver.msg.xiaomi.net/psc/?t=a
http://norma-external-collect.meizu.com/android/exchange/getpublickey.do,http://norma-external-collect.meizu.com/push/android/external/add.do
以上 HTTP URL 均来自各厂商推送 SDK,TPNS 项目组无法明确其目的或控制其行为,但正在积极与厂商服务提供者联系并推动 HTTPS 改造;开发者当前可以自行评估选择是否继续使用以上厂商提供的推送服务。
由于工程加载方法数超过65K,请对工程做分包处理。
在部分手机,通知栏跳转到某个页面可能会出现权限问题。
处理方法:在 androidManifest.xml 中,需要打开的 Activity 加上 android:exported="true"。
注册方法可以在任何地方调用,但注意要传递 ApplicationContext。
本页内容是否解决了您的问题?