IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    浅谈 Uniapp 推送–原生插件

    obaby发表于 2024-06-05 02:26:53
    love 0

    同一个地方,换了条短裤,抖音上还有发每日 ootd 的主播,主打每日不重样,不过我是没那么多穿搭啊,肯定会重复的。嘻嘻。最近抖音一直给我推一个品牌的丝袜,主打是防晒+无裆缝设计。

    于是呢,在看了数天广告之后终于买了,79.9 三条,对我来说这个价格并不算便宜,尤其是对于丝袜这种消耗品来说。

    言归正传,这是关于 unipush的第三篇文章,第一篇文章写过关于推送之安卓桌面图标角标的问题。

    Uniapp 原生插件开发

    本质上,这篇文章算是对上篇文章的延续。主要说一下安卓系统上如何设置桌面角标,对于 ios 系统相对来说比较简单,直接调用uni 的plus.runtime.setBadgeNumber(count);

    即可实现。

    对于安卓系统,在上篇文章中也提过,本质上是对各种安卓的桌面 launcher 的适配。如果搜索一下,也能找到一些相关的文档。同样,在 uni 的官方插件市场内可以找到一个设置角标的原生插件:

    插件售价 19.9,我并没有购买这个插件,一个是不知道效果具体如何,另外一个原因是如果说插件支持性不好,那最后还得自己去实现相关功能。

    不过插件是支持使用的,点击试用 之后即可修改 manifest 选择云端插件打自定义基座包进行测试:

    这不是本文的重点,所以就不细说了。不过不知道是不是大家对于推送角标问题都已经解决了还是觉得这么简单的问题不值得说,网上搜一下关于 uniapp 的 unipush 角标问题搜索结果寥寥无几,要不搜素到的文章就都是废话,听君一些话,胜似一席话,也可能是自己搜索的方式不对。

    要实现角标设置,最直接的几个办法:

    1.找现成的代码,或者安卓相关的文档;

    2.逆向大厂的 app,比如微信、qq 之类的。

    当然最简单的还是第一个办法,毕竟逆向分析的代码,写起来也有些麻烦。当然上面的前提是,还是基于原生插件去做,直接 uni 是解决不了的。

    很幸运的找到了几份代码以及一些相关的文档:

    https://blog.csdn.net/weixin_48488560/article/details/130420568  代码见下面第一条链接  
    https://gitee.com/hzuqbt/badge-number  (works)  
    https://github.com/hacket/LauncherBadge  (not work)  
    https://www.cnblogs.com/slmk/p/8822112.html  
    https://segmentfault.com/a/1190000024553355

    针对https://gitee.com/hzuqbt/badge-number这份代码来说,相关的功能实现还算是比较清晰的。

    这份代码在设置badge count 的时候,同时调用了下面的方法:

    public void setNotification(Context context, int number, String title, String desc)

    这样会创建一条本地通知,在实际转成原生插件的时候可以去掉,无需创建本地通知。

    另外,直接跑这份代码直跑不通的的会提示没有权限,需要在 manifest 中添加权限申请:

    <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
    
        <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
        <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
        <uses-permission android:name="com.android.launcher2.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.android.launcher2.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.android.launcher3.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="org.adw.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="org.adw.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.htc.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.qihoo360.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.qihoo360.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.lge.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.lge.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="net.qihoo.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="net.qihoo.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="org.adwfreak.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="org.adwfreak.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="org.adw.launcher_donut.permission.READ_SETTINGS"/>
        <uses-permission android:name="org.adw.launcher_donut.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.huawei.launcher3.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.huawei.launcher3.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.fede.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.fede.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.sec.android.app.twlauncher.settings.READ_SETTINGS"/>
        <uses-permission android:name="com.sec.android.app.twlauncher.settings.WRITE_SETTINGS"/>
        <uses-permission android:name="com.anddoes.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.anddoes.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.tencent.qqlauncher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.tencent.qqlauncher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.huawei.launcher2.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.huawei.launcher2.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.android.mylauncher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.android.mylauncher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.ebproductions.android.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.ebproductions.android.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.lenovo.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.lenovo.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS"/>
        <uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="telecom.mdesk.permission.READ_SETTINGS"/>
        <uses-permission android:name="telecom.mdesk.permission.WRITE_SETTINGS"/>
        <uses-permission android:name="dianxin.permission.ACCESS_LAUNCHER_DATA"/>
    <uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"/>
    <uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS"/>

    在实际调试的时候建议还是直接 apk 打包调试,一切功能正常之后再往原生插件进行移植。不然直接调试原生插件比调试 apk 要麻烦多了,在调试的过程中一度有了放弃的想法,想着实在不行就用那个 19 块钱的插件了。不过好在后来还是解决问题了,整体而言,就是整合代码添加权限,然后就 ok 了。

    在 uni 中分别进行处理就 ok 了:

    setBadgeCount(count) {
                    // #ifdef APP
                    if (plus.os.name == "Android") {
                        const babyBadgeModule = uni.requireNativePlugin('babyBadgeModule');
                        // console.log(babyBadgeModule)
                        babyBadgeModule.setLauncherBadgeCount({
                            COUNT: count
                        }, result => {});
                    } else {
                        plus.runtime.setBadgeNumber(count);
                    }
                    // #endif
    
                },

     

    不过这次更新要做的内容比较多,发版就等端午之后再说吧。



沪ICP备19023445号-2号
友情链接