
插件开发 | 插件需求 | 个人接单 | 多年uni原生插件开发| iOS+Android 。插件定制,欢迎骚扰
插件开发 | 插件需求 | 个人接单 | 多年uni原生插件开发| iOS+Android | 插件定制 | uniapp | 欢迎骚扰
uni原生插件 ! 个人接单!多年uni原生插件开发,原生sdk接入,iOS+Android。uni插件 5+插件,
小程序,uni前端,也可以~
阿里
阿里认证 | 阿里oss上传 | 阿里播放器
支付宝资金预授权 | 一键登录 | 阿里云短视频
阿里云风险控制 |
百度
百度播放器 | 文字识别 | 百度统计
离线人脸识别
腾讯
人脸识别 | 超级播放器 | IM单聊+离线推送
短视频编辑 | 短视频制作
支付类
中金支付 | 全民支付 | nihaooPay
latiPay | funsionPau | adyen drop-in
聚富通支付 |
国外
stripe pay | google map 谷歌地图 | twitter登录 | facebook登录/分享
微软授权登录 | FB AppEvents | FCM 谷歌推送 | firebase授权登录
google 登录
android平台
迅雷下载无限速 | 屏蔽短信 | 屏蔽通知 | usb 串口 | 呼叫转移
android分片上传(byte) | 华视身份证 | 获取通话记录 | 广告机 关机 重启 设置系统时间
DLNA | 悬浮窗截屏 | 获取通知 | hainaIOT
isProxy(是否使用代理) | 录制PCM | soundtouch(变声) | pcm 降噪
无障碍微信朋友圈多图分享 | 矩阵识别 | RDPOrigin | rfid
sicpay支付 | nihaoPay支付 | ios 裁剪 | 字节美颜组件
linphone sip | 快手分享sdk | 快手登录sdk | 极光分享 | 极光短信
极光认证 | 极光统计 | 汉枫配网 (SmartLink ) | 华为畅联(CaasKit)
助听器 耳返 | otg 单反相机 | TuyaSDK | Paddle文字识别
个推统计 | 自动通话录音 | 来电自动接听 | mqtt双向认证
vpn | openvpn | 禁止 app 联网 | 获取单反相机照片 Nikon
ios 平台
ios 后台播放 | ios后台持续录音 | ios后台定位 | 录制PCM | NFC读写
高精度图片扫码 | 矩阵识别 | nihaoPay支付 | ios healthkit (健康)
NEHotspot(设置wifi) | ios 裁剪 | 阿里云短视频制作 | 快手分享sdk
快手登录sdk | 汉枫配网 (SmartLink ) | 助听器 耳返 | 个推统计
mqtt双向认证 | vpn | openvpn |
工具类
svga播放器 | ios Wifi ssid Wifi mac地址 | 高德导航组件 | 高德导航component
快递单号识别 读取 | 手机号码识别 | 经典蓝牙2.0 nRF DFU SDK | android dfu
ios dfu | 蓝牙空中升级 | ios 后台录音
虹软人脸识别 | 蓝牙耳机录音 | 摄像头预览组件 | 录制PCM | 两端录屏
拦截截图 | 迅雷下载(不限速) | 微信分享第三方来源 | yuqueAD(广告)
mobAD(广告) | 矩阵识别 | 助听器 耳返 | 友盟统计
个推统计 (个数统计) | 自动通话录音 | 来电自动接听 | 控制其他app联网
音视频类
萤石云直播与回放 | 环信视频通话 | 美摄拍摄 | 环信音视频通话 | 音视频合成 | 腾讯推拉流
金山云推拉流 | 美狐美颜 | 字节美颜 | 相芯美颜 | 相芯背景分割
等等等等。。。。。
QQ 2253764427
QQ群 : 2253764427( uniapp原生插件开发 )
欢迎骚扰~
插件开发 | 插件需求 | 个人接单 | 多年uni原生插件开发| iOS+Android | 插件定制 | uniapp | 欢迎骚扰
uni原生插件 ! 个人接单!多年uni原生插件开发,原生sdk接入,iOS+Android。uni插件 5+插件,
小程序,uni前端,也可以~
阿里
阿里认证 | 阿里oss上传 | 阿里播放器
支付宝资金预授权 | 一键登录 | 阿里云短视频
阿里云风险控制 |
百度
百度播放器 | 文字识别 | 百度统计
离线人脸识别
腾讯
人脸识别 | 超级播放器 | IM单聊+离线推送
短视频编辑 | 短视频制作
支付类
中金支付 | 全民支付 | nihaooPay
latiPay | funsionPau | adyen drop-in
聚富通支付 |
国外
stripe pay | google map 谷歌地图 | twitter登录 | facebook登录/分享
微软授权登录 | FB AppEvents | FCM 谷歌推送 | firebase授权登录
google 登录
android平台
迅雷下载无限速 | 屏蔽短信 | 屏蔽通知 | usb 串口 | 呼叫转移
android分片上传(byte) | 华视身份证 | 获取通话记录 | 广告机 关机 重启 设置系统时间
DLNA | 悬浮窗截屏 | 获取通知 | hainaIOT
isProxy(是否使用代理) | 录制PCM | soundtouch(变声) | pcm 降噪
无障碍微信朋友圈多图分享 | 矩阵识别 | RDPOrigin | rfid
sicpay支付 | nihaoPay支付 | ios 裁剪 | 字节美颜组件
linphone sip | 快手分享sdk | 快手登录sdk | 极光分享 | 极光短信
极光认证 | 极光统计 | 汉枫配网 (SmartLink ) | 华为畅联(CaasKit)
助听器 耳返 | otg 单反相机 | TuyaSDK | Paddle文字识别
个推统计 | 自动通话录音 | 来电自动接听 | mqtt双向认证
vpn | openvpn | 禁止 app 联网 | 获取单反相机照片 Nikon
ios 平台
ios 后台播放 | ios后台持续录音 | ios后台定位 | 录制PCM | NFC读写
高精度图片扫码 | 矩阵识别 | nihaoPay支付 | ios healthkit (健康)
NEHotspot(设置wifi) | ios 裁剪 | 阿里云短视频制作 | 快手分享sdk
快手登录sdk | 汉枫配网 (SmartLink ) | 助听器 耳返 | 个推统计
mqtt双向认证 | vpn | openvpn |
工具类
svga播放器 | ios Wifi ssid Wifi mac地址 | 高德导航组件 | 高德导航component
快递单号识别 读取 | 手机号码识别 | 经典蓝牙2.0 nRF DFU SDK | android dfu
ios dfu | 蓝牙空中升级 | ios 后台录音
虹软人脸识别 | 蓝牙耳机录音 | 摄像头预览组件 | 录制PCM | 两端录屏
拦截截图 | 迅雷下载(不限速) | 微信分享第三方来源 | yuqueAD(广告)
mobAD(广告) | 矩阵识别 | 助听器 耳返 | 友盟统计
个推统计 (个数统计) | 自动通话录音 | 来电自动接听 | 控制其他app联网
音视频类
萤石云直播与回放 | 环信视频通话 | 美摄拍摄 | 环信音视频通话 | 音视频合成 | 腾讯推拉流
金山云推拉流 | 美狐美颜 | 字节美颜 | 相芯美颜 | 相芯背景分割
等等等等。。。。。
QQ 2253764427
QQ群 : 2253764427( uniapp原生插件开发 )
欢迎骚扰~
收起阅读 »
Nvue动态更改titleNView的值onNavigationBarButtonTap监听不生效问题
onNavigationBarButtonTap(e) {
const index = e.index
if (index == 0) {
console.log("点击了")
}
},
setStyle(index, text) {
console.log(index, text)
let pages = getCurrentPages();
let page = pages[pages.length - 1];
// // // 添加文字过长截取为3个字符,请根据自己业务需求更改
if (text.length > 3) {
text = text.substr(0, 3) + '...';
}
console.log(index, text)
let currentWebview = page.$getAppWebview();
currentWebview.setTitleNViewButtonStyle(0, {
text: text,
redDot: false
});
},
onNavigationBarButtonTap(e) {
const index = e.index
if (index == 0) {
console.log("点击了")
}
},
setStyle(index, text) {
console.log(index, text)
let pages = getCurrentPages();
let page = pages[pages.length - 1];
// // // 添加文字过长截取为3个字符,请根据自己业务需求更改
if (text.length > 3) {
text = text.substr(0, 3) + '...';
}
console.log(index, text)
let currentWebview = page.$getAppWebview();
currentWebview.setTitleNViewButtonStyle(0, {
text: text,
redDot: false
});
},
收起阅读 »

