更新记录
1.0.7(2019-11-08)
修复发送短信后闪退问题
1.0.6(2019-11-05)
新增可以从js传递appkey、appsecret。
1.0.5(2019-11-05)
修复不能被正常打包的问题
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
√ | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
这个插件是我根据MOBSMS官方最新的SDK打包而来。MOBSMSSDK的版权归MOB所有。如有侵权,请联系我删除。
这只是安卓端哦。IOS端我还没打包,有时间弄了更新上来。
使用必读
- 打开你项目的
manifest.json
- 点击APP原生插件配置
- 选择云端插件,选择已经购买或者正在试用的
WB-MobSms
插件。注意,需要在Uni-app插件市场为此项目购买或试用时候才能看到。 - 去
mob.com
注册一个账号一个应用,在APP原生插件配置>WB-MobSms
填写你的appKey ,appSecret。 - 制作自定义基座。操作为
打开Hbuilder>打开你的项目>运行>运行到手机或模拟器>制作自定义基座>只勾选安卓>选中自定义基座>点击打包>等待打包完成
。再按照引入
和发送短信
操作。 - 调试,
运行>运行到手机或模拟器>运行基座选择>自定义基座
,之后再点击运行到手机,查看效果。
试用说明
试用也要按照使用必读操作1-6
步骤,试用与购买的不同只在于不能使用发行>云打包
功能,其他都一样,都需要自定义基座才能运行,评论中有人提到显示[JS Framework] using unregistered weex module "WB-MobSms"
就是因为没有使用自定义基座,原生插件都需要自定义基座的。
引入
const mobsms = uni.requireNativePlugin('WB-MobSms');
发送短信
直接使用:
mobsms.sendSms(
{
zone: '86',
phone_number: "18900000000"
},
result => {
console.log(result.status);//此处返回是否发送成功,string类型success,fail
if (result.status == 'success') {
//播放加载中动画0.8s
uni.showToast({
title: '验证码获取中',
icon: 'loading',
duration: 800
});
}
}
);
也可以传入短信模板编号,例如:
mobsms.sendSms(
{
zone: '86',
phone_number: "18900000000",
temp_code: "0"
},
result => {
console.log(result.status);//此处返回是否发送成功,string类型success,fail
if (result.status == 'success') {
//播放加载中动画0.8s
uni.showToast({
title: '验证码获取中',
icon: 'loading',
duration: 800
});
}
}
);
如果打包之后不能正确发送短信提示appsecret为空,可以手动传入appkey和appsecret。
mobsms.sendSms(
{
zone: '86',
phone_number: "18900000000",
appKey: "",
appSecret: ""
},
result => {
console.log(result.status);//此处返回是否发送成功,string类型success,fail
if (result.status == 'success') {
//播放加载中动画0.8s
uni.showToast({
title: '验证码获取中',
icon: 'loading',
duration: 800
});
}
}
);
验证
为了安全,建议使用服务端验证。 这里贴一段Go语言后端验证代码
type mobSmsData struct {
Status int
Error string
}
type responseData struct {
Status string `json:"status"`
Message string `json:"message"`
}
func CheckSms(zone string, phoneNumber string, smsCode string) responseData {
var response responseData
var mob mobSmsData
url := "https://webapi.sms.mob.com/sms/verify"
appkey := "your appkey"
payloadString := "appkey=" + appkey + "&phone=" + phoneNumber + "&zone=" + zone + "&code=" + smsCode
payload := strings.NewReader(payloadString)
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/x-www-form-urlencoded")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
jsonStr := []byte(string(body))
err := json.Unmarshal(jsonStr, &mob)
if err != nil {
fmt.Println(err)
}
switch mob.Status {
case 200:
response.Status = "success"
response.Message = "验证成功"
default:
response.Status = "fail"
if len(mob.Error) != 0 {
response.Message = mob.Error
} else {
response.Message = "与短信服务器通信失败"
}
}
return response
}
附赠
Uniapp是一个纯前端框架,前端总是要和服务器通信才能运作的。当用户有了恶意输入后对后端程序员的要求就比较高了,而且各种绕过方法层出不穷,红蓝对抗是一个长期的过程。
为了安全,我根据开源的WAF自己改了一个WEB应用防火墙(WAF),并且开源给大家看。
有需要的可以Github自取:wubonetcn/luawaf
有问题可以与我联系wubo@wubo.net.cn
。