前言
项目需要实现一个告警App,报警信息需要及时推送到相关业务人员。所以选择了uniApp自带的UniPush1.0(个推服务)。怎么实现开通和实现推送功能可以参考官方文档:ask.dcloud.net.cn/article/357…。 本文实现的前提是自己已经实现了在线推送功能
需求描述
点击通知栏推送的消息,跳转到指定页面。页面包含三种,
- 跳外链纯网址形式形如:www.baidu.com
- 跳到本身App内某一页面
- 跳到小程序页面(需要企业级小程序 因为需要URLScheme,URLLink但它们仅针对非个人主体小程序开放)
技术实现
1. 实现跳外链形式
这个比较简单点,可以借助uniapp开发者中心中的unipush模块来实现。在Android配置后续动作中选择第三方链接输入相应的网址就行
输入相应的内容点击预览
效果如下:
2. 实现跳转本身App某一指定页
在uniapp开发者中心中的unipush模块中,在Android配置后续动作中选择打开应用内特定页面
这里踩大坑了 (此段不能实现 可以参考 想看怎么实现的 在下边)
因为需要填intent:协议。咱是搞前端开发的,对原生的东西根本一窍不通,只能学了。 于是按照官方文档学学学docs.getui.com/getui/mobil…
这是自己学到的intent的东西
还需要新建个AndroidManifest.xml因为uniapp项目中本身就没这个文件。AndroidManifest.xml还得遵照一定的规则,这里还请教了前安卓同事
代码如下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
package="uni.XXXXXX">
<!--permissions-->
<!-- <application>
<meta-data android:name="My_Custom_Key" android:value="My_Custom_Value"/>
</application> -->
<activity android:name=".PushActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="com.getui.push"
android:path="/wakeUp"
android:scheme="coalSafety" />
</intent-filter>
</activity>
</manifest>
pages.json文件
{
"path": "pages/me/index",
"style": {
"navigationBarTitleText": "我的",
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black"
},
"alias": "/wakeUp"
},
manifest.json
这是我配置的 intent://com.getui.push/wakeUp?#Intent;scheme=coalSafety;launchFlags=0x4000000;package=uni.XXX;component=uni.XXX/uni.XXX.PushActivity;S.payload=payloadStr;S.gttask=;end 配置完毕以为就能唤起App指定页面了,可是结果连推送消息都收不到。定位问题就是这个intent有问题,于是找人,搜资料,最后还是问到了个推的技术支持,最后是这样实现的。
正确实现方式
要认真看文档 uniapp实现不是楼上那样的,那个是原生的方式。实现思路:点击推送消息之后 在回调里解析自己传的参数 然后拿参数做相应的路径跳转
ask.dcloud.net.cn/article/356…
最终的intent应该是这样的
intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
js实现拿推送消息参数 在App.vue文件下onLaunch周期内添加
// 点击推送信息
plus.push.addEventListener('click', res => {
// 在这里就可以根据你自己的业务去写
const url = res.payload // 跳转app内指定页面
uni.showModal({
content: res.payload
})
if (url) {
uni.navigateTo({
url: '/pages/me/index'
})
}
})
配置好intent和js代码效果如下: 点击推送 跳转到我的页面也不是首页