Android中能否以其他包ID推送通知?已尝试notifyAsPackage无效
能否在Android应用中推送显示其他包ID的通知?
核心结论
常规第三方开发场景下,没办法从com.app.a推送显示com.app.b/c/d这类其他包ID的通知——这是Android系统的安全机制限制,目的是防止应用伪造其他应用的通知误导用户。
关于notifyAsPackage方法的问题
你试的NotificationManager#notifyAsPackage方法,根本不是给普通应用用来伪装包ID的,它的使用门槛极高:
- 调用这个方法必须持有
INTERACT_ACROSS_USERS_FULL权限,这个权限只有系统应用或者被系统签名的应用才能拿到,普通第三方应用根本申请不到。 - 就算拿到权限,
targetPackage也只能指定当前用户组内的特定应用,不是随便填个包名就行。
所以普通应用调用这个方法必然失败,属于正常情况。
替代方案(模拟视觉效果)
如果只是想让通知看起来像来自其他应用,而非真正篡改系统识别的包ID(这是不可能的),可以这么做:
- 自定义通知布局:用
NotificationCompat.Builder#setCustomContentView自定义通知的显示样式,在布局里放上你想要的“应用名称”和图标,模拟其他应用的通知外观。 - 自定义通知渠道:给不同的通知渠道设置对应其他应用的名称和图标,不过用户长按通知查看应用信息时,还是会显示真实的包ID,只能做表面的视觉模拟。
重要提醒
Android系统会强制关联通知的真实包ID,用户随时可以通过通知查看对应的应用信息,所以彻底伪装成其他应用的通知是不可能的——这是系统为了用户安全做的硬性限制,避免恶意应用搞钓鱼诈骗。
内容的提问来源于stack exchange,提问作者Mohimenol Islam Fahim
相关产品推荐
相关产品推荐

