项目初始化
This commit is contained in:
32
sheep/libs/mplive-manifest-plugin.js
Normal file
32
sheep/libs/mplive-manifest-plugin.js
Normal file
@@ -0,0 +1,32 @@
|
||||
const fs = require('fs');
|
||||
|
||||
const manifestPath = process.env.UNI_INPUT_DIR + '/manifest.json';
|
||||
|
||||
let Manifest = fs.readFileSync(manifestPath, {
|
||||
encoding: 'utf-8'
|
||||
});
|
||||
|
||||
function mpliveMainfestPlugin(isOpen) {
|
||||
if (process.env.UNI_PLATFORM !== 'mp-weixin') return;
|
||||
|
||||
const manifestData = JSON.parse(Manifest)
|
||||
|
||||
if (isOpen === '0') {
|
||||
delete manifestData['mp-weixin'].plugins['live-player-plugin'];
|
||||
}
|
||||
|
||||
if (isOpen === '1') {
|
||||
manifestData['mp-weixin'].plugins['live-player-plugin'] = {
|
||||
"version": "1.3.5",
|
||||
"provider": "wx2b03c6e691cd7370"
|
||||
}
|
||||
}
|
||||
|
||||
Manifest = JSON.stringify(manifestData, null, 2)
|
||||
|
||||
fs.writeFileSync(manifestPath, Manifest, {
|
||||
"flag": "w"
|
||||
})
|
||||
}
|
||||
|
||||
export default mpliveMainfestPlugin
|
246
sheep/libs/permission.js
Normal file
246
sheep/libs/permission.js
Normal file
@@ -0,0 +1,246 @@
|
||||
/// null = 未请求,1 = 已允许,0 = 拒绝|受限, 2 = 系统未开启
|
||||
|
||||
var isIOS;
|
||||
|
||||
function album() {
|
||||
var result = 0;
|
||||
var PHPhotoLibrary = plus.ios.import('PHPhotoLibrary');
|
||||
var authStatus = PHPhotoLibrary.authorizationStatus();
|
||||
if (authStatus === 0) {
|
||||
result = null;
|
||||
} else if (authStatus == 3) {
|
||||
result = 1;
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
plus.ios.deleteObject(PHPhotoLibrary);
|
||||
return result;
|
||||
}
|
||||
|
||||
function camera() {
|
||||
var result = 0;
|
||||
var AVCaptureDevice = plus.ios.import('AVCaptureDevice');
|
||||
var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
|
||||
if (authStatus === 0) {
|
||||
result = null;
|
||||
} else if (authStatus == 3) {
|
||||
result = 1;
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
plus.ios.deleteObject(AVCaptureDevice);
|
||||
return result;
|
||||
}
|
||||
|
||||
function location() {
|
||||
var result = 0;
|
||||
var cllocationManger = plus.ios.import('CLLocationManager');
|
||||
var enable = cllocationManger.locationServicesEnabled();
|
||||
var status = cllocationManger.authorizationStatus();
|
||||
if (!enable) {
|
||||
result = 2;
|
||||
} else if (status === 0) {
|
||||
result = null;
|
||||
} else if (status === 3 || status === 4) {
|
||||
result = 1;
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
plus.ios.deleteObject(cllocationManger);
|
||||
return result;
|
||||
}
|
||||
|
||||
function push() {
|
||||
var result = 0;
|
||||
var UIApplication = plus.ios.import('UIApplication');
|
||||
var app = UIApplication.sharedApplication();
|
||||
var enabledTypes = 0;
|
||||
if (app.currentUserNotificationSettings) {
|
||||
var settings = app.currentUserNotificationSettings();
|
||||
enabledTypes = settings.plusGetAttribute('types');
|
||||
if (enabledTypes == 0) {
|
||||
result = 0;
|
||||
console.log('推送权限没有开启');
|
||||
} else {
|
||||
result = 1;
|
||||
console.log('已经开启推送功能!');
|
||||
}
|
||||
plus.ios.deleteObject(settings);
|
||||
} else {
|
||||
enabledTypes = app.enabledRemoteNotificationTypes();
|
||||
if (enabledTypes == 0) {
|
||||
result = 3;
|
||||
console.log('推送权限没有开启!');
|
||||
} else {
|
||||
result = 4;
|
||||
console.log('已经开启推送功能!');
|
||||
}
|
||||
}
|
||||
plus.ios.deleteObject(app);
|
||||
plus.ios.deleteObject(UIApplication);
|
||||
return result;
|
||||
}
|
||||
|
||||
function contact() {
|
||||
var result = 0;
|
||||
var CNContactStore = plus.ios.import('CNContactStore');
|
||||
var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
|
||||
if (cnAuthStatus === 0) {
|
||||
result = null;
|
||||
} else if (cnAuthStatus == 3) {
|
||||
result = 1;
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
plus.ios.deleteObject(CNContactStore);
|
||||
return result;
|
||||
}
|
||||
|
||||
function record() {
|
||||
var result = null;
|
||||
var avaudiosession = plus.ios.import('AVAudioSession');
|
||||
var avaudio = avaudiosession.sharedInstance();
|
||||
var status = avaudio.recordPermission();
|
||||
console.log('permissionStatus:' + status);
|
||||
if (status === 1970168948) {
|
||||
result = null;
|
||||
} else if (status === 1735552628) {
|
||||
result = 1;
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
plus.ios.deleteObject(avaudiosession);
|
||||
return result;
|
||||
}
|
||||
|
||||
function calendar() {
|
||||
var result = null;
|
||||
var EKEventStore = plus.ios.import('EKEventStore');
|
||||
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
|
||||
if (ekAuthStatus == 3) {
|
||||
result = 1;
|
||||
console.log('日历权限已经开启');
|
||||
} else {
|
||||
console.log('日历权限没有开启');
|
||||
}
|
||||
plus.ios.deleteObject(EKEventStore);
|
||||
return result;
|
||||
}
|
||||
|
||||
function memo() {
|
||||
var result = null;
|
||||
var EKEventStore = plus.ios.import('EKEventStore');
|
||||
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
|
||||
if (ekAuthStatus == 3) {
|
||||
result = 1;
|
||||
console.log('备忘录权限已经开启');
|
||||
} else {
|
||||
console.log('备忘录权限没有开启');
|
||||
}
|
||||
plus.ios.deleteObject(EKEventStore);
|
||||
return result;
|
||||
}
|
||||
|
||||
function requestIOS(permissionID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
switch (permissionID) {
|
||||
case 'push':
|
||||
resolve(push());
|
||||
break;
|
||||
case 'location':
|
||||
resolve(location());
|
||||
break;
|
||||
case 'record':
|
||||
resolve(record());
|
||||
break;
|
||||
case 'camera':
|
||||
resolve(camera());
|
||||
break;
|
||||
case 'album':
|
||||
resolve(album());
|
||||
break;
|
||||
case 'contact':
|
||||
resolve(contact());
|
||||
break;
|
||||
case 'calendar':
|
||||
resolve(calendar());
|
||||
break;
|
||||
case 'memo':
|
||||
resolve(memo());
|
||||
break;
|
||||
default:
|
||||
resolve(0);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function requestAndroid(permissionID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
plus.android.requestPermissions(
|
||||
[permissionID],
|
||||
function (resultObj) {
|
||||
var result = 0;
|
||||
for (var i = 0; i < resultObj.granted.length; i++) {
|
||||
var grantedPermission = resultObj.granted[i];
|
||||
console.log('已获取的权限:' + grantedPermission);
|
||||
result = 1;
|
||||
}
|
||||
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
|
||||
var deniedPresentPermission = resultObj.deniedPresent[i];
|
||||
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
|
||||
result = 0;
|
||||
}
|
||||
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
|
||||
var deniedAlwaysPermission = resultObj.deniedAlways[i];
|
||||
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
|
||||
result = -1;
|
||||
}
|
||||
resolve(result);
|
||||
},
|
||||
function (error) {
|
||||
console.log('result error: ' + error.message);
|
||||
resolve({
|
||||
code: error.code,
|
||||
message: error.message,
|
||||
});
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function gotoAppPermissionSetting() {
|
||||
if (permission.isIOS) {
|
||||
var UIApplication = plus.ios.import('UIApplication');
|
||||
var application2 = UIApplication.sharedApplication();
|
||||
var NSURL2 = plus.ios.import('NSURL');
|
||||
var setting2 = NSURL2.URLWithString('app-settings:');
|
||||
application2.openURL(setting2);
|
||||
plus.ios.deleteObject(setting2);
|
||||
plus.ios.deleteObject(NSURL2);
|
||||
plus.ios.deleteObject(application2);
|
||||
} else {
|
||||
var Intent = plus.android.importClass('android.content.Intent');
|
||||
var Settings = plus.android.importClass('android.provider.Settings');
|
||||
var Uri = plus.android.importClass('android.net.Uri');
|
||||
var mainActivity = plus.android.runtimeMainActivity();
|
||||
var intent = new Intent();
|
||||
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||
var uri = Uri.fromParts('package', mainActivity.getPackageName(), null);
|
||||
intent.setData(uri);
|
||||
mainActivity.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
const permission = {
|
||||
get isIOS() {
|
||||
return typeof isIOS === 'boolean'
|
||||
? isIOS
|
||||
: (isIOS = uni.getSystemInfoSync().platform === 'ios');
|
||||
},
|
||||
requestIOS: requestIOS,
|
||||
requestAndroid: requestAndroid,
|
||||
gotoAppSetting: gotoAppPermissionSetting,
|
||||
};
|
||||
|
||||
export default permission;
|
184
sheep/libs/sdk-h5-weixin.js
Normal file
184
sheep/libs/sdk-h5-weixin.js
Normal file
@@ -0,0 +1,184 @@
|
||||
/**
|
||||
* 本模块封装微信浏览器下的一些方法。
|
||||
* 更多微信网页开发sdk方法,详见:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
|
||||
* 有 the permission value is offline verifying 报错请参考 @see https://segmentfault.com/a/1190000042289419 解决
|
||||
*/
|
||||
|
||||
import jweixin from 'weixin-js-sdk';
|
||||
import $helper from '@/sheep/helper';
|
||||
import AuthUtil from '@/sheep/api/member/auth';
|
||||
|
||||
let configSuccess = false;
|
||||
|
||||
export default {
|
||||
// 判断是否在微信中
|
||||
isWechat() {
|
||||
const ua = window.navigator.userAgent.toLowerCase();
|
||||
// noinspection EqualityComparisonWithCoercionJS
|
||||
return ua.match(/micromessenger/i) == 'micromessenger';
|
||||
},
|
||||
|
||||
isReady(api) {
|
||||
jweixin.ready(api);
|
||||
},
|
||||
|
||||
// 初始化 JSSDK
|
||||
async init(callback) {
|
||||
if (!this.isWechat()) {
|
||||
$helper.toast('请使用微信网页浏览器打开');
|
||||
return;
|
||||
}
|
||||
|
||||
// 调用后端接口,获得 JSSDK 初始化所需的签名
|
||||
const url = location.href.split('#')[0];
|
||||
const { code, data } = await AuthUtil.createWeixinMpJsapiSignature(url);
|
||||
if (code === 0) {
|
||||
jweixin.config({
|
||||
debug: false,
|
||||
appId: data.appId,
|
||||
timestamp: data.timestamp,
|
||||
nonceStr: data.nonceStr,
|
||||
signature: data.signature,
|
||||
jsApiList: ['chooseWXPay', 'openLocation', 'getLocation','updateTimelineShareData','scanQRCode'], // TODO 芋艿:后续可以设置更多权限;
|
||||
openTagList: data.openTagList
|
||||
});
|
||||
}
|
||||
|
||||
// 监听结果
|
||||
configSuccess = true;
|
||||
jweixin.error((err) => {
|
||||
configSuccess = false;
|
||||
console.error('微信 JSSDK 初始化失败', err);
|
||||
// $helper.toast('微信JSSDK:' + err.errMsg);
|
||||
});
|
||||
jweixin.ready(() => {
|
||||
if (configSuccess) {
|
||||
console.log('微信 JSSDK 初始化成功');
|
||||
}
|
||||
})
|
||||
|
||||
// 回调
|
||||
if (callback) {
|
||||
callback(data);
|
||||
}
|
||||
},
|
||||
|
||||
//在需要定位页面调用 TODO 芋艿:未测试
|
||||
getLocation(callback) {
|
||||
this.isReady(() => {
|
||||
jweixin.getLocation({
|
||||
type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
|
||||
success: function (res) {
|
||||
callback(res);
|
||||
},
|
||||
fail: function (res) {
|
||||
console.log('%c微信H5sdk,getLocation失败:', 'color:green;background:yellow');
|
||||
},
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// 获取微信收货地址
|
||||
openAddress(callback) {
|
||||
this.isReady(() => {
|
||||
jweixin.openAddress({
|
||||
success: function (res) {
|
||||
callback.success && callback.success(res);
|
||||
},
|
||||
fail: function (err) {
|
||||
callback.error && callback.error(err);
|
||||
console.log('%c微信H5sdk,openAddress失败:', 'color:green;background:yellow');
|
||||
},
|
||||
complete: function (res) {},
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// 微信扫码 TODO 芋艿:未测试
|
||||
scanQRCode(callback) {
|
||||
this.isReady(() => {
|
||||
jweixin.scanQRCode({
|
||||
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
|
||||
scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
|
||||
success: function (res) {
|
||||
callback(res);
|
||||
},
|
||||
fail: function (res) {
|
||||
console.log('%c微信H5sdk,scanQRCode失败:', 'color:green;background:yellow');
|
||||
},
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// 更新微信分享信息 TODO 芋艿:未测试
|
||||
updateShareInfo(data, callback = null) {
|
||||
this.isReady(() => {
|
||||
const shareData = {
|
||||
title: data.title,
|
||||
desc: data.desc,
|
||||
link: data.link,
|
||||
imgUrl: data.image,
|
||||
success: function (res) {
|
||||
if (callback) {
|
||||
callback(res);
|
||||
}
|
||||
// 分享后的一些操作,比如分享统计等等
|
||||
},
|
||||
cancel: function (res) {},
|
||||
};
|
||||
|
||||
// 新版 分享聊天api
|
||||
jweixin.updateAppMessageShareData(shareData);
|
||||
// 新版 分享到朋友圈api
|
||||
jweixin.updateTimelineShareData(shareData);
|
||||
});
|
||||
},
|
||||
|
||||
// 打开坐标位置 TODO 芋艿:未测试
|
||||
openLocation(data, callback) {
|
||||
this.isReady(() => {
|
||||
jweixin.openLocation({
|
||||
...data,
|
||||
success: function (res) {
|
||||
console.log(res);
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// 选择图片 TODO 芋艿:未测试
|
||||
chooseImage(callback) {
|
||||
this.isReady(() => {
|
||||
jweixin.chooseImage({
|
||||
count: 1,
|
||||
sizeType: ['compressed'],
|
||||
sourceType: ['album'],
|
||||
success: function (rs) {
|
||||
callback(rs);
|
||||
},
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// 微信支付
|
||||
wxpay(data, callback) {
|
||||
this.isReady(() => {
|
||||
jweixin.chooseWXPay({
|
||||
timestamp: data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
|
||||
nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位
|
||||
package: data.packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
|
||||
signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
|
||||
paySign: data.paySign, // 支付签名
|
||||
success: function (res) {
|
||||
callback.success && callback.success(res);
|
||||
},
|
||||
fail: function (err) {
|
||||
callback.fail && callback.fail(err);
|
||||
},
|
||||
cancel: function (err) {
|
||||
callback.cancel && callback.cancel(err);
|
||||
},
|
||||
});
|
||||
});
|
||||
},
|
||||
};
|
Reference in New Issue
Block a user