uniapp webrtc 音视频通话即时通讯解决方案
webrtc 这个百度能搜索到很多用法
我用的https://webrtc.github.io/adapter/adapter-latest.js 这个整合api
写了很多浏览器调用摄像头的hack 所以很好用
关于webrtc uniapp 的坑
1、video audio 不支持srcobject 播放数据流
2、video在app上的层级没有控制
3、video和audio的自动播放问题
于是用webview 在html上解决这些问题就比较简单了
然后通过vue与html 直接的交互解决页面交互和数据互通的问题
https://ext.dcloud.net.cn/plugin?id=9024
完整的demo 有不懂的可以问我
webrtc 这个百度能搜索到很多用法
我用的https://webrtc.github.io/adapter/adapter-latest.js 这个整合api
写了很多浏览器调用摄像头的hack 所以很好用
关于webrtc uniapp 的坑
1、video audio 不支持srcobject 播放数据流
2、video在app上的层级没有控制
3、video和audio的自动播放问题
于是用webview 在html上解决这些问题就比较简单了
然后通过vue与html 直接的交互解决页面交互和数据互通的问题
https://ext.dcloud.net.cn/plugin?id=9024
完整的demo 有不懂的可以问我

web开发工程师找兼职
本人2年游戏客户端开发经验,4年web开发经验,公司空闲时间比较多,现找web开发兼职,app、h5、微信小程序、数据可视化项目都可以, cocos creator的小游戏也可接 , 微信号:Bill_Dong_web
本人2年游戏客户端开发经验,4年web开发经验,公司空闲时间比较多,现找web开发兼职,app、h5、微信小程序、数据可视化项目都可以, cocos creator的小游戏也可接 , 微信号:Bill_Dong_web

