移动端项目整理

这篇博客总结了uni-app开发中的多个关键知识点,包括uni表单双向绑定、全局文件配置、页面传值、uni-swiper的使用、web-view交互、版本更新检测、预加载功能、vuex状态管理问题以及unipush推送的配置等。此外,还涵盖了媒体查询、动画效果、适配处理和数据处理等多个方面的实践技巧。
摘要由CSDN通过智能技术生成

uni项目整理笔记

uni小知识点

获取input框的值用来进行双向绑定

commitValue(e){
// 获取input中的值
this.search = e.target.value; 
},

在一个公共的help.js中写一个文件用来当做全局文件

const hideLoad = function (info) {  
uni.hideLoading();
};
export default { 
showLoad,
hideLoad 
}

然后再其他页面import引入我的js 可以进行一个help.showLoad 进行一个正在加载的蒙版 请求到数据后再次调用help.hideLoad

在post传值时引入一个header

 header: {
		 'content-type': 'application/x-www-form-urlencoded'
 },

引入uni swiper的横向选项卡

实现tab切换

在template中

<view>
		<view id="app">
			<view class="tab-tilte">
				<text @click="cur=0" :class="{active:cur==0}">主页</text>
				<text @click="cur=1" :class="{active:cur==1}">账户</text>
			</view>
			<view class="tab-content">
				<view v-show="cur==0">						
					内容一
				</view>					
				<text v-show="cur==1">内容二</text>
			</view>
		</view>		
</view>

在script中

export default{
	data(){
		return{
			cur:0
		}
	}
}

在style中

        #app {
            width: 100%;
        }
        .tab-tilte{
            width: 100%;
			border-top-right-radius: 25upx;
			border-top-left-radius: 25upx;
			overflow: hidden;
        }
        .tab-tilte text{
            float: left;
            width: 50%;
			height: 75upx;
            padding: 10upx 0;
            text-align: center;
            background-color:#f4f4f4;
			line-height: 75upx;
            // cursor: pointer;
        }
     /* 点击对应的标题添加对应的背景颜色 */
        .tab-tilte .active{
            // background-color: #09f;
			border-bottom: 3px solid orange;
            color: black;
        }

登陆模块注册的一个大致步骤

1.输入账号密码 当你输错时我会返回一个错误的值
2.你输入正确之后  把信息存起来  怎么存 可以放到vuex中的 mutations中 然后在setStorage存值
	login(state, userInfo) {
	console.log('准备存储登录信息:' + userInfo.uid + userInfo.token + userInfo.username + userInfo.face);
	state.uid = userInfo.uid;
	state.token = userInfo.token;
	state.username = userInfo.username;
	state.face = userInfo.face;
	state.hasLogin = true;
	uni.setStorage({
		key: 'userInfo',  
		data: userInfo,
		success: function () {
			console.log('存储登录信息成功');
		}
	})
}
3.当我退出登录时我需要把这些信息全部销毁
logout(state) {
		state.uid = "";
		state.token = "";
		state.username = "";
		state.face = "";
		state.hasLogin = false;
		uni.removeStorage({
		    key: 'userInfo',
			success: function () {
				console.log('销毁登录信息成功');
			}
		})
	},

uni表单提交获取input的值

<form @submit="formSubmit">
	<view><input v-model="reg_tel" type="number" name="tel" placeholder="请输入手机号" /></view>
	<view class="pcode">
		<input type="number" name="yzm" placeholder="请输入手机验证码" />
		<button type="primary" :class="{active : !disableCodeBtn}" :disabled="disableCodeBtn" @tap="bindSendSms">{{codeBtn.text}}</button>
	</view>
	 <radio-group name="radio1">
		<label>
				<radio :checked=moshi value="净值比例"  /><text>净值比例</text>
		</label>
		<label style="margin-left: 15upx;">
				<radio :checked=!moshi value="同等手数"  /><text>同等手数</text>
		</label>
		</radio-group>
	<view><input password type="number" name="pwd" placeholder="请输入6-16位数字或字母密码" /></view>
	<view><input password type="number" name="repwd" placeholder="请再次输入密码" /></view>
	<view><button class="psub_bt" type="primary" form-type="submit" >注册</button></view>
</form>
在methods中
formSubmit(e){
	this.obj = e.detail.value;
	console.log(this.obj)
}
当我们提交过后就会获得inout框中所有name属性的值

