当前位置: 首页 > news >正文

Android 安卓 困难处理记录 腾讯IM和厂商离线推送难题 点击离线推送无法唤醒APP启动页但某些Service服务和Application被启动

Android 安卓 困难处理记录 腾讯IM和厂商离线推送难题 点击离线推送无法唤醒APP启动页但某些Service服务和Application被启动

文章目录

      • 工程描述
      • 问题描述
      • 问题解决思路
        • 思路一(成立但难用)
        • 思路二(不成立)
        • 思路三(成立)


工程描述

时间 2025年09月16日
维护一个旧的安卓工程,项目中集成了腾讯IM、友盟、厂商通道离线推送等SDK
项目之前腾讯IM的厂商通道集成方式是注册厂商推送通道相关APPID、Key等,填写在腾讯IM后台,然后前端注册厂商推送Token并上报给腾讯云,未集成腾讯IM push相关SDK,但集成了友盟的推送,以及厂商,现在修改成集成腾讯IM的push+离线厂商。


问题描述

当完成剔除友盟推送SDK以及友盟中集成厂商的SDK后,集成了腾讯IM push和腾讯IM的厂商SDK,然后申请了自定义消息分类,各个厂商离线推送都能够正常推送后,却发现离线推送点击怎么也调不起来APP启动页,但某些Service服务和Application正常被启动,IMSDK正常收到了一些不在线时的消息回调。


问题解决思路

共尝试了三种不同的解决方案,以供参考。

思路一(成立但难用)

还是以旧的继承方式,通过友盟注册推送Token,然后交给腾讯IM,达到离线推送效果。
由于是旧的工程,相关腾讯IM SDK旧的文档、友盟推送旧的文档已经完全找不到了,只能在工程内进行尝试性修改,虽然能够正常接收,唤醒APP,但是手动维护了很多厂商的Service,旧的工程中那时还没有SDK统一维护厂商Service,改起来相当繁琐且难懂,后期维护成本相对较高。

思路二(不成立)

既然IMSDK正常收到了一些不在线时的消息回调,是否可以在这个方法中启动一个新的Activity栈,从而来达到启动App的效果呢?
答案是,可以!但是效果不尽人意。
我在这个回调中添加了启动首页Activity,也判断了站内是否已经存在首页Activity、防止重复启动。但实际效果是启动起来了,但启动速度一言难尽。

思路三(成立)

既然前两种方法都不行,那就大改一番,方便更好的维护!继续解决启动不起来APP!
修改方式:去除友盟推送,去除相关厂商Services,升级腾讯IM SDK到最新版本,按最新集成方式来。

按照此时腾讯IM SDK最新离线推送文档集成确实很方便,SDK自己维护了启动类和相关Service,注册很方便,只有一个入口:

TIMPushManager.getInstance().registerPush(context, 您的 sdkAppId, "客户端密钥", new TIMPushCallback() {
@Override
public void onSuccess(Object data) {
}
@Override
public void onError(int errCode, String errMsg, Object data) {
}
});
//获取自定义的推送内容
TIMPushManager.getInstance().addPushListener(new TIMPushListener() {
@Override
public void onNotificationClicked(String ext) {
Log.d(TAG, "onNotificationClicked =" + ext);
// 获取 ext 自定义跳转
}
});

使用adb工具筛查,使用命令:

adb logcat | grep -E "Starting: Intent|cmp=com\.xxxx\.xxxxx"

发现启动的都是:

09-15 16:22:14.261 1574 2259 I ActivityTaskManager: START u0 {act=android.intent.action.VIEW flg=0x14000000 hwFlg=0x110 pkg=com.xxxx.xxxxxcmp=com.xxxx.xxxxx/com.tencent.qcloud.tim.push.TIMPushOpenActivity (has extras)
} from uid 10033
09-15 16:22:15.914 12371 12371 D imsdk : TIM: |-TIMPush-TIMPushOpenActivity |onCreateIntent { act=android.intent.action.VIEW dat=pushscheme://com.tencent.qcloud.uniapp/detail flg=0x14000000 hwFlg=0x100 pkg=com.xxxx.xxxxxcmp=com.xxxx.xxxxx/com.tencent.qcloud.tim.push.TIMPushOpenActivity clip={text/plain=1 T:anything
} (has extras)
}