uni原生插件注册
不用创建json文件的另外一种注册方式
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
try {
UniSDKEngine.registerModule("TestModule", TestModule.class);
} catch (UniException e) {
e.printStackTrace();
}
}
}
不用创建json文件的另外一种注册方式
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
try {
UniSDKEngine.registerModule("TestModule", TestModule.class);
} catch (UniException e) {
e.printStackTrace();
}
}
}

拓扑新动画效果,可拖拽,可滚轮缩放。
展示效果网址 http://jstopo.top
!
init(){
this.domRef = this.$refs.canvas;
this.w = this.domRef.width = this.domRef.clientWidth,
this.h = this.domRef.height = this.domRef.clientHeight;
this.ctx = this.domRef.getContext("2d");
this.ctx.textAlign = "center";
this.ctx.textBaseline = "top";
this.ctx.font = "18px 黑体";
this.dotMove();
},
展示效果网址 http://jstopo.top
!
init(){
this.domRef = this.$refs.canvas;
this.w = this.domRef.width = this.domRef.clientWidth,
this.h = this.domRef.height = this.domRef.clientHeight;
this.ctx = this.domRef.getContext("2d");
this.ctx.textAlign = "center";
this.ctx.textBaseline = "top";
this.ctx.font = "18px 黑体";
this.dotMove();
},
收起阅读 »

app-nvue webview加载本地网页,真机上路径错误
app-nvue webview加载本地网页,url不能携带参数(如:/hybrid/html/index.html?id=1 改为 /hybrid/html/index.html)。
数据传递使用webview通信。
webview官网:https://uniapp.dcloud.net.cn/component/web-view.html
<template>
<view>
<web-view ref="webview" class="webview" @onPostMessage="handlePostMessage"></web-view>
<button class="button" @click="evalJs">evalJs(改变webview背景颜色)</button>
</view>
</template>
<script>
export default {
data: {
},
methods: {
// webview向外部发送消息
handlePostMessage: function(data) {
console.log("接收到消息:" JSON.stringify(data.detail));
},
// 调用 webview 内部逻辑和方法(方法挂载到window对象上)
evalJs: function() {
this.$refs.webview.evalJs(`方法名(${paramStr})`);
}
}
}
</script>
app-nvue webview加载本地网页,url不能携带参数(如:/hybrid/html/index.html?id=1 改为 /hybrid/html/index.html)。
数据传递使用webview通信。
webview官网:https://uniapp.dcloud.net.cn/component/web-view.html
<template>
<view>
<web-view ref="webview" class="webview" @onPostMessage="handlePostMessage"></web-view>
<button class="button" @click="evalJs">evalJs(改变webview背景颜色)</button>
</view>
</template>
<script>
export default {
data: {
},
methods: {
// webview向外部发送消息
handlePostMessage: function(data) {
console.log("接收到消息:" JSON.stringify(data.detail));
},
// 调用 webview 内部逻辑和方法(方法挂载到window对象上)
evalJs: function() {
this.$refs.webview.evalJs(`方法名(${paramStr})`);
}
}
}
</script>
收起阅读 »