自定义一个表单样式进行提交数据(在上面写的uni表单提交获取input的值文章中做一些修改) 例:

在这里插入图片描述
我们想要获取到它的值并且进行表单提交,(大致思路就是我们把自己的写的一个表单中的数据提取出来 然后放到 触发form表单生成的对象 e.detail.value中去)我这里只展示以一些关键代码 样式自己写吧!动动手

temeplate 下
	<text @click="zhuye1" :class="{active:cur==0}">{{sell}}</text>
	<text @click="zhanghu1" :class="{active:cur==1}">{{buy}}</text>
script下
	data(){
		return{
			cur:0,
			sell:'SELL',
			buy:'BUY',
			obj:''
		}
	},
	methods:{
		zhuye1(){
			this.cur = 0
		},
		zhanghu1(){
			this.cur = 1
		},
		formSubmit(e){
			this.obj = e.detail.value
		},
		bt(){
			if(this.cur == 0){
				//将获取到的自定义表单中的数据放到 obj中进行提交  
				this.obj.sell = this.sell
			}else{
				//将获取到的自定义表单中的数据放到 obj中进行提交  
				this.obj.buy = this.buy
			}
			console.log(this.obj)
			
		}
	}

style中

.tab-tilte{
	width: 100%;
	margin-top: 7upx;
	margin-left: 15upx;
	overflow: hidden;
	border: 1upx solid #DDDDDD;
	border-radius: 8upx;
}
.tab-tilte text{
	float: left;
	width: 50%;
	height: 38upx;
	padding: 10upx 0;
	text-align: center;
	background-color:white;
	line-height: 38upx;
	color: #DDDDDD;
	
}

uni页面传值有限制

将commList传到下一个页面  encodeURIComponent(JSON.stringify(commList))
接受上一个页面传过来的commList信息  JSON.parse(decodeURIComponent(options.comInfo))

uni中解决遮罩滑动的问题

 @touchmove.stop.preventt  在最外层的的标签上加上

uni外部引入图表插件(完全的js和html)

1.需要创建一个hybrid文件夹必须是hybrid和pages同一级目录
2.在他下面创建一个html文件夹必须是html
3.在里面创建js  index.html我们要用的   
4.在我们的pages下面的vue页面中 <web-view src="/hybrid/html/index.html"></web-view>引入即可

注意:我们的pages引入外部的index.html时  自己是一个空页面  别写东西  想写在index.html写
他就相当于我们常常说的iframe 在uni的官方文档上有介绍 https://uniapp.dcloud.io/component/web-view?id=web-view

实现web-view调用uni的部分接口(以跳转页面为例子)

1.首先要在我们的hybrid下面的html页面引入uni的cdn (这里只说调试app的方法) 
	<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
2.待触发 UniAppJSBridgeReady 事件后,即可调用 uni 的 API。
	document.addEventListener('UniAppJSBridgeReady', function() {  
		//这里的.cccj就是我们要实现点击跳转的那个div
	    document.querySelector('.cccj').addEventListener('click', function() {  
	                   uni.navigateTo({  
	                       url: '/pages/quotation/fbcl'  
	                   });  	                	        
	    });  	 
	});

实现uni-app向web-view传值

在uniapp中(这个是我从我的一个uniapp的选择名字的界面,点击我的名字进行跳转到我的另一个引入web-view的uniapp页面)
kLine(name){
	uni.navigateTo({		
	url:'/pages/quotation/quotation?name=' + name
	})
}
在那个引入web-view的uniapp页面中
<template>
<view>
	<web-view :src='url'></web-view> 
</view>
</template>

<script>
 export default{	 
	 data(){
		return{			
			url:''
		} 
	 },
	 onLoad(options) {
		 this.url = '/hybrid/html/tubiao.html?data=' + options.name
	 },
	 methods:{
	 }
 }
</script>
在我的hybrid文件夹下的tubiao.html(这个是自己写的html)
	window.onload=function(){
	console.log(getQuery('data'));			
	}
	function getQuery(name) {
	    // 正则:[找寻'&' + 'url参数名字' = '值' + '&']('&'可以不存在)
	    let reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
	    let r = window.location.search.substr(1).match(reg);
	    if(r != null) {
	        // 对参数值进行解码
	        return unescape(r[2]);
	    }
	    return null;
	}

实现web-view向uni-app传值