已知TIMPushOpenActivity 是一个腾讯IM Push SDK中的跳板页面,经过尝试,在腾讯IM后台无论配置什么点击后续动作,最终都是走的TIMPushOpenActivity,且点击离线推送没有任何反应,可能是和旧的工程某些配置有关,此时我无法准确定位这个问题!

它的代码是这样的:

public class TIMPushOpenActivity
extends Activity {
private static final String a = TIMPushOpenActivity.class.
getSimpleName();
public TIMPushOpenActivity() {
}
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TIMPushLog.d(a, "onCreate" + ((Activity)this).getIntent());
TIMPushManagerImpl.c().a(((Activity)this).getIntent());
((Activity)this).finish();
}
}

那我就大概明白了,既然后台配置自己的不行,那就干脆后台全部配置成打开应用,拦截掉TIMPushOpenActivity 走自己自定义的启动页!

在AndroidManifest.xml中,使用如下代码:

<!--将TIMPushOpenActivity进行remove--><activityandroid:name="com.tencent.qcloud.tim.push.TIMPushOpenActivity"tools:node="remove"/><!--使用别名拦截使其跳转到自己的Activity--><activity-aliasandroid:name="com.tencent.qcloud.tim.push.TIMPushOpenActivity"android:exported="true"android:enabled="true"android:targetActivity="自己的启动页Activity" />

最终成功唤醒了App,然后在自己启动页中调用腾讯SDK方法中的这个方法,就能在注册onNotificationClicked方法中收到自定义参数:

TIMPushManagerImpl.c().a(((Activity)this).getIntent());

这是一个腾讯IM Push SDK中 TIMPushOpenActivity 类一个混淆的方法,就是把各个厂商离线推送点击唤醒后的参数整理然后交给onNotificationClicked回调的。官方文档上没有体现。

至此,完美解决!正常收到离线推送、点击直接唤醒App、正常接收离线推送参数做自定义动作!

相关文章:

Android 安卓 困难处理记录 腾讯IM和厂商离线推送难题 点击离线推送无法唤醒APP启动页但某些Service服务和Application被启动

Android 安卓 困难处理记录 腾讯IM和厂商离线推送难题 点击离线推送无法唤醒APP启动页但某些Service服务和Application被启动pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…...

9.18

1...

Codeforces Round 1051 (Div 2)