如何解决打包后wap2app顶部标题栏与APP首页内容重叠,真机调试中显示正常
Step1.修改manifest.json文件
将plus>statusbar>immersed的值修改为"false"或"none"。
即:
"plus" : {
......
"statusbar" : {
"immersed" : "none"
},
......
}
Step2.(可选)修改导航栏颜色样式
完成Step1后导航栏默认显示为灰色背景,黑色字体。
如需修改样式,请修改client_index.html文件。
在body标签中加入
<script type="text/javascript">
if(window.plus)
{
plusReady()
}
else
{
document.addEventListener('plusready',plusReady,false)
}
function plusReady()
{
plus.navigator.setStatusBarBackground('#FFFFFF');
plus.navigator.setStatusBarStyle('dark');
}
</script>
Step1.修改manifest.json文件
将plus>statusbar>immersed的值修改为"false"或"none"。
即:
"plus" : {
......
"statusbar" : {
"immersed" : "none"
},
......
}
Step2.(可选)修改导航栏颜色样式
完成Step1后导航栏默认显示为灰色背景,黑色字体。
如需修改样式,请修改client_index.html文件。
在body标签中加入
<script type="text/javascript">
if(window.plus)
{
plusReady()
}
else
{
document.addEventListener('plusready',plusReady,false)
}
function plusReady()
{
plus.navigator.setStatusBarBackground('#FFFFFF');
plus.navigator.setStatusBarStyle('dark');
}
</script>
收起阅读 »