简单的说就是通过url进行传值 把上面获得的  值 也就是getQuery('denglu')等通过这种方式进行传值
<script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
<script>	
document.addEventListener('UniAppJSBridgeReady', function() {  
   // 向uni传值     
	document.querySelector('.fbcl').addEventListener('click', function() {
		 console.log(typeof(getQuery('denglu')) )				
			       uni.navigateTo({  
			           url: '/pages/quotation/fbcl?name=' +  getQuery('data') + '&weishu=' + getQuery('weishu') 
			       });         
	   });   
});
</script>

uni解决onload和onlaunch异步的问题

1.首先如果不解决这个问题会出现当我们刷新页面时我们用参数比如说token像后台请求数据,但是还没有拿到
token就已经向后台发送了请求所以说他们两个之间有一个异步的问题
2.computed:{
	...mapState(['token']),
	isToken(){
		return this.token;
	}
},
watch:{
	isToken(val,oldVal) {
		//token更新后,要做的操作
		console.log(val)
		//调用我们的方法来获得参数token
		this.getList(val);
	}
}

取值并且创建一个新的缓存

	uni.getStorage({
		key: 'userInfo',
		success:(res)=> {
			console.log(res.data.notice)
			var notice = res.data.notice
			uni.setStorageSync("notice",notice)
		}
	})

在vuex中遇到的一个很坑的问题

	vuex中在mutations中我改变了state的值用来做一个缓存
	// 将所有的微博粉丝等放到vuex
	uindexArrPush(state,str){
		state.uindexArr.push = str  //错误写法哈哈
		state.uindexArr.push(str)
	}
	在那个页面
	 this.uindexArrPush(res.data.data)
	此时res.data.data是我在我的页面获取到的一个对象形式的,我把它push到我vuex中创建的state里面的
	数组中去。
	当我在那个页面onload时总是出现  uindexArrPush is not  function  
	解决的办法很奇葩:
	uindexArrPush(state,str){
		state.uindexArr= str
	}
	在那个页面 
	 var srr = [];
	 srr.push(res.data.data)
	 this.uindexArrPush(srr)
	// 这就很奇怪 以后在这方面 可能要注意了  同样的意思 但是vuex不接受 一些数组方法呀!

取值缓存的值并且修改

 var userInfo = uni.getStorageSync('userInfo')
	 if(userInfo){
		  userInfo.login = res.data.data.login
		  console.log('修改后的user')
		  console.log(userInfo)
		  uni.setStorage({
		  	 key: 'userInfo',
		  	 data:userInfo,
		  	 success() {
				console.log("存入成功")
		  	 }
		  })						  					  
	  }

