最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

uniapp?APP消息推送方案實現(xiàn)全過程

 更新時間:2023年01月06日 10:37:13   作者:Jelly115  
前段時間開發(fā)app的時候要開始做消息推送功能了,下面這篇文章主要給大家介紹了關(guān)于uniapp?APP消息推送方案實現(xiàn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

提示:本文實例消息推送使用uniapp官方的unipush推送:

項目場景:該項目是uniapp + uniCloud 項目,APP端的消息推送使用 html+ 與原生實現(xiàn)交互

1.開通推送消息

– uniapp 中的manifest.json文件中找到App模塊配置,勾選push消息推送模塊
– dcloud開發(fā)者中心后臺開通unipush功能及各種配置項
– 安卓離線消息推送是需要配置各大廠商,IOS離線不需要,但需要推送證書

2.判斷手機權(quán)限

- 需求:判斷是否開啟通知權(quán)限,跳轉(zhuǎn)對應(yīng)設(shè)置頁

  /**
     * 設(shè)置手機通知權(quán)限
     */
    setPermissionsInform() {
        // #ifdef APP-PLUS  
        if (plus.os.name == 'Android') { // 判斷是Android
            var main = plus.android.runtimeMainActivity();
            var pkName = main.getPackageName();
            var uid = main.getApplicationInfo().plusGetAttribute("uid");
            var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
            //android.support.v4升級為androidx
            if (NotificationManagerCompat == null) {
                NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
            }
            var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
            // 未開通‘允許通知'權(quán)限,則彈窗提醒開通,并點擊確認(rèn)后,跳轉(zhuǎn)到系統(tǒng)設(shè)置頁面進行設(shè)置  
            if (!areNotificationsEnabled) {
                uni.showModal({
                    title: '通知權(quán)限開啟提醒',
                    content: '您還沒有開啟通知權(quán)限,無法接受到消息通知,請前往設(shè)置!',
                    showCancel: false,
                    confirmText: '去設(shè)置',
                    success: function(res) {
                        if (res.confirm) {
                            var Intent = plus.android.importClass('android.content.Intent');
                            var Build = plus.android.importClass("android.os.Build");
                            //android 8.0引導(dǎo)  
                            if (Build.VERSION.SDK_INT >= 26) {
                                var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
                                intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
                            } else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0  
                                var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
                                intent.putExtra("app_package", pkName);
                                intent.putExtra("app_uid", uid);
                            } else { //(<21)其他--跳轉(zhuǎn)到該應(yīng)用管理的詳情頁  
                                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
                                intent.setData(uri);
                            }
                            // 跳轉(zhuǎn)到該應(yīng)用的系統(tǒng)通知設(shè)置頁  
                            main.startActivity(intent);
                        }
                    }
                });
            }
        } else if (plus.os.name == 'iOS') { // 判斷是ISO
            var isOn = undefined;
            var types = 0;
            var app = plus.ios.invoke('UIApplication', 'sharedApplication');
            var settings = plus.ios.invoke(app, 'currentUserNotificationSettings');
            if (settings) {
                types = settings.plusGetAttribute('types');
                plus.ios.deleteObject(settings);
            } else {
                types = plus.ios.invoke(app, 'enabledRemoteNotificationTypes');
            }
            plus.ios.deleteObject(app);
            isOn = (0 != types);
            if (isOn == false) {
                uni.showModal({
                    title: '通知權(quán)限開啟提醒',
                    content: '您還沒有開啟通知權(quán)限,無法接受到消息通知,請前往設(shè)置!',
                    showCancel: false,
                    confirmText: '去設(shè)置',
                    success: function(res) {
                        if (res.confirm) {
                            var app = plus.ios.invoke('UIApplication', 'sharedApplication');
                            var setting = plus.ios.invoke('NSURL', 'URLWithString:', 'app-settings:');
                            plus.ios.invoke(app, 'openURL:', setting);
                            plus.ios.deleteObject(setting);
                            plus.ios.deleteObject(app);
                        }
                    }
                });
            }
        }
        // #endif  
    } ,
    /**

可以將該方法放在APP.vue文件的onShow生命周期或是消息中心的onShow中去判斷用戶是否開啟通知權(quán)限

-- Android跳轉(zhuǎn)系統(tǒng)設(shè)置Settings的各個界面

3.推送消息到手機APP:

需求:當(dāng)有消息推送時,推送到手機狀態(tài)欄中

3.1 獲取客戶端推送標(biāo)識信息 cid

		// 必須要獲取到cid后才能接收推送信息
        const cid = plus.push.getClientInfo()
        console.log(cid);

3.2 創(chuàng)建推送消息

		//plus.push.createMessage( content, payload, option );
		//在本地直接創(chuàng)建推送消息,并添加到系統(tǒng)消息中心。
		content: ( String ) 必選
		消息顯示的內(nèi)容,在系統(tǒng)通知中心中顯示的文本內(nèi)容。
		
		payload: ( String | Object ) 可選
		消息承載的數(shù)據(jù),可根據(jù)業(yè)務(wù)邏輯自定義數(shù)據(jù)格式。
		
		options: ( MessageOptions ) 可選
		創(chuàng)建消息的額外參數(shù),參考
		https://www.html5plus.org/doc/zh_cn/push.html#plus.push.MessageOptions
		
		plus.push.createMessage('我是你爸爸!'); // 創(chuàng)建本地推送
		plus.runtime.setBadgeNumber(1)  // 設(shè)置角標(biāo)

3.3 消息事件

- 實現(xiàn)手機狀態(tài)欄推送功能邏輯,在APP.vue中添加推送消息事件監(jiān)聽器 ,監(jiān)聽到有新消息時,使用createMessage API創(chuàng)建消息,添加點擊事件 點擊后進行不同操作

  1. 對于安卓的在線和離線消息以及IOS的離線消息都是走的click監(jiān)聽事件。也就是說可以直接將消息推送到手機通知欄中,然后點擊消息的時候,可以觸發(fā)應(yīng)用監(jiān)聽的點擊事件,跳轉(zhuǎn)到對應(yīng)頁面。
  2. receive事件,可以監(jiān)聽到后端推送過來的消息,觸發(fā)相應(yīng)的回調(diào),使用createMessage在本地創(chuàng)建消息
		// 添加推送消息事件監(jiān)聽器 click
		plus.push.addEventListener("click",(msg)=>{
		        console.log('msg............',msg);
		        if(msg.payload){
		        // 點擊跳轉(zhuǎn)對應(yīng)頁面
		            uni.navigateTo({
		                url:msg.payload
		            })
		        }
		},false)
		
		// 添加推送消息事件監(jiān)聽器 receive
		plus.push.addEventListener("receive",(msg)=>{
		    if("LocalMSG" == msg.payload){
		    }else{
		        if(msg.type=='receive'){
		            var options = {cover:false,title:msg.title};
		            // 創(chuàng)建本地推送
		            plus.push.createMessage(msg.content, msg.payload, options ); 
		         }  
		    }
		},false)

4. 消息頁面的數(shù)據(jù)及數(shù)字角標(biāo)

- 需求:當(dāng)有消息推送時,要更新消息中心頁面的數(shù)據(jù)和數(shù)字角標(biāo)

1.在項目中定義請求消息列表的方法,將響應(yīng)的數(shù)據(jù)存儲到vuex中,供消息中心頁面使用

// 消息頁面的數(shù)據(jù)
	async getMsgData(){
	    let res = await this.$callFunction("userContent/getMsgType")
	    this.$u.vuex("msgData", res.result.data);
	    let msgCount = 0 // 數(shù)字角標(biāo)
	    res.result.data.map((item)=>{
	        if(item._id!=5){
	            msgCount+=item.no_read_total
	        }
	    })
	    // 給tabbar的角標(biāo)賦值
	    let tabbar_data = JSON.parse(JSON.stringify(this.TabbarList))
	    tabbar_data[3].count = msgCount
	    this.$u.vuex("TabbarList", tabbar_data);

2.監(jiān)聽消息的推送,如果接收到消息就更新消息列表數(shù)據(jù)和角標(biāo)數(shù)字

	// --------監(jiān)聽推送的狀態(tài)----------
	plus.push.addEventListener("receive", (msg) => {
	    console.log(getApp().globalData.followCount);
	    if(msg.payload.data.msg_type==501){
	        uni.$emit('followUpdate','update');
	    }
	    let {content, payload, options} = msgCreate(msg)
	
	    plus.push.createMessage(content, payload, options);
	    this.getMsgData()
	}, false)
  • 該功能的實現(xiàn),主要重點在于數(shù)據(jù)的全局的傳值,以及監(jiān)聽數(shù)據(jù)的變化,實時更新數(shù)據(jù)
  • 可以使用vuex或globalData來存儲數(shù)據(jù)
  • nuve頁面中可以使用$emit $on 進行全局監(jiān)聽

總結(jié)

到此這篇關(guān)于uniapp APP消息推送方案的文章就介紹到這了,更多相關(guān)uniapp APP消息推送方案內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript深拷貝和淺拷貝詳解

    javascript深拷貝和淺拷貝詳解

    本文主要介紹了javascript深拷貝和淺拷貝的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • js實現(xiàn)接收表單的值并將值拼在表單action后面的方法

    js實現(xiàn)接收表單的值并將值拼在表單action后面的方法

    這篇文章主要介紹了js實現(xiàn)接收表單的值并將值拼在表單action后面的方法,涉及JavaScript動態(tài)操作字符串及表單元素的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • 前端使用websocket發(fā)送消息的示例代碼

    前端使用websocket發(fā)送消息的示例代碼

    WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,它可以讓客戶端和服務(wù)器之間進行實時的雙向通信,這篇文章主要介紹了前端使用websocket發(fā)送消息的示例代碼,需要的朋友可以參考下
    2023-07-07
  • js數(shù)組對象里面如何獲取某個屬性值相等的對象

    js數(shù)組對象里面如何獲取某個屬性值相等的對象

    這篇文章主要介紹了js數(shù)組對象里面如何獲取某個屬性值相等的對象問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • JavaScript DOM常用操作代碼匯總

    JavaScript DOM常用操作代碼匯總

    這篇文章主要介紹了JavaScript DOM常用操作代碼匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • js動態(tài)給table添加/刪除tr的方法

    js動態(tài)給table添加/刪除tr的方法

    這篇文章介紹了js動態(tài)給table添加/刪除tr的方法,有需要的朋友可以參考一下
    2013-08-08
  • 淺析JS中的原型,原型鏈和繼承

    淺析JS中的原型,原型鏈和繼承

    經(jīng)典模式和圣杯模式都是用于解決構(gòu)造函數(shù)繼承和原型繼承的問題,但它們在實現(xiàn)繼承的方式上有所不同,本文主要來和大家聊聊經(jīng)典模式和圣杯模式下原型,原型鏈和繼承的實現(xiàn),需要的可以參考下
    2023-09-09
  • 捕獲和分析JavaScript Error的方法

    捕獲和分析JavaScript Error的方法

    這篇文章主要介紹了如何捕獲和分析 JavaScript Error,感興趣的朋友可以參考下
    2014-03-03
  • video.js添加自定義組件的方法

    video.js添加自定義組件的方法

    這篇文章主要介紹了videojs添加自定義組件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • JS實現(xiàn)隨機生成10個手機號的方法示例

    JS實現(xiàn)隨機生成10個手機號的方法示例

    這篇文章主要介紹了JS實現(xiàn)隨機生成10個手機號的方法,涉及javascript數(shù)值運算與隨機數(shù)操作相關(guān)使用技巧,需要的朋友可以參考下
    2018-12-12

最新評論

曲阳县| 乌鲁木齐县| 武陟县| 灵川县| 舟山市| 雅安市| 岢岚县| 拜泉县| 明光市| 屏南县| 桂阳县| 阳江市| 阿巴嘎旗| 清镇市| 吉隆县| 共和县| 卫辉市| 东山县| 二连浩特市| 甘泉县| 翁牛特旗| 延吉市| 大兴区| 太和县| 兴安盟| 新乐市| 三穗县| 临湘市| 大洼县| 西宁市| 上蔡县| 潮安县| 绵阳市| 岳阳县| 曲沃县| 达尔| 陆河县| 祁阳县| 巩留县| 甘德县| 扶沟县|