cf1051 Div2 ABCD1D2E题解Problem - A. All Lengths Subtraction 思路: 我们希望 n 和 n - 1 相邻,n - 1, n 和 n - 2 相邻 ... 不断往外扩展 所以我们可以维护 l 和 r 表示当前扩展到了哪里 通过判断下一个数是否和 l 或者 r 相邻,判断 YES/NO 核心代码: void solve() {in…...

Python numba jit加速计算

安装pip install numba使用示例import timefrom numba import jit# 原始函数 def python_sum(n):total = 0for i in range(n):total += ireturn total# Numba 加速版本 @jit(nopython=True) def numba_sum(n):total = 0for i in range(n):total += ireturn total# 性能测试 n =…...

人机协作开发新体验:花两天时间与Cursor共同打造一个微信小程序

前言 在过去的几天里,我完成了一个完整的微信小程序项目——双色球机选应用。 这个项目的独特之处在于,所有的代码编写工作都是由 Cursor 完成的,而我主要负责需求分析、功能规划和调试测试。项目概述 应用功能 我开发的是一款双色球机选微信小程序,主要功能包括:开奖信息…...

OEC-Turbo刷群晖Armbian流程记录

记录OEC-Turbo的刷机流程,为以后反复折腾做参考。 设备版本:OEC L2.0,不清楚1.0和2.0的区别 系统:Windows 11 准备工具瑞芯微驱动 瑞芯微烧录工具 Loader文件 固件 镊子 Type-C数据线工具下载链接:https://pan.quark.cn/s/a719af4c2816 安装驱动下载:01-瑞芯微驱动\Drive…...

01_网络分层模型

一、OSI 七层网络模型 所谓七层就是基于 URL 等应用层信息的负载均衡,四层就是基于 IP + 端口的负载均衡,同样的还有基于二层 MAC 地址,三层 IP 地址的负载均衡。 而 OSI(Open System Interconnection,开放式通信互联) 是由 ISO(International Organization for Standardiz…...

SaaS 是什么?一文带你看懂 SaaS 与传统软件的区别

SaaS 发音类似于「萨斯」,是 Software as a Service 的缩写,直译过来就是「软件即服务」。你可以这样理解: 在 SaaS 模式下,软件变得和水电气很相似,你只需要每月缴纳固定的费用即可享受服务。再举个比较具体的例子: 如果是在10年前,我想画设计图,需要使用 Photoshop,…...

FreeCAD-即时入门-全-

FreeCAD 即时入门(全)原文:zh.annas-archive.org/md5/ba46ce5f33da4fa68df84701f1baaf8a 译者:飞龙 协议:CC BY-NC-SA 4.0前言 FreeCAD 是一个面向工程世界的通用建模工具。与为动画师和艺术家设计的其他建模工具(如 Blender 或 Maya)不同,FreeCAD 对参数化和基于特征的…...

UOS统信服务器操作系统V20(1070)安装mysql8.0.41(建议安装glibc2.28版本)

环境:OS:UOS Server 20 统信服务器操作系统V20(1070)mysql:8.0.41 glib.2.17 操作系统下载https://www.chinauos.com/resource/download-server查看系统glibc版本[root@localhost yum.repos.d]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 Free Software Foundation,…...

MyEMS:重新定义人与能源的关系 —— 一场藏在数据里的能源管理革命

能源,这个推动现代文明运转却始终隐形的主角,正通过数字技术与我们建立全新的对话方式。MyEMS作为开源能源管理系统,正在悄然引领这场变革——它不仅改变我们管理能源的方式,更在重新定义人与能源之间的关系。 从被动消费者到主动管理者 传统能源使用中,人类扮演着被动消费…...

刀齿磨损智能检测APP

...

TJOI2007--线段

题目传送门代码点击查看代码 #include<bits/stdc++.h> using namespace std; const int N=2e4+10; int n; int l[N],r[N],len[N]; int dp[N][2]; //dp[i][0]表示停留在本行左端点 //那么就要到右端点在再回到左端点 //dp[i][1]表示停留到本行右端点 //就从本行左端点到右…...

ceph集群的部署

需要准备三台虚机,下载好cephadm包 安装命令:ceph bootstarp --mon-ip=192.168.10.3 --allow-fqdn-hostname 像这样把下列命令对应要求填写命令,就可以安装ceph --allow-fqdn-hostname :允许使用主机作为域名访问mgr --initial-dashboard-user :指定dashboard的用户名 --ini…...

充电桩测试:守护绿色出行的安全密码

在新能源汽车蓬勃发展的时代浪潮下,充电桩作为核心配套设施,其质量与安全性至关重要。每一次稳定的充电过程背后,都离不开严谨细致的测试工作。那么,在充电桩测试中究竟需要注意哪些关键点呢? 电气性能是首要考量因素。电压和电流的稳定性犹如人的脉搏跳动般关键,必须精准…...

如何写好一个缺陷报告?让开发无法拒绝修复的10个要素

记住,测试人员与开发人员不是对立关系,而是协作共赢的伙伴。我们共同的目标是交付高质量的产品,为用户创造价值。当你用专业、细致、合作的态度对待每一个缺陷时,开发人员会更加重视你的报告,团队协作也会更加顺畅高效。在软件开发的世界里,测试人员和开发人员之间的关系…...

不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?

SLS 全新推出的「软删除」功能,以接近索引查询的性能,解决了数据应急删除与脏数据治理的痛点。2 分钟掌握这一数据管理神器。作者:屈岳(尧道) 引言 日志服务 SLS 作为云原生观测与分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台服务。在常规场景中…...

C#记录类型与集合的深度解析:从默认实现到自定义比较器

本文深入探讨C#记录类型与不可变集合在实际应用中的挑战,包括默认相等性实现的局限性、自定义比较器的需求、引用相等性的应用场景,以及Visual Studio工具支持方面的不足,并提出了具体的语言和工具改进建议。记录与集合 这篇文章在某种程度上是我在使用选举网站中的记录和集…...

安徽京准:NTP时间服务器助力网络数据安全稳定

安徽京准:NTP时间服务器助力网络数据安全稳定 安徽京准:NTP时间服务器助力网络数据安全稳定安徽京准:NTP时间服务器助力网络数据安全稳定 京准电钟官微——ahjzsz NTP时间服务器确实是保障网络数据安全与稳定的重要基石。它通过提供高精度、高可靠、高安全的时间同步服务,为…...

UOS统信服务器操作系统V20(1070)安装mysql5.7.42

环境:OS:UOS Server 20 统信服务器操作系统V20(1070)mysql:5.7.42 操作系统下载https://www.chinauos.com/resource/download-server查看系统glibc版本[root@localhost yum.repos.d]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 Free Software Foundation, Inc.This …...

响应式问题

今天遇到一个问题,组件已经设计为响应式,但是在移动端字体太小,多次调试无果,最终发现原因就在于我在main.js入口文件中引用了如下函数/*** 设置根元素的字体大小,以实现页面的自适应布局。* @param {number} bs - 基准字体大小,默认值为 16* @param {number} width - 设…...

Python 函数缓存

作用缓存不同参数组合的计算结果,命中缓存可以直接返回结果。使用示例import time from functools import lru_cache@lru_cache(maxsize=128) # 指定128个不同参数组合的调用结果,lru策略,设置为None表示无上限 def test(step: int, turns: int) -> int:total = 0for _ i…...

乐蜂直播购物商城小程序介绍

一、概述总结 乐蜂直播购物商城小程序系统,是一款依托微擎系统交付的直播电商解决方案。微擎系统是基于 PHP 开发的开源应用生态系统,可快速搭建微信公众号、小程序等应用,同时支持 Web 系统开发与部署,乐蜂直播购物商城小程序系统借助这一基础,实现了微信小程序内直播带货…...

基于C#实现基恩士PLC通信

一、通信协议选择 基恩士PLC支持多种通信协议,推荐优先采用以下两种方案:TCP/IP Socket通信(通用性强,适用于以太网接口设备) Modbus TCP协议(标准工业协议,兼容性强)二、Socket通信实现(基于TCP/IP) 1. 基础通信类设计 using System.Net.Sockets; using System.Text…...

VIPSHOP 门店会员营销管家:助力实体商家数字化运营

一、概述总结 VIPSHOP 门店会员营销管家是针对实体商家在微信生态开展会员营销与销售的工具,依托微擎系统实现交付与更新。其核心目标是帮助商家解决 “获客难、留客难、老客激活难” 的痛点,通过构建会员等级体系、整合多元营销功能,将线下流量转化为线上私域资产,形成 “…...

Rhino 8.10 中文版下载安装步骤(附详细图文说明)

软件介绍 犀牛Rhino 8.10是一款功能强大的三维建模软件,它是基于NURBS(非均匀有理B样条)技术的建模工具,广泛应用于工业设计、建筑设计、珠宝设计、三维动画等多个领域。以下是犀牛Rhino 8.10的简介: 1. 功能特点: – NURBS建模: Rhino 8.10以NURBS建模功能为核心,能够…...

深入解析:第十四届蓝桥杯青少组C++选拔赛[2022.12.18]第二部分编程题(2、字符翻转)

深入解析:第十四届蓝桥杯青少组C++选拔赛[2022.12.18]第二部分编程题(2、字符翻转)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …...

指令的执行过程

指令周期 cpu从主存中每取出一条指令所需要的全部时间 开始->取指令->对指令译码->执行指令->取下一条指令pc+1 指令周期常常使用若干个机器周期来表示,机器周期又叫cpu周期 一个机器周期包含若干个时钟周期(也被称作节拍,t周期,cpu时钟周期 也是cpu操作的基本…...

ALINX 助力希腊 SpaceDot AcubeSAT 卫星任务,2026 将入太空

ALINX 助力希腊 SpaceDot AcubeSAT 卫星任务,2026 将入太空pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New",…...

Ubuntu 安装JDK8

# 卸载当前的 JRE sudo apt remove openjdk-8-jre-headless# 安装完整的 JDK sudo apt install openjdk-8-jdk# 验证安装 java -version javac -version jps -l...

负载均衡层详解part 4

# keepaviled高可用 ## 一、keepaviled简介 负载均衡由七层负载均衡衍生出多级负载均衡,多出来四层负载均衡,再往前分就是DNS轮询,各种简单的、复杂的场景搭配用就可以了,有一个问题始终没有解决,整个集群架构中有的点是有单点故障问题的,怎么解决这个单点故障问题呢?就…...

重磅!中国科学引文数据库(CSCD)收录期刊(2025-2026)目录公布!共收录1464种期刊!

经过中国科学引文数据库(Chinese Science Citation Database,简称CSCD)定量遴选、专家定性评估, 2025-2026年度中国科学引文数据库收录来源期刊1464种,其中英文版期刊418种,中文版期刊1046种。 中国科学引文数据库来源期刊列表(2025-2026年度),因为篇幅较长,感兴趣(C…...

Flash Attenion算法原理

Flash Attenion算法原理 1.1 Flash Attention Step-by-Step1.2 Softmax \( \text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{k=1}^{N} e^{x_k}} \)import torch A = torch.randn(2, 6) A_exp = torch.exp(A) A_sum = torch.sum(A_exp, dim=1).unsqueeze(1) P = A_exp / A_sum #广…...

电流探头消磁失败的原因与解决策略

在电子测量领域,电流探头的精准度是确保测试数据可靠性的关键因素,而消磁操作则是维持其测量精度的重要环节。消磁的主要目的是消除探头内部磁芯的剩磁,防止其对后续测量造成干扰。然而,在实际操作过程中,电流探头的消磁失败现象时有发生,这不仅会降低测量结果的准确性,…...

【算法】双指针(四)-盛最多水的容器 - 实践

【算法】双指针(四)-盛最多水的容器 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...

程序设计小学期小计

小学期游记程序设计小学期小计 昨天奋斗到晚 12 点,算是完成了小游戏的所有功能,小游戏的主体流程算是全部完成了。写一篇小计记录一下。 截至目前,这个项目已经有了 \(233\) 次提交,若干次的合并,构筑起了这个小游戏。 过程 我们组当初提出制作 3D 的网页游戏,这是往届前…...

3dma渲染噪点成因排查及优化方案 - 详解

3dma渲染噪点成因排查及优化方案 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importa…...

hadoop配置日志聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。日志聚集功能好处:可以方便地查看到程序运行详情,方便开发调试。 注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。[hadoop@hadoop101(192.168.0.101) /opt/modul…...

vxe-tree-select 树形下拉框当使用懒加载数据时如何回显

vxe-tree-select 树形下拉框当使用懒加载数据时如何回显 当使用懒加载或者当某个选项被删除时,显示自定义回显;比如使用懒加载树列表,由于数据未被加载,这时候已选的数据就不能被回显,导致显示了 value值,而不是 label。 还有一种场景就是组织架构人员选择,当选择某个人…...

GPT PMBR 大小不符解决方法

GPT PMBR 大小不符解决方法服务器输入fdisk -l 报GPT PMBR 大小不符(104857599 != 209715199),将用写入予以更正。The backup GPT table is not on the end of the device. This problem will be corrected by write. 通过采用parted -l就行修复,如下图 修复后,fdisk -…...

CodeFormer一款既能图像修复、还能视频增强去码的AI软件(下载介绍)

CodeFormer是一款强大的人工智能工具,主要用于图像和视频的修复和增强。它基于深度学习技术,特别是人脸复原模型,可以轻松修复和增强面部图像,提升照片和视频的质量和视觉效果工作原理 1、通过自动编码器实现人脸的变换,包括色彩化、清晰化、去马赛克修复等功能 2、采用了…...

PCB的导线电阻阻抗批量自动计算EXCEL表格工具 公式

https://wwqx.lanzoul.com/iv1Fg36h5xwh 密码:hcko...

微信协议开发个微API

微信协议开发个微API常见开发功能: 好友管理: 维护好友列表:包括添加、删除、修改好友信息。 分组管理:创建、编辑、删除标签,以便更好地组织好友。 消息管理: 信息发送:支持发送各种类型的消息,包括文本、图片、名片、动图表情、小程序、文件、视频和URL链接及防撤回等…...

Milvus Lite

Milvus (标准版):就像一个部署在专业机房、由多台服务器组成的大型数据中心。它性能强大、稳定可靠、支持高并发,是生产环境的不二之选。部署它,通常需要使用Docker或在Linux服务器上进行。Milvus Lite (轻量版):就像一台功能强大、开箱即用的个人开发笔记本。它把数据中心…...

如何解除 pip install 安装报错 ModuleNotFoundError: No module named ‘win32api’ 问题

如何解除 pip install 安装报错 ModuleNotFoundError: No module named ‘win32api’ 问题pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…...

hbase学习一

什么是HBase? HBase是一个基于HDFS的、分布式、可扩展、面向列的NoSQL数据库。它起源于Google的BigTable论文,是Apache Hadoop生态系统的重要组成部分,专门用于处理海量数据的随机、实时读写访问。为什么需要HBase? Hadoop HDFS适合批处理,但无法进行随机读写。MapReduce适…...

【光照】[漫反射diffuse]以UnityURP为例

这篇文章介绍了Unity URP渲染管线中漫反射光照的实现原理和流程。主要内容包括:1. 漫反射遵循兰伯特定律,通过法线准备、光源方向计算、点积运算等步骤实现;2. URP的具体实现细节,如法线处理、光源计算和多光源支持;3. 关键代码示例,包括漫反射计算和完整光照流程;4. 快…...

OI线下比赛注意事项

这篇写挺好 https://www.cnblogs.com/dengstar/p/17069134.html...

n8n实践-使用n8n搭建一个定时发送天气预报邮件的工作流

前言传统的定时任务,一般是使用linux cron定时运行某个位置的某个脚本。需要准备各种运行环境; 脚本比较分散,管理起来相对麻烦; 需要有一定的代码能力,比如常见的shell、python等等; 不方便接入ai, 更换ai也比较麻烦。工作流的好处是:把定时任务、触发任务等统一管理; …...

Cython-编程学习指南第二版-全-

Cython 编程学习指南第二版(全)原文:zh.annas-archive.org/md5/0bc691743f26fcdcabcb6840b706a834 译者:飞龙 协议:CC BY-NC-SA 4.0前言 Cython 是一个工具,它使得编写 Python 的原生扩展变得和编写 Python 代码一样简单。对于那些不知道的人来说,你可以将 Python 模块实…...