python后端直接通过http的方式操作数据库, 不通过web控制台或者云函数
只贴下python的insert数据库的操作, 其他语言类似
免费版的url = 'https://api.bspapp.com/client'
收费版的是url = 'https://api.next.bspapp.com/client'自己替换下
import requests
import json
import time
import hmac
import hashlib
def insert():
# accessToken是后面header需要的参数
accessToken = get_access_token()
url = 'https://api.bspapp.com/client'
payload = {
'method': 'serverless.function.runtime.invoke',
'params': json.dumps(
{
"functionTarget": "DCloud-clientDB",
"functionArgs": {
"command": {
"$db": [
{
"$method": "collection",
"$param": ["表名"]
}, {
"$method": "add", #如果是update这里add就换成update. 写法类似于mongodb的
"$param": [{"字段名1": "字段值1"}]
}
]
}
}
}
),
# spaceId自己在web控制台找, timestamp是时间戳
'spaceId': spaceId,
'timestamp': int(round(time.time() * 1000)),
'token': accessToken,
}
headers = {
'content-type': 'application/json',
'x-basement-token': accessToken,
'x-serverless-sign': get_sign(payload),
}
payload = json.dumps(payload)
# 发送post请求
response = requests.post(url, data=payload, headers=headers)
result = json.loads(response.text)
return result
#获取access_token的方法, access_token一段时间会过期
def get_access_token():
url = 'https://api.bspapp.com/client'
payload = {
'method': 'serverless.auth.user.anonymousAuthorize',
'params': '{}',
'spaceId': spaceId,
'timestamp': int(round(time.time() * 1000)),
}
headers = {
'Content-Type': 'application/json',
'x-serverless-sign': get_sign(payload)
}
payload = json.dumps(payload)
response = requests.post(url, data=payload, headers=headers)
result = json.loads(response.text)
access_token = result['data']['accessToken']
return access_token
# 签名参数
def get_sign(param):
#按照键名的升序排序
param = ksort(param)
#键与值 等号拼接的数组, 结果如["键1=值1", "键2=值2", "键3=值3"...]
signList = []
for k, v in param:
if v != '':
signList.append(k + '=' + str(v))
# 每个参数对拼接&并连在一起的字符串, 结果如 "键1=值1&键2=值2&键3=值3"...
signPars = '&'.join(signList)
#md5 hmac加密, clientSecret自己的web控制台里找, hmac, hashlib是python自带的库..其他语言也应该有类似的
sign = hmac.new(clientSecret.encode('utf-8'), signPars.encode('utf-8'), digestmod=hashlib.md5).hexdigest()
return sign
#按照键名的升序排序, php里直接有ksort() 可以使用
def ksort(d):
return [(k, d[k]) for k in sorted(d.keys())]
下面是一些写法举例
查询,比如查_id: 17的那条数据
"command": {
"$db": [
{
"$method": "collection",
"$param": ["表名"]
}, {
"$method": "where",
"$param": [{"_id": 17}]
}, {
"$method": "get",
"$param": []
}
]
}
删除, 比如删除_id: 17的那条数据
"command": {
"$db": [
{
"$method": "collection",
"$param": ["表名"]
}, {
"$method": "where",
"$param": [{"_id": 17}]
}, {
"$method": "remove",
"$param": []
}
]
},
改, 修改_id:17的那条数据
"command": {
"$db": [
{
"$method": "collection",
"$param": ["表名"]
}, {
"$method": "where",
"$param": [{"_id": 17]
}, {
"$method": "update",
"$param": [{"字段1":"字段值1"}]
}
]
}
只贴下python的insert数据库的操作, 其他语言类似
免费版的url = 'https://api.bspapp.com/client'
收费版的是url = 'https://api.next.bspapp.com/client'自己替换下
import requests
import json
import time
import hmac
import hashlib
def insert():
# accessToken是后面header需要的参数
accessToken = get_access_token()
url = 'https://api.bspapp.com/client'
payload = {
'method': 'serverless.function.runtime.invoke',
'params': json.dumps(
{
"functionTarget": "DCloud-clientDB",
"functionArgs": {
"command": {
"$db": [
{
"$method": "collection",
"$param": ["表名"]
}, {
"$method": "add", #如果是update这里add就换成update. 写法类似于mongodb的
"$param": [{"字段名1": "字段值1"}]
}
]
}
}
}
),
# spaceId自己在web控制台找, timestamp是时间戳
'spaceId': spaceId,
'timestamp': int(round(time.time() * 1000)),
'token': accessToken,
}
headers = {
'content-type': 'application/json',
'x-basement-token': accessToken,
'x-serverless-sign': get_sign(payload),
}
payload = json.dumps(payload)
# 发送post请求
response = requests.post(url, data=payload, headers=headers)
result = json.loads(response.text)
return result
#获取access_token的方法, access_token一段时间会过期
def get_access_token():
url = 'https://api.bspapp.com/client'
payload = {
'method': 'serverless.auth.user.anonymousAuthorize',
'params': '{}',
'spaceId': spaceId,
'timestamp': int(round(time.time() * 1000)),
}
headers = {
'Content-Type': 'application/json',
'x-serverless-sign': get_sign(payload)
}
payload = json.dumps(payload)
response = requests.post(url, data=payload, headers=headers)
result = json.loads(response.text)
access_token = result['data']['accessToken']
return access_token
# 签名参数
def get_sign(param):
#按照键名的升序排序
param = ksort(param)
#键与值 等号拼接的数组, 结果如["键1=值1", "键2=值2", "键3=值3"...]
signList = []
for k, v in param:
if v != '':
signList.append(k + '=' + str(v))
# 每个参数对拼接&并连在一起的字符串, 结果如 "键1=值1&键2=值2&键3=值3"...
signPars = '&'.join(signList)
#md5 hmac加密, clientSecret自己的web控制台里找, hmac, hashlib是python自带的库..其他语言也应该有类似的
sign = hmac.new(clientSecret.encode('utf-8'), signPars.encode('utf-8'), digestmod=hashlib.md5).hexdigest()
return sign
#按照键名的升序排序, php里直接有ksort() 可以使用
def ksort(d):
return [(k, d[k]) for k in sorted(d.keys())]
下面是一些写法举例
查询,比如查_id: 17的那条数据
"command": {
"$db": [
{
"$method": "collection",
"$param": ["表名"]
}, {
"$method": "where",
"$param": [{"_id": 17}]
}, {
"$method": "get",
"$param": []
}
]
}
删除, 比如删除_id: 17的那条数据
"command": {
"$db": [
{
"$method": "collection",
"$param": ["表名"]
}, {
"$method": "where",
"$param": [{"_id": 17}]
}, {
"$method": "remove",
"$param": []
}
]
},
改, 修改_id:17的那条数据
"command": {
"$db": [
{
"$method": "collection",
"$param": ["表名"]
}, {
"$method": "where",
"$param": [{"_id": 17]
}, {
"$method": "update",
"$param": [{"字段1":"字段值1"}]
}
]
}
收起阅读 »