检测版本是否需要更新(在打包时自己写一个版本他会和你作比较判断)(http://kmkj.mt5.vip/app.phpa=check_version_updates&ver=2.0)

data(){
		return{
			version_app:''
		}
	},
在onLanuch中的methods方法
	//#ifdef APP-PLUS
	  uni.getSystemInfo({
	      success: function (res) {
	          console.log(res.version);
			  this.version_app =res.version
			  
	      }
	  });
	 uni.request({
		   url:".......",
		   method:'GET',
		   data:{
		   a:'check_version_updates',
		   ver:this.version_app
	   },
	   header:{
	   	 'content-type': 'application/x-www-form-urlencoded'
	   },
	   success(res) {
	    console.log("版本检测成功"); 
	    console.log(res)
	    if(res.data.code==1){
		     console.log(res.data.download_url)
		     plus.runtime.openURL(res.data.download_url)
	    }
	   }
	  })
	  //#endif

解决uni不换行的问题

word-break:break-all;

区分h5和app

在style下
仅在app
/* #ifdef APP-PLUS */
/* #endif */

仅在h5
/* #ifdef H5 */
/* #endif */
在methods下
仅在app
// #ifdef APP-PLUS
// #endif 

仅在h5
// #ifdef H5
// #endif 

如下代码会在 App 和 H5 平台上出现:
// #ifdef APP-PLUS || H5
// #endif 

uni实现预加载

<template>
	<view v-if="!loaded" >
		<!-- 已加载{{percent}} -->
	</view>
	<view v-else class="ss" >
		<view v-for="items,index in urls" :key='index'>
			<image :src='items'></image>
		</view>		
	</view>
</template>
<script>
	export default {
		data() {
			return {
				loaded: false,
				count: 0,
				urls: [
					'../../static/img/2.png',
					"../../static/img/2.png",
					"../../static/img/3.png",
					'../../static/img/2.png',								
				],
				percent: '',
			}
		},
		onLoad() {		
			this.pd();						
		},
		watch: {
			count: function(val, old) {
				if (val === this.urls.length) { // 图片全部加载完成后跳转页面
					console.log('loaded')
					console.log(this.percent)					
					this.loaded = true;					
					uni.hideLoading()				
				}
			},
		},
		methods:{
				pd(){
					uni.showLoading({
						title:'正在加载'
					})
					setTimeout(()=>{
						this.preLoad()
					},100)								
				},
				preLoad() { //预加载图片			
					for (let url of this.urls) {					
						uni.getImageInfo({  
							src: url,  
							success: (image) => {  							
								if(!this.loaded){						
										this.count += 1
										let percentNum = Math.floor(this.count / this.urls.length * 100)
										this.percent = `${percentNum}%`								
									}							
							},  
							fail:function(err){  
								// resolve(false);  
							}  
						});  						
					}
				}
		},
			
		
	}
</script>
<style>
	.ss image{
		width: 100%;
		height: 400upx;
	}
	page{
		/* background-color: #000000; */
	}
</style>

一级菜单二级菜单的渲染与展示

如{{北京:'三里屯','朝阳区'},{河北:'保定','石家庄'}}  => [{北京:'三里屯','朝阳区'},{河北:'保定','石家庄'}]
	// 把整体的对象转化为数组
	for (let i in res.data.data) {
		    let o = {};
			o[i] = res.data.data[i];
			this.mrr.push(o)
		}
		console.log(this.mrr)
// 一级菜单的渲染						
	for(var i = 0;i < this.mrr.length;i++){
	//获取数组中的key值也就是 北京,河北
		let sss = Object.keys(this.mrr[i])			
		//将所有的key值push到一个整体的有key值组成的大数组之中去
		this.oneCDArr.push.apply(this.oneCDArr,sss);
		// console.log(this.oneCDArr)
	}
	// console.log(this.oneCDArr)
// 二级菜单的渲染
	//点击那个一级菜单时让其显示
	let testObj = this.mrr[index]
	便利一级菜单下的二级菜单进行展示
	for(var m in testObj){
	  for(var s in testObj[m]){
		  this.erjiArr.push(testObj[m][s]) 					  
	  }
	}

媒体查询的写法

	@media screen and (min-width:960px) and (max-width:1200px){}

jquery触发事件 设置css属性

	$('.erweimaSon').mouseenter ( function(){	
		$('.ewmShow').css({"display":'block','height':'5px'})
	});

当浏览器窗口改变时出发的

	 $(window).resize(function () {          //当浏览器大小变化时
	 	//size();
	 });
	 function size(){
	// 	var h = window.screen.height + 'px';
	// 	console.log(h)
	// 	// var w = document.documentElement.clientWidth + 'px';
	// 	$('.fa-box').css({"height":h})	
	// }

动画的写法

.box{
		width: 0;
		height: 0;
		border: 40px solid;
		animation: lunbotu 5s linear infinite;
	}
	//scale()缩放   //rotate()旋转
	@-webkit-keyframes lunbotu {
		/* 0%{
			transform: translateX(0px);
		}
		100%{
			transform: translateX(-600px);
		}
		 */
	}

网页端适配手机的meta属性

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,user-scalable=no" />

浏览器图标的设置

//href上是我们想要用的图标的位置
<link rel="shortcut icon" href="image/crm.png" type="image/x-icon" />

jquery的请求

$.ajax({
			dataType: 'json',
			url: '',
			data: {
				pid:'cent'
			}, 
			type: "post",
			success: function(res) {
				console.log(res)	
				$('.sain span').text(count)
				if(res.code == 1){
					var listdata = $(".box")
					var listdatas = '<div>';
					listdatas += '<p>有新的账号注册了</p>'
					listdatas += '</div>'
					listdata.append(listdatas)
				}
			}
});	
**便利时的写法(当请求成功时进行像uni里面的v-for似的便利)**
	success: function(e) {		
		if (e.code == 1) {
			$.each(e.data.data, function(i, indexs) {
				var listdata = $(".WlistCenterCer")
				var listdatas = '<div class="WlistName" id="WlistData">';
				listdatas += '<p>' + indexs.SYMBOL + '</p><p >' + indexs.OPEN_TIME + '</p>';
				listdatas += '</div>'
				listdata.append(listdatas)
			})
		}
	}

js实现预加载

	// 预加载
	//获取所有的img图片(必须是获取全部的图片  不能把图片写成数组的形式)
	var allimgs = document.getElementsByTagName('img');	 
	 let num = allimgs.length;
	 let loading = 0;
	 for(let i=0;i<num;i++){
		let imgs = new Image(); //这是重点,必须new一张,如果直接用onload,在你还没执行到这段函数的时候,可能已经加载了一两个图片了,这时候就会出现加载不到100%!!!			
		imgs.src=  allimgs[i].src;
		imgs.onload =function(){add()};//必须用匿名函数,否则加载的函数不是load函数
	}	
			
	function add(){
		console.dir(loading/num*100+'%');
		if(loading==num-1){//如果是最后一张图片了就让数值变为1,让所有图片显示
			loading=num;
			console.dir(loading/num*100+'%')		
			$(document).ready(function(){		  
			    $(".zhezhao").fadeOut('slow');
			});
		}
		loading++;				
	}

vue.js实现上拉加载更多

<script type="text/javascript">
	var vm=new Vue({
		el: "#",
		data(){
			return{
				
			}
		},
		//很重要!!!
		created() {
		window.addEventListener('scroll',this.handleScroll);
		},
		mounted:function(){
			
		},
		methods:{
			//下拉加载更多的函数getSpecialData
			getSpecialData:function () {
		
			},
			//很重要!!!
			handleScroll:function(){	//下面这部分兼容手机端和PC端
				var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
				var windowHeitht = document.documentElement.clientHeight || document.body.clientHeight;
				var scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
				//是否滚动到底部的判断
				if(scrollTop + windowHeitht == scrollHeight){
					//当滑动到底下时触发你自己的 函数
					this.getSpecialData()
				}
			}
		}
	})
</script>

修改select下的option的值(动态的获取上一个页面传过来的值)

	function gaiValue(checkValue){
  		  var select = document.getElementById('fangxiang');
  		  for (var i = 0; i < select.options.length; i++){  	  		  
  			  if (select.options[i].value == checkValue){  	  			  
  			  select.options[i].selected = true;  	  			  
  			  break;  
  			  }  
  		}  
  	}
  	gaiValue(<?php echo $dataas['fx'];?>)

判断两个数组是否有相同的值如果相同输出它

var a = $('.x_zhanghao')					
a.each(function(){									
	var a_all = $(this).html()
	//b是所有class的名字相同的值 以便利的形式进行
	for(var j = 0;j < res.data.length;j++){
		//res.data为  [
//		[gdzh:'123',id:'456'],[gdzh:'123',id:'456']
//		]
		//这里是后台给我传过来的一个二维数组 res.data[j].gdzh 
		if(res.data[j].gdzh.indexOf(a_all) != -1){
			var gid = res.data[j].id
			var  zt  = "#ztid" + gid;
			var cz = "#czid" + gid;
			$(zt).html('<span class="gdzt anniu">跟单中</span>');
			$(cz).remove()
		}
	}							
});	

删除选中的操作

 function Z_id(id){
	return document.getElementById(id);
}
 var odiv=Z_id("ddid"+gdid);
odiv.parentNode.removeChild(odiv);

jquery控制高度慢慢增加

$(".fw").mouseenter(function () {		
	var curHeight = $(this).height(); //重点
	$(this).css('height', 212); //重点
	var autoHeight = $(this).height(); //重点
	$(this).height(curHeight).animate({height: autoHeight}, 200);//重点
	$(this).css({'box-shadow':'0px 0px 10px #000'})
})
$(".fw").mouseleave(function () {
	var curHeight = $(this).height();
	$(this).css('height', 101); 
	var autoHeight = $(this).height(); 
	$(this).height(curHeight).animate({height: autoHeight}, 100); 	
	$(this).css({'box-shadow':'0px 0px 0px'})
})

引用jquery封装的 分页插件

感谢这位大神为我解决了问题(js css可以去大神这里下载)  https://www.jq22.com/jquery-info23387
需要调用的文件
<link rel="stylesheet" type="text/css" href="./css/index.css" />
<script src="./js/index.js" type="text/javascript" charset="utf-8"></script>
html
<div id='test'></div>
js
var nums = 200, // 数据总数 
ounts = 10; // 每页个数 ,这样就有20页 
var p = new Page({
    el: '#test', //控件 
    nums: nums, // 数据总数 
    counts: counts, // 每页个数 
    defaultPage: 6, //默认第几页  这个很有用我们可以根据获得跳转后 的当前页的显示
    showHeadFoot: !false, // 显示首页尾页  文字可修改:head:首页,foot:尾页
    jumpToOrder: true,  // 跳转到指定页
	showNowAndAll: true, // 当前页/共几页 
    clickEvent: function(currectPage) {
        // currectPage是点击的页数,这个回调函数就是点击了做点什么
        // 点击时点击页码执行的函数
        // console.log('点击了第' + currectPage + "页");
    }
});

vue用v-for循环时 动态绑定class

<div class="shujuTop"  v-for='items,index in hisArr' :key='index'>
	<div :class="setClass(items.lx)">{{items.lx}}</div>
</div>
methods:{
	setClass(key) {
			let obj = {leibie: true}
			obj[`leibie${key}`] = true
			return obj
		},
}

实现unipush推送功能

1.首先在unipush配置项(manifest.json)下面的模块配置开通unipush
2.我们点击配置来进行你的包名 sha1证书的配置
在这里要注意的是sha1证书需要我们现有一个
证书文件(证书文件可以上这里生成http://www.applicationloader.net/appuploader/keystore.php) 
*然后在把这个证书放到* jdk/bin/下面  我们在官网上进行windows的下载 
https://www.oracle.com/java/technologies/javase-jdk15-downloads.html)  
下载完成之后安装上然后我们打开 cmd 进入到 jdk/bin
然后输入命令 keytool -list -v -keystore 5f276df86d816.keystore
在输入你的证书文件的密码 这时就会出现这样的
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目

别名: uni
创建日期: 2020年8月3日
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=km, OU=km, O=km, L=SH, ST=SH, C=CN
发布者: CN=km, OU=km, O=km, L=SH, ST=SH, C=CN
序列号: 70d6af24
生效时间: Mon Aug 03 09:52:57 CST 2020, 失效时间: Thu Aug 01 09:52:57 CST 2030
证书指纹:
         SHA1: 1A:95:99:0B:16:09:EA:45:10:81:CE:E1:44:F3:7C:2A:4A:81:3C:C9
         SHA256: 62:4E:E8:4E:85:4F:5B:8C:48:4A:37:5D:83:AF:5A:DD:BE:DD:9D:AE:A0:DA:44:98:F5:C9:F6:B9:3F:9B:EE:E5
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: C5 2F EE 80 F1 F9 C0 2D   E3 31 95 34 F5 AF 28 14  ./.....-.1.4..(.
0010: 5F E1 A5 C2                                        _...
]
]
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore 5f276df86d816.keystore -destkeystore 5f276df86d816.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
3.然后我们在unipush输入这些配置就完成了app在线的时候的配置,然后接下来配置当app离线时接收消息也就是厂商配置
1.我们首先打开华为的应用后台创建一个项目然后在创建一个应用名字自己起
2.在创应用时我们的那个包名必须和我们的unipush起的那个包名要一致切记!!!我的包名是io.dcloud.kangman
3.创建完之后打开我的项目然后他里面会有我们进行厂商配置的 包名 APP SECRET  然后最重要的一点我们要在
华为后台我们的项目中配置SHA256证书指纹  他就是我们上面说的那个证书信息里面有
  SHA256:62:4E:E8:4E:85:4F:5B:8C:48:4A:37:5D:83:AF:5A:DD:BE:DD:9D:AE:A0:DA:44:98:F5:C9:F6:B9:3F:9B:EE:E5
最重要一点  他这个添上后会出现一个对勾 不要以为是你填对了  我们一定要点一下 这里我看了一个世纪没发现
切记切记切记!!!!!!!!!!!!!!!!!!!
4.然后厂商配置完成之后  我们就可以发送透传消息 就能实现离线操作了
这里发送透传消息时  透传内容的格式是这样的
{"title": "xxx","content": "xxx","payload": "xxx"}
然后打开下面的厂商通道 这是在离线时出发的
标题类型选择intent  这是intent下的内容
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
这里的io.dcloud.HBuilder  要换成我们的包名 只换这一个地方其他不用动 我这里换成了io.dcloud.kangman
然后点击预览发送就可以了 到此结束!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值