Python移动端应用消息提醒开发实践

0 阅读4分钟

Hello,大家好,我是唐叔,今天想总结下:在实现「TodoList」应用移动端应用消息提醒的相关实践,欢迎查阅哦!

整个开发过程,我尝试过三种方案,下面是细致的方案内容:

第三方消息推送方案

第三方消息推送方案,简单说就是不依赖移动端应用本身实现消息提醒,而是依赖第三方服务端将消息推送到手机厂商的服务器,再由手机厂商推送消息给移动端应用。

Pasted image 20260412130933.png

集成思路

在第三方消息平台进行应用注册,然后移动端应用集成该平台封装好的 SDK,然后在第三方平台人工发消息,移动端即可接收消息。(当然,也可以使用自己的服务器集成平台发消息的 API 来实现自动化消息)。

方案思考

使用第三方消息推送的优势是基本不会出现消息无法接收;即使本地应用关闭了,也照样可以接收消息。

不过劣势也很明显,如果要实现自动化发送,那么需要自行搭建服务端

最开始「TodoList」应用是计划桌面端应用作为服务端来自动化推送消息给移动端。为啥最终没这样干呢?

主要是存在维护成本,因为使用第三方服务要注册应用生成应用唯一标识 AppKey

而像「TodoList」是完全开源的项目,等于 AppKey 也是暴露给使用者的,存在被滥用的风险;当然也可以采用实现相关代码,然后让用户自行配置 AppKey,不过感觉这样会复杂化用户操作,所以也最终没考虑了。

本地通知+AlarmManager

本地通知指的是不依赖第三方消息平台,直接由移动端应用本身的程序来触发消息提醒。这里 python 可以直接使用跨平台第三方依赖库 plyer

from plyer import notification
title, message, priority = self._build_notification(notification_msg)
notification.notify(
    title=title,
    message=message,
    app_name="TodoList",
    # app_icon=utils.get_app_icon(),
    timeout=10,
)

不过,只使用本地通知,一旦应用关闭了,也就是程序关闭了,那么就无法触发了。

这里有几种方式解决该问题:

  • 前台服务:既然应用关闭就无法触发消息,那就让应用一直保活不关闭
  • AlarmManager:这种不需要 Python 进程一直运行,而是让安卓系统在指定时间唤醒你的 Python 脚本。

前台服务等于应用关不了,一直驻留,感觉很影响用户体验,也会很耗电,我估计没几个用户会希望一个待办应用 app 一直在手机上运行吧,所以选择的是本地通知 + AlarmManager

不过,这种方案最终也终止了,究其原因:实现起来太难辽。

如果是纯 Java 程序还好实现,毕竟安卓系统是支持直接运行 Java 的,问题是「TodoList」是基于 python……

补充:个人理解其实再继续倒腾,可能最终能成。毕竟 Buildozer 本身是支持打包 Java 程序以及自定义配置文件的,只是个人能力有限吧,没搞成而已……

系统日历提醒方式

系统日历提醒方式也是最终方式了。这种的话,貌似某些应用的打卡提醒就是用这种方式的。

实现起来相对也比较简单。使用 python 编写程序 Pyjnius 调用安卓日历接口,把待办事项存入系统日历,并设置系统提醒;同时完善相关权限申请提醒就可以了。

具体的实现代码稍微有点长,可以直接去看「TodoList」源码具体 MR 吧:feat(mobile): add calendar reminder for tasks.


好啦,以上就是今天的分享内容啦,感谢阅读。如果对「TodoList」应用感兴趣,也欢迎下载程序体验哦:Tags · TangIsLearning/TodoList,近期还有一个桌面小控件完成开发后,想着就推出 v1.0 版本,如果有其他你觉得实用的功能期望出现在「TodoList」应用上,欢迎留言提出哦。