export function loginAppOtherAction(){
return new Promise((resolve, reject) => {
uni.getProvider({
service: 'oauth',
success: (prod) => {
//判断当前是否可以进行微信登录
if (~prod.provider.indexOf('weixin')) {
if(plus.runtime.isApplicationExist({pname: 'com.tencent.mm', action: 'weixin://'})){
//安装了微信
if(uni.getSystemInfoSync().platform == 'ios'){
//请求小程序api,获取需要的数据code
uni.login({
provider: 'weixin',
onlyAuthorize: true,
success: (res) => {
resolve({...res});
//获取code,并进行请求传参
},
fail: () => {
reject('微信授权失败');
}
})
}else{
//注意安卓系统使用uni.login的话不会返回code,如果需要code使用h5+app原生api如下
let weixinService = null;
//获取系统登录授权列表
plus.oauth.getServices((services) => {
if (services && services.length) {
for (var i = 0, len = services.length; i < len; i++) {
if (services[i].id === 'weixin') {
weixinService = services[i]; //获取到微信授权
break;
}
}
if (!weixinService) {
return;
}
weixinService.authorize((event) => { //获取code
resolve({code: event.code});
})
}
})
}
}else{
//未安装微信
reject('请先安装微信或升级版本');
}
} else {
reject('微信登录错误!');
}
}
});
})
}
安卓和ios获取code的方式不一样,ios可以直接调用uni.login API 获取code,但是安卓不行,安卓只能获取到unicode, 所以如果需要获取code传给后端,安卓app需要使用H5+的api获取code
导入使用:
async handleLogin() {
try{
const message = await loginAppOtherAction();
// 这里做登陆请求或者其他操作。 message.code可以获取到code
}catch(e){
uni.showToast({
title: e,
icon:'error'
})
}
}
开启第三方登录权限, 微信开放平台申请appID