HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

【分享】环信IM SDK 移植分享

技术分享 uniapp

前言
环信IM小程序版本的SDK要正常在小程序里使用,开发者工具就必须开启ES6转ES5,而Uni-app 本身已经转过一次了,所以在转一次 strophe.js 就会报错,根本原因就是没有暴露接口了,所以,顺着这个思路,只要修改 strophe.js 这个js使其可以正常引入就行了。

使用方法

  1. 用我提供的 strophe.js 替换掉 环信官方小程序SDK里的 strophe.js
  2. 在需要聊天的页面引入WebIM.js文件
    let WebIM = require('../../common/sdk/WebIM')['default']  
    ...  
    onLoad:function(){  
    WebIM.conn.open({  
            user: '用户名',  
            pwd: '密码',  
            appKey: '环信官方申请的Key',  
            apiUrl: 'https://a1.easemob.com',  
        });  
        WebIM.conn.listen({  
            onOpened(message) {  
    // 如果没有开启自动登录,这里必须设置WebIM.conn.setPresence(); 否则无法接受消息  
                 WebIM.conn.setPresence();  
                console.log("onOpened", message);  
            },  
            onTextMessage: function (res) { //收到文本消息  
                console.log(res)  
            },  
        })  
    }
  3. 敬请享用吧

最后
如果帮到你请点个赞吧

继续阅读 »

前言
环信IM小程序版本的SDK要正常在小程序里使用,开发者工具就必须开启ES6转ES5,而Uni-app 本身已经转过一次了,所以在转一次 strophe.js 就会报错,根本原因就是没有暴露接口了,所以,顺着这个思路,只要修改 strophe.js 这个js使其可以正常引入就行了。

使用方法

  1. 用我提供的 strophe.js 替换掉 环信官方小程序SDK里的 strophe.js
  2. 在需要聊天的页面引入WebIM.js文件
    let WebIM = require('../../common/sdk/WebIM')['default']  
    ...  
    onLoad:function(){  
    WebIM.conn.open({  
            user: '用户名',  
            pwd: '密码',  
            appKey: '环信官方申请的Key',  
            apiUrl: 'https://a1.easemob.com',  
        });  
        WebIM.conn.listen({  
            onOpened(message) {  
    // 如果没有开启自动登录,这里必须设置WebIM.conn.setPresence(); 否则无法接受消息  
                 WebIM.conn.setPresence();  
                console.log("onOpened", message);  
            },  
            onTextMessage: function (res) { //收到文本消息  
                console.log(res)  
            },  
        })  
    }
  3. 敬请享用吧

最后
如果帮到你请点个赞吧

收起阅读 »

公众号模板消息功能的开发与设置

  对于公众号内模板消息功能的使用,首先去微信公众平台开通模板消息功能,认证的时间大约是3天。认证通过后选择模板,获得消息模板ID。此功能主要用于微信公众号消息提醒,比如客户的商家认证审核通过,用户购买商品成功等功能提醒,可以有效减少网站项目开发所必要的资金节约。下面重点来讲解一下接口代码:

接口代码如下:

// 字符编码

header("Content-Type:text/html; charset=utf-8");

// 微信接口类

class Wchat{

private static $appid;

private static $appsecret;

function __construct(){

self::$appid = '';

self::$appsecret ='';

}

// 微信授权地址

public static function getAuthorizeUrl($url){

$url_link = urlencode($url);

return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . self::$appid . "&redirect_uri={$url_link}&response_type=code&scope=snsapi_base&state=1#Wchat_redirect";

}

// 获取TOKEN

public static function getToken(){

$urla = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . self::$appid . "&secret=" . self::$appsecret;

$outputa = self::curlGet($urla);

$result = json_decode($outputa, true);

return $result['access_token'];

}

/**

  • getUserInfo 获取用户信息

  • @param string $code 微信授权code

  • @param string $weiwei_token Token

  • @return array

*/

public static function getUserInfo($code, $weiwei_token){

$access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . self::$appid . "&secret=" . self::$appsecret . "&code={$code}&grant_type=authorization_code";

$access_token_json = self::curlGet($access_token_url);

$access_token_array = json_decode($access_token_json, true);

$openid = $access_token_array['openid'];

$new_access_token = $weiwei_token;

//全局access token获得用户基本信息

$userinfo_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={$new_access_token}&openid={$openid}";

$userinfo_json = self::curlGet($userinfo_url);

$userinfo_array = json_decode($userinfo_json, true);

return $userinfo_array;

}

/**

  • pushMessage 发送自定义的模板消息

  • @param array $data 模板数据

$data = [

'openid' => '', 用户openid

'url' => '', 跳转链接

'template_id' => '', 模板id

'data' => [ // 消息模板数据

'first' => ['value' => urlencode('黄旭辉'),'color' => "#743A3A"],

'keyword1' => ['value' => urlencode('男'),'color'=>'blue'],

'keyword2' => ['value' => urlencode('1993-10-23'),'color' => 'blue'],

'remark' => ['value' => urlencode('我的模板'),'color' => '#743A3A']

]

];

  • @param string $topcolor 模板内容字体颜色,不填默认为黑色

  • @return array

*/

public static function pushMessage($data = [],$topcolor = '#0000'){

$template = [

'touser' => $data['openid'],

'template_id' => $data['template_id'],

'url' => $data['url'],

'topcolor' => $topcolor,

'data' => $data['data']

];

$json_template = json_encode($template);

$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . self::getToken();

$result = self::curlPost($url, urldecode($json_template));

$resultData = json_decode($result, true);

return $resultData;

}

/**

  • addLog 日志记录

  • @param string $log_content 日志内容

*/

public static function addLog($log_content = ''){

$data = "";

$data .= "DATE: [ " . date('Y-m-d H:i:s') . " ]\r\n";

$data .= "INFO: " . $log_content . "\r\n\r\n";

file_put_contents('/Wchat.log', $data, FILE_APPEND);

}

/**

  • 发送get请求

  • @param string $url 链接

  • @return bool|mixed

*/

private static function curlGet($url){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

if(curl_errno($curl)){

return 'ERROR ' . curl_error($curl);

}

curl_close($curl);

return $output;

}

/**

  • 发送post请求

  • @param string $url 链接

  • @param string $data 数据

  • @return bool|mixed

*/

private static function curlPost($url, $data = null){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

if(!empty($data)){

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

}

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

curl_close($curl);

return $output;

}

}

/**

  • get_page_url 获取完整URL

  • @return url

*/

function get_page_url($type = 0){

$pageURL = 'http';

if($_SERVER["HTTPS"] == 'on'){

$pageURL .= 's';

}

$pageURL .= '://';

if($type == 0){

$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];

}else{

$pageURL .= $_SERVER["SERVER_NAME"];

}

return $pageURL;

}

// 获取用户openid

$Wchat = new Wchat();

if(empty($_GET['code']) || !isset($_GET['code'])){

// 通过授权获取code

$url = get_page_url();

$authorize_url = $Wchat->getAuthorizeUrl($url);

header("Location:{$authorize_url}"); // 重定向浏览器

exit();

}else{

// 获取微信用户信息

$uid=session("uid");

$info=M("user")->where("uid=$uid")->find();

$openid=$info['openid'];

$list=M("good")->where("uid=$uid and fabu=2")->select();

foreach ($list as $key => $value) {

$good_id[]=$value['id'];

}

$where['shop_uid']=$uid;

$where['good_id']=array("in",$good_id);

$where['price_state']=1;

$res=M("good_pai_price")->where($where)->order("addtime desc")->limit(1)->find();

$id=$res['good_id'];

$mai_uid=$res['uid'];

$goodinfo=M("good")->where("id=$id")->find();

// echo $mai_uid;exit;

$userinfo=M("user")->where("uid=$mai_uid")->find();

// var_dump($goodinfo);exit;

$code = $_GET['code'];

$weiwei_token = $Wchat->getToken(); // 获取微信token

$user_info = $Wchat->getUserInfo($code, $weiwei_token);

// $openid = $user_info['openid'];

公众号消息推送

$Wchat::pushMessage([

'openid' => $openid, // 用户openid

'access_token' => $weiwei_token,

'template_id' => "", // 填写你自己的消息模板ID

'data' => [ // 模板消息内容,根据模板详情进行设置

'first' => ['value' => urlencode("尊敬的".$info['nickname'].",您好,您的拍品已有人出价。"),'color' => "#743A3A"],

'keyword1' => ['value' => urlencode($goodinfo['desc']),'color'=>'blue'],

'keyword2' => ['value' => urlencode(date("Y-m-d H:i",$res['addtime'])),'color'=>'blue'],

'keyword3' => ['value' => urlencode($userinfo['name']),'color' => 'green'],

'keyword4' => ['value' => urlencode($userinfo['s_province']),'color' => 'green'],

'keyword5' => ['value' => urlencode($res['price']/100),'color' => 'green'],

'remark' => ['value' => urlencode("更多出价详情,请点击页面进行实时查询。"),'color' => '#743A3A']

],

'url' => 'http://www.xxxx.com/Shop/info?id='.$id // 消息跳转链接

]);

}

  1. php调用接口代码

Php代码如下:

public function msg(){

require_once 'WchatAction.class.php';

// 微信接口类

$wchat = new \Wchat();

$wchat->pushMessage();

}

  好了,以上就是全部的源码了,如果大家还是存在不理解的地方,可以留言咨询。

  本文由专业的郑州小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

继续阅读 »

  对于公众号内模板消息功能的使用,首先去微信公众平台开通模板消息功能,认证的时间大约是3天。认证通过后选择模板,获得消息模板ID。此功能主要用于微信公众号消息提醒,比如客户的商家认证审核通过,用户购买商品成功等功能提醒,可以有效减少网站项目开发所必要的资金节约。下面重点来讲解一下接口代码:

接口代码如下:

// 字符编码

header("Content-Type:text/html; charset=utf-8");

// 微信接口类

class Wchat{

private static $appid;

private static $appsecret;

function __construct(){

self::$appid = '';

self::$appsecret ='';

}

// 微信授权地址

public static function getAuthorizeUrl($url){

$url_link = urlencode($url);

return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . self::$appid . "&redirect_uri={$url_link}&response_type=code&scope=snsapi_base&state=1#Wchat_redirect";

}

// 获取TOKEN

public static function getToken(){

$urla = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . self::$appid . "&secret=" . self::$appsecret;

$outputa = self::curlGet($urla);

$result = json_decode($outputa, true);

return $result['access_token'];

}

/**

  • getUserInfo 获取用户信息

  • @param string $code 微信授权code

  • @param string $weiwei_token Token

  • @return array

*/

public static function getUserInfo($code, $weiwei_token){

$access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . self::$appid . "&secret=" . self::$appsecret . "&code={$code}&grant_type=authorization_code";

$access_token_json = self::curlGet($access_token_url);

$access_token_array = json_decode($access_token_json, true);

$openid = $access_token_array['openid'];

$new_access_token = $weiwei_token;

//全局access token获得用户基本信息

$userinfo_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={$new_access_token}&openid={$openid}";

$userinfo_json = self::curlGet($userinfo_url);

$userinfo_array = json_decode($userinfo_json, true);

return $userinfo_array;

}

/**

  • pushMessage 发送自定义的模板消息

  • @param array $data 模板数据

$data = [

'openid' => '', 用户openid

'url' => '', 跳转链接

'template_id' => '', 模板id

'data' => [ // 消息模板数据

'first' => ['value' => urlencode('黄旭辉'),'color' => "#743A3A"],

'keyword1' => ['value' => urlencode('男'),'color'=>'blue'],

'keyword2' => ['value' => urlencode('1993-10-23'),'color' => 'blue'],

'remark' => ['value' => urlencode('我的模板'),'color' => '#743A3A']

]

];

  • @param string $topcolor 模板内容字体颜色,不填默认为黑色

  • @return array

*/

public static function pushMessage($data = [],$topcolor = '#0000'){

$template = [

'touser' => $data['openid'],

'template_id' => $data['template_id'],

'url' => $data['url'],

'topcolor' => $topcolor,

'data' => $data['data']

];

$json_template = json_encode($template);

$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . self::getToken();

$result = self::curlPost($url, urldecode($json_template));

$resultData = json_decode($result, true);

return $resultData;

}

/**

  • addLog 日志记录

  • @param string $log_content 日志内容

*/

public static function addLog($log_content = ''){

$data = "";

$data .= "DATE: [ " . date('Y-m-d H:i:s') . " ]\r\n";

$data .= "INFO: " . $log_content . "\r\n\r\n";

file_put_contents('/Wchat.log', $data, FILE_APPEND);

}

/**

  • 发送get请求

  • @param string $url 链接

  • @return bool|mixed

*/

private static function curlGet($url){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

if(curl_errno($curl)){

return 'ERROR ' . curl_error($curl);

}

curl_close($curl);

return $output;

}

/**

  • 发送post请求

  • @param string $url 链接

  • @param string $data 数据

  • @return bool|mixed

*/

private static function curlPost($url, $data = null){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

if(!empty($data)){

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

}

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

curl_close($curl);

return $output;

}

}

/**

  • get_page_url 获取完整URL

  • @return url

*/

function get_page_url($type = 0){

$pageURL = 'http';

if($_SERVER["HTTPS"] == 'on'){

$pageURL .= 's';

}

$pageURL .= '://';

if($type == 0){

$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];

}else{

$pageURL .= $_SERVER["SERVER_NAME"];

}

return $pageURL;

}

// 获取用户openid

$Wchat = new Wchat();

if(empty($_GET['code']) || !isset($_GET['code'])){

// 通过授权获取code

$url = get_page_url();

$authorize_url = $Wchat->getAuthorizeUrl($url);

header("Location:{$authorize_url}"); // 重定向浏览器

exit();

}else{

// 获取微信用户信息

$uid=session("uid");

$info=M("user")->where("uid=$uid")->find();

$openid=$info['openid'];

$list=M("good")->where("uid=$uid and fabu=2")->select();

foreach ($list as $key => $value) {

$good_id[]=$value['id'];

}

$where['shop_uid']=$uid;

$where['good_id']=array("in",$good_id);

$where['price_state']=1;

$res=M("good_pai_price")->where($where)->order("addtime desc")->limit(1)->find();

$id=$res['good_id'];

$mai_uid=$res['uid'];

$goodinfo=M("good")->where("id=$id")->find();

// echo $mai_uid;exit;

$userinfo=M("user")->where("uid=$mai_uid")->find();

// var_dump($goodinfo);exit;

$code = $_GET['code'];

$weiwei_token = $Wchat->getToken(); // 获取微信token

$user_info = $Wchat->getUserInfo($code, $weiwei_token);

// $openid = $user_info['openid'];

公众号消息推送

$Wchat::pushMessage([

'openid' => $openid, // 用户openid

'access_token' => $weiwei_token,

'template_id' => "", // 填写你自己的消息模板ID

'data' => [ // 模板消息内容,根据模板详情进行设置

'first' => ['value' => urlencode("尊敬的".$info['nickname'].",您好,您的拍品已有人出价。"),'color' => "#743A3A"],

'keyword1' => ['value' => urlencode($goodinfo['desc']),'color'=>'blue'],

'keyword2' => ['value' => urlencode(date("Y-m-d H:i",$res['addtime'])),'color'=>'blue'],

'keyword3' => ['value' => urlencode($userinfo['name']),'color' => 'green'],

'keyword4' => ['value' => urlencode($userinfo['s_province']),'color' => 'green'],

'keyword5' => ['value' => urlencode($res['price']/100),'color' => 'green'],

'remark' => ['value' => urlencode("更多出价详情,请点击页面进行实时查询。"),'color' => '#743A3A']

],

'url' => 'http://www.xxxx.com/Shop/info?id='.$id // 消息跳转链接

]);

}

  1. php调用接口代码

Php代码如下:

public function msg(){

require_once 'WchatAction.class.php';

// 微信接口类

$wchat = new \Wchat();

$wchat->pushMessage();

}

  好了,以上就是全部的源码了,如果大家还是存在不理解的地方,可以留言咨询。

  本文由专业的郑州小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

收起阅读 »

UNI-Chat 简单配置 实现即时通讯

IM

群组:418967623

DOME:插件地址

架构全新更新  
支持分布式事务,集群  
如有问题可可留言  
运行环境 windows  
可配置: wss  
QQ:139939967
继续阅读 »

群组:418967623

DOME:插件地址

架构全新更新  
支持分布式事务,集群  
如有问题可可留言  
运行环境 windows  
可配置: wss  
QQ:139939967
收起阅读 »

百度语音识别应用申请教程

Speech

打开百度语音开放平台页面,登录后进入管理中心:

点击“创建应用”,进入“创建新应用”页面


应用名称:输入应用的名称,如“HelloH5”
应用类型:按平台提供的分类,选择应用所属的类型
选择接口:使用默认值(勾选了语音识别)即可,其它功能暂时未使用
语音包名:由于目前使用的是在线语音识别,勾选“不需要”即可
应用描述:输入应用的描述信息

完成输入后,点击“立即创建”,成功后进入“创建完毕”页面

点击“查看应用详情”,进入“应用详情”页面

这里可查看到AppID、API Key、Secret Key,其中Secret Key需要点击显示按钮才能查看完整内容。

继续阅读 »

打开百度语音开放平台页面,登录后进入管理中心:

点击“创建应用”,进入“创建新应用”页面


应用名称:输入应用的名称,如“HelloH5”
应用类型:按平台提供的分类,选择应用所属的类型
选择接口:使用默认值(勾选了语音识别)即可,其它功能暂时未使用
语音包名:由于目前使用的是在线语音识别,勾选“不需要”即可
应用描述:输入应用的描述信息

完成输入后,点击“立即创建”,成功后进入“创建完毕”页面

点击“查看应用详情”,进入“应用详情”页面

这里可查看到AppID、API Key、Secret Key,其中Secret Key需要点击显示按钮才能查看完整内容。

收起阅读 »

hcoder 祝大家国庆快乐,课程、产品全线优惠,graceUI 为uni-app量身打造的前端优秀框架持续更新中

graceUI uniapp

提前祝大家国庆节快乐!
现在起至十一期间,hcoder 所有收费课程9折【活动已经开启】
现在起至十一期间,hcoder 所有收费产品程9折【GraceUI、graceCms、graceWechat】
感谢大家对hcoder的支持!祝您及家人节日快乐,万事顺意 ^_^

graceUI (为uni-app及小程序量身定制的优秀前端框架)更新报告
2018-09-26 增加数据表格界面
2018-09-26 增加时间轴界面
2018-09-26 增加全屏分类选择界面
2018-09-28 增加购物界面【基于组件通讯机制 实现购物项目算法、总价统计算法】
21个基础组件+13个界面库,大幅度提高您的开发速度!!

相关站点:
课程 : www.hcoder.net
graceUI :grace.hcoder.net
phpGrace : www.phpGrace.com

继续阅读 »

提前祝大家国庆节快乐!
现在起至十一期间,hcoder 所有收费课程9折【活动已经开启】
现在起至十一期间,hcoder 所有收费产品程9折【GraceUI、graceCms、graceWechat】
感谢大家对hcoder的支持!祝您及家人节日快乐,万事顺意 ^_^

graceUI (为uni-app及小程序量身定制的优秀前端框架)更新报告
2018-09-26 增加数据表格界面
2018-09-26 增加时间轴界面
2018-09-26 增加全屏分类选择界面
2018-09-28 增加购物界面【基于组件通讯机制 实现购物项目算法、总价统计算法】
21个基础组件+13个界面库,大幅度提高您的开发速度!!

相关站点:
课程 : www.hcoder.net
graceUI :grace.hcoder.net
phpGrace : www.phpGrace.com

收起阅读 »

语音识别插件配置

Speech

概述

HBuilderX已支持讯飞语音识别和百度语音识别:

  • 讯飞语音识别
    无需配置SDK参数
    由于讯飞语音识别SDK绑定appid,云端打包只能固定使用DCloud申请的appid,虽然无需开发者向讯飞语音开放平台申请应用,但也导致无法在讯飞语音开放平台自定义应用个性化的高级语音识别参数配置。
    不支持自定义语音识别界面

  • 百度语音识别
    需要向百度语音开放平台申请AppID、API Key、Secret Key,详情可参考百度语音识别应用申请教程
    云端打包时在manifest.json中的“SDK配置”项中填入配置参数。
    支持自定义语音识别界面,参考HelloH5模板应用中Speech页面中的“自定义语音识别”源码

配置参数需要提交云端打包后才能生效,如果需要真机运行生效请使用自定义基座

HBuilderX中配置使用语音识别功能

从百度语音开放平台申请获取配置参数后,需在HBuilderX中配置并提交云端打包才能生效。
老版本HBuilder配置界面有差异,逻辑是一样的,建议更新使用HBuilderX

打开项目的manifest.json文件,在“App模块配置”项中勾选“Speech(语音输入,只能选一个)”:

注意:不能同时支持讯飞语音识别和百度语音识别,只可二选一

百度语音识别

在manifest.json文件“App模块配置”项的“Speech(语音输入,只能选一个)”下,勾选“百度语音识别”项,并输入从百度开放平台申请的参数:

  • appid:
    百度语音开放平台申请的AppID
  • apikey:
    百度语音开放平台申请的API Key
  • secretkey:
    百度语音开放平台申请的Secret Key

请到百度语音开放平台申请:https://console.bce.baidu.com/ai/

讯飞语音识别

在manifest.json文件“App模块配置”项的“Speech(语音输入,只能选一个)”下,勾选“讯飞语音识别”项:

注意:讯飞语音识别有识别次数限制,建议优先使用百度语音识别。

配置完成后Ctrl+S保存提交App云端打包生效。

继续阅读 »

概述

HBuilderX已支持讯飞语音识别和百度语音识别:

  • 讯飞语音识别
    无需配置SDK参数
    由于讯飞语音识别SDK绑定appid,云端打包只能固定使用DCloud申请的appid,虽然无需开发者向讯飞语音开放平台申请应用,但也导致无法在讯飞语音开放平台自定义应用个性化的高级语音识别参数配置。
    不支持自定义语音识别界面

  • 百度语音识别
    需要向百度语音开放平台申请AppID、API Key、Secret Key,详情可参考百度语音识别应用申请教程
    云端打包时在manifest.json中的“SDK配置”项中填入配置参数。
    支持自定义语音识别界面,参考HelloH5模板应用中Speech页面中的“自定义语音识别”源码

配置参数需要提交云端打包后才能生效,如果需要真机运行生效请使用自定义基座

HBuilderX中配置使用语音识别功能

从百度语音开放平台申请获取配置参数后,需在HBuilderX中配置并提交云端打包才能生效。
老版本HBuilder配置界面有差异,逻辑是一样的,建议更新使用HBuilderX

打开项目的manifest.json文件,在“App模块配置”项中勾选“Speech(语音输入,只能选一个)”:

注意:不能同时支持讯飞语音识别和百度语音识别,只可二选一

百度语音识别

在manifest.json文件“App模块配置”项的“Speech(语音输入,只能选一个)”下,勾选“百度语音识别”项,并输入从百度开放平台申请的参数:

  • appid:
    百度语音开放平台申请的AppID
  • apikey:
    百度语音开放平台申请的API Key
  • secretkey:
    百度语音开放平台申请的Secret Key

请到百度语音开放平台申请:https://console.bce.baidu.com/ai/

讯飞语音识别

在manifest.json文件“App模块配置”项的“Speech(语音输入,只能选一个)”下,勾选“讯飞语音识别”项:

注意:讯飞语音识别有识别次数限制,建议优先使用百度语音识别。

配置完成后Ctrl+S保存提交App云端打包生效。

收起阅读 »

Audio模块录音格式汇总(aac、mp3)

mp3 audio aac

新版本HBuilderX(0.1.50)中的5+应用已经支持录制aac和mp3格式文件:
目前Audio模板的通用录音格式有aac、mp3、amr。
另外Android支持录制为3gp,iOS支持录制为wav。
微信小程序里支持aac和mp3。
如需要跨端使用,则只能使用acc和mp3。
mp3在Android上的使用需要单独配一个模块,该模块大小为700k:
在manifest.json的plus->distribute->plugins节点中配置:

//...  
"plus": {  
      "distribute": {  
            "plugins": {  
                "audio": {  
                    "mp3": {  
                        "description": "Android平台录音支持MP3格式文件"  
                    }  
                },  
                //...  
            },  
            //...  
      },  
      //...  
}

5+API用法
调用录音时指定格式为mp3,示例:

var r = plus.audio.getRecorder();  
r.record({filename:'_doc/audio/',format:'mp3',}, function(p){  
    console.log('录音完成:'+p);  
}, function(e){  
    console.log('录音失败:'+e.message);  
});

综上推荐使用acc格式,iOS、Android、微信小程序平台都支持,无需额外配置,Android安装包体积更小,录制后的文件体积更小。

继续阅读 »

新版本HBuilderX(0.1.50)中的5+应用已经支持录制aac和mp3格式文件:
目前Audio模板的通用录音格式有aac、mp3、amr。
另外Android支持录制为3gp,iOS支持录制为wav。
微信小程序里支持aac和mp3。
如需要跨端使用,则只能使用acc和mp3。
mp3在Android上的使用需要单独配一个模块,该模块大小为700k:
在manifest.json的plus->distribute->plugins节点中配置:

//...  
"plus": {  
      "distribute": {  
            "plugins": {  
                "audio": {  
                    "mp3": {  
                        "description": "Android平台录音支持MP3格式文件"  
                    }  
                },  
                //...  
            },  
            //...  
      },  
      //...  
}

5+API用法
调用录音时指定格式为mp3,示例:

var r = plus.audio.getRecorder();  
r.record({filename:'_doc/audio/',format:'mp3',}, function(p){  
    console.log('录音完成:'+p);  
}, function(e){  
    console.log('录音失败:'+e.message);  
});

综上推荐使用acc格式,iOS、Android、微信小程序平台都支持,无需额外配置,Android安装包体积更小,录制后的文件体积更小。

收起阅读 »

uni-app在iOS平台上,图片显示空白的临时解决方案

空白 拍照

=============== update @ 20190121============

HBuilderX 1.5 版本已解决该问题,请开发者尽快升级版本。

=============== 如下是原文章 ============

HBuilder X ( 0.1.50.20180918-alpha ) 更新后,uni-app引入了一个新bug:

在iOS平台,通过手机拍照或从相册选择图片,在页面上显示空白

下版本uni-app会修复该问题,开发者目前可以通过如下方案临时解决:

修改manifest.json,在app-plus 节点下增加如下配置:

"runmode" : "liberate"

修改后结果如下:

继续阅读 »

=============== update @ 20190121============

HBuilderX 1.5 版本已解决该问题,请开发者尽快升级版本。

=============== 如下是原文章 ============

HBuilder X ( 0.1.50.20180918-alpha ) 更新后,uni-app引入了一个新bug:

在iOS平台,通过手机拍照或从相册选择图片,在页面上显示空白

下版本uni-app会修复该问题,开发者目前可以通过如下方案临时解决:

修改manifest.json,在app-plus 节点下增加如下配置:

"runmode" : "liberate"

修改后结果如下:

收起阅读 »

this.scroll = new BScroll(this.$refs.xxx)报错解决办法

uniapp

近期做一个城市列表的小demo,用到了第三方的插件better-scroll(如何插入请参考:uni-app引用npm第三方库);
费时1天,解决报错问题:
错误问题:
Cannot read property '0' of undefined;at pages/city/city page lifeCycleMethod onReady function
TypeError: Cannot read property '0' of undefined
at new K (http://127.0.0.1:20155/appservice/pages/city/city.js:9:12181)
at a.mounted (http://127.0.0.1:20155/appservice/pages/city/city.js:9:56084)
at Gt (http://127.0.0.1:20155/appservice/common/vendor.js:2:16693)

错误代码:

this.scroll = new BScroll(this.$refs.wrapper)

错误原因:
this.$refs.wrapper 为 {}

解决办法:

            if (JSON.stringify(this.$refs.wrapper)=='{}') {  
                return;  
            }  
            this.scroll = new BScroll(this.$refs.wrapper)
继续阅读 »

近期做一个城市列表的小demo,用到了第三方的插件better-scroll(如何插入请参考:uni-app引用npm第三方库);
费时1天,解决报错问题:
错误问题:
Cannot read property '0' of undefined;at pages/city/city page lifeCycleMethod onReady function
TypeError: Cannot read property '0' of undefined
at new K (http://127.0.0.1:20155/appservice/pages/city/city.js:9:12181)
at a.mounted (http://127.0.0.1:20155/appservice/pages/city/city.js:9:56084)
at Gt (http://127.0.0.1:20155/appservice/common/vendor.js:2:16693)

错误代码:

this.scroll = new BScroll(this.$refs.wrapper)

错误原因:
this.$refs.wrapper 为 {}

解决办法:

            if (JSON.stringify(this.$refs.wrapper)=='{}') {  
                return;  
            }  
            this.scroll = new BScroll(this.$refs.wrapper)
收起阅读 »

【分享】解决Uni-app 关闭页面时Data数据不重置的Bug

// 解决页面关闭时组件数据不销毁的问题  
Vue.mixin({  
    onLoad() {  
        if (this.$initData$) {  
            Object.assign(this, JSON.parse(this.$initData$))  
        } else {  
            this.$initData$ = JSON.stringify(this.$data)  
        }  
    }  
})

在mani.js 最下面加入以上代码即可

出处

继续阅读 »
// 解决页面关闭时组件数据不销毁的问题  
Vue.mixin({  
    onLoad() {  
        if (this.$initData$) {  
            Object.assign(this, JSON.parse(this.$initData$))  
        } else {  
            this.$initData$ = JSON.stringify(this.$data)  
        }  
    }  
})

在mani.js 最下面加入以上代码即可

出处

收起阅读 »

PHP开发之递归算法的三种实现方法

  递归算法对于任何一个编程人员来说,应该都不陌生。因为递归这个概念,无论是在PHP语言还是Java等其他编程语言中,都是大多数算法的灵魂。对于PHP新手来说,递归算法的实现原理可能不容易理解。但是只要你了解掌握了这个算法原理,就可以灵活运用递归算法实现编程中的多种功能比如实现无限分类等。递归也是入门者最需要掌握的一个基础算法技巧。下面就通过具体代码示例为大家介绍PHP递归算法也是PHP递归排序的三种实现方法。

方法一:静态变量

<?php
function call(){
static $i=1;
echo $i.'<br>';
$i++;
if ($i<=10){
call();
}
}
call();

这种方法我们主要利用static定义静态变量来实现递归排序。如上我们定义了一个call方法和静态变量$i,如果我们不给$i变量添加判断,而是直接运行,显然就会出现死循环。

方法二:全局变量

$i=1;
function call(){
global $i;
echo $i;
$i++;
if($i<=10){
call();
}
}
call();

此种方法主要利用global定义全局变量来实现PHP递归排序。如上我们先定义了一个$i变量,再创建一个call方法。

方法三:引用传参

function call(&$i=1){
echo $i.'<br>';
$i++;
if($i<=10){
call($i);
}
}
call();

  大家在使用这个方法时,可以简单了解下PHP中引用传递的概念:可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值,利用引用传参来实现PHP递归排序是最基础简单的一种算法了(注:在调用自身方法时,一定要将参数传递进去,否则就会报错。)。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

继续阅读 »

  递归算法对于任何一个编程人员来说,应该都不陌生。因为递归这个概念,无论是在PHP语言还是Java等其他编程语言中,都是大多数算法的灵魂。对于PHP新手来说,递归算法的实现原理可能不容易理解。但是只要你了解掌握了这个算法原理,就可以灵活运用递归算法实现编程中的多种功能比如实现无限分类等。递归也是入门者最需要掌握的一个基础算法技巧。下面就通过具体代码示例为大家介绍PHP递归算法也是PHP递归排序的三种实现方法。

方法一:静态变量

<?php
function call(){
static $i=1;
echo $i.'<br>';
$i++;
if ($i<=10){
call();
}
}
call();

这种方法我们主要利用static定义静态变量来实现递归排序。如上我们定义了一个call方法和静态变量$i,如果我们不给$i变量添加判断,而是直接运行,显然就会出现死循环。

方法二:全局变量

$i=1;
function call(){
global $i;
echo $i;
$i++;
if($i<=10){
call();
}
}
call();

此种方法主要利用global定义全局变量来实现PHP递归排序。如上我们先定义了一个$i变量,再创建一个call方法。

方法三:引用传参

function call(&$i=1){
echo $i.'<br>';
$i++;
if($i<=10){
call($i);
}
}
call();

  大家在使用这个方法时,可以简单了解下PHP中引用传递的概念:可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值,利用引用传参来实现PHP递归排序是最基础简单的一种算法了(注:在调用自身方法时,一定要将参数传递进去,否则就会报错。)。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

收起阅读 »

力谱云倾力开发B2B2C商城,深挖APP无限吸金盈利模式

移动APP

力谱云倾力开发B2B2C商城,深挖APP无限吸金盈利模式
随着移动技术的成熟,企业移动化转型效率在不断攀升,同时其开发成本也在不断降低。敏锐的企业家们早已发现,依靠淘宝、京东的时代已经远去,B2B2C平台受到多方看好。为此,深耕移动*APP开发> 领域的力谱宿云企业,推出了为企业提供移动解决方案的业务开发平台——力谱云> ```javascript


企业为何争先打造B2B2C平台?  
​首先,在B2C与B2B相继盆满钵盈之后,集此两者优点于一身,B2B2C平台有应运而生。企业不再单单满足于开发为他人做嫁衣的店铺型App平台,除了做独立网店之外,无疑走平台化布局,能让企业站在行业的高度,打通上下游资源,利用先发优势,引领行业发展。此外,更有利好政策倾斜,通过垂直领域的丰富资源,吸引大量原始用户,根据地缘优势与线下门店的结合,可以走出一条引爆资金流的企业升级路。  
力谱云深度打磨B2B2C平台,支持N+吸金盈利模式  
> 力谱云作为一家为企业提供移动解决方案的App业务开发平台,在经历过B2C、B2B等平台的商业实战后,力谱云倾力开发打造了一款支持“招商、联营以及多门店O2O”等多业务模式的B2B2C多商户入驻平台。企业只需通过4大核心功能:电商平台、营销推广、客户运营以及数据分析,即可快速、低成本搭建B2B2C平台。  
通过B2B2C平台的搭建,企业可抽取商户入驻服务年费;并通过企业的增值服务获得可靠收益;并可开设自营商铺,创增营业实收;另外,可通过商品销售佣金制度的制定,进行抽成盈利;更可利用力谱云可无限扩展平台功能的特性,无限延伸平台价值,增加创收。在这一系列的App平台基础上,再搭配企业别具特色的分销业务体系,盈利吸金模式更可N+叠加。  
也正是由于如此,目前B2B2C平台成为了资本届竞相追捧的热宠儿。  
力谱云搭建云医护管家,从创业走向资本宠儿  
日前,一家河南健康管理企业,经由力谱云平台,成功上线了一款提供医护服务的B2B2C平台——“云医护管家”,就此实战案例,笔者和大家一同梳理一番此App平台的开发逻辑。  
首先,通过力谱云平台的“商城、预定、购物车、订单、门店”功能,快速整合一款能方便患者预约付款、医护入驻的B2B2C业务平台,并通过预约服务进行平台抽成。其次,通过多级分销,进行招商入驻,整合地域医护资源,开启平台资金流动。其三,利用代金券、文章等营销工具,打通平台引流、促活、转化、留存运营环节。最后,通过客服功能,提升售前、售后服务,打造优质用户体验。  
据了解,目前,云医护管家作为一家整合医护资源的B2B2C平台,已覆盖河南省超10+城市代理,另有数十家跨省代理商与机构正在磋商洽谈中。创始人也表示,初衷只是借力谱云平台搭建一款集合当地医护资源的平台进行自营,并没有想到会收获那么多机构和同行对此平台项目的高度肯定,也感谢来自力谱云平台腾飞计划的创业扶持与App开发资源倾斜。并表示,在接下来的发展中,走出河南省进行全国性代理业务覆盖,收获第一轮天使资金也将成为可能。  
其实,云医护管家的成功不仅在于其项目运作模式,也基于力谱云从研发到运营全程护航的移动解决方案以及对企业平台盈利能力的资源倾斜。  
力谱云除了研发,更关注平台的盈利性  
作为技术研发出身的**力谱云***> *平台,基于其创新云计算模式,可为企业移动转型压缩App成本至传统市场的1%,开发周期缩短至1周。在颠覆性的高效、低成本研发技术面前,力谱云也更关心企业平台的可持续盈利模式。  
为了增强其营销战略,降低平台运营成本,推出了一系列如拼团、限时抢购、积分、直播等营销工具,帮助企业用户全方位打通引流、促活、转化、留存各个运营环节。搭配强大的数据分析能力,精准跟踪用户、订单等数据,定期汇总分析,帮助制定App平台精准营销战略。并提供平台无限功能拓展的发展空间,每月数十多功能免费迭代更新等后期技术运营支持。让企业平台的每一步营收路,都走得更加平稳。  
目前,力谱云企业为了帮助中小企业用户更快速、成功地打入移动蓝海市场,联合数家创业机构,推出了创业资源丰富倾斜的腾飞计划,意在扶持初创型企业快速布局移动市场,抢先占领市场优势,打造企业升级出口。  
相信在未来,力谱云和中小型企业之间,尤其是初创企业,还将开启更为紧密的商业纽带。
继续阅读 »

力谱云倾力开发B2B2C商城,深挖APP无限吸金盈利模式
随着移动技术的成熟,企业移动化转型效率在不断攀升,同时其开发成本也在不断降低。敏锐的企业家们早已发现,依靠淘宝、京东的时代已经远去,B2B2C平台受到多方看好。为此,深耕移动*APP开发> 领域的力谱宿云企业,推出了为企业提供移动解决方案的业务开发平台——力谱云> ```javascript


企业为何争先打造B2B2C平台?  
​首先,在B2C与B2B相继盆满钵盈之后,集此两者优点于一身,B2B2C平台有应运而生。企业不再单单满足于开发为他人做嫁衣的店铺型App平台,除了做独立网店之外,无疑走平台化布局,能让企业站在行业的高度,打通上下游资源,利用先发优势,引领行业发展。此外,更有利好政策倾斜,通过垂直领域的丰富资源,吸引大量原始用户,根据地缘优势与线下门店的结合,可以走出一条引爆资金流的企业升级路。  
力谱云深度打磨B2B2C平台,支持N+吸金盈利模式  
> 力谱云作为一家为企业提供移动解决方案的App业务开发平台,在经历过B2C、B2B等平台的商业实战后,力谱云倾力开发打造了一款支持“招商、联营以及多门店O2O”等多业务模式的B2B2C多商户入驻平台。企业只需通过4大核心功能:电商平台、营销推广、客户运营以及数据分析,即可快速、低成本搭建B2B2C平台。  
通过B2B2C平台的搭建,企业可抽取商户入驻服务年费;并通过企业的增值服务获得可靠收益;并可开设自营商铺,创增营业实收;另外,可通过商品销售佣金制度的制定,进行抽成盈利;更可利用力谱云可无限扩展平台功能的特性,无限延伸平台价值,增加创收。在这一系列的App平台基础上,再搭配企业别具特色的分销业务体系,盈利吸金模式更可N+叠加。  
也正是由于如此,目前B2B2C平台成为了资本届竞相追捧的热宠儿。  
力谱云搭建云医护管家,从创业走向资本宠儿  
日前,一家河南健康管理企业,经由力谱云平台,成功上线了一款提供医护服务的B2B2C平台——“云医护管家”,就此实战案例,笔者和大家一同梳理一番此App平台的开发逻辑。  
首先,通过力谱云平台的“商城、预定、购物车、订单、门店”功能,快速整合一款能方便患者预约付款、医护入驻的B2B2C业务平台,并通过预约服务进行平台抽成。其次,通过多级分销,进行招商入驻,整合地域医护资源,开启平台资金流动。其三,利用代金券、文章等营销工具,打通平台引流、促活、转化、留存运营环节。最后,通过客服功能,提升售前、售后服务,打造优质用户体验。  
据了解,目前,云医护管家作为一家整合医护资源的B2B2C平台,已覆盖河南省超10+城市代理,另有数十家跨省代理商与机构正在磋商洽谈中。创始人也表示,初衷只是借力谱云平台搭建一款集合当地医护资源的平台进行自营,并没有想到会收获那么多机构和同行对此平台项目的高度肯定,也感谢来自力谱云平台腾飞计划的创业扶持与App开发资源倾斜。并表示,在接下来的发展中,走出河南省进行全国性代理业务覆盖,收获第一轮天使资金也将成为可能。  
其实,云医护管家的成功不仅在于其项目运作模式,也基于力谱云从研发到运营全程护航的移动解决方案以及对企业平台盈利能力的资源倾斜。  
力谱云除了研发,更关注平台的盈利性  
作为技术研发出身的**力谱云***> *平台,基于其创新云计算模式,可为企业移动转型压缩App成本至传统市场的1%,开发周期缩短至1周。在颠覆性的高效、低成本研发技术面前,力谱云也更关心企业平台的可持续盈利模式。  
为了增强其营销战略,降低平台运营成本,推出了一系列如拼团、限时抢购、积分、直播等营销工具,帮助企业用户全方位打通引流、促活、转化、留存各个运营环节。搭配强大的数据分析能力,精准跟踪用户、订单等数据,定期汇总分析,帮助制定App平台精准营销战略。并提供平台无限功能拓展的发展空间,每月数十多功能免费迭代更新等后期技术运营支持。让企业平台的每一步营收路,都走得更加平稳。  
目前,力谱云企业为了帮助中小企业用户更快速、成功地打入移动蓝海市场,联合数家创业机构,推出了创业资源丰富倾斜的腾飞计划,意在扶持初创型企业快速布局移动市场,抢先占领市场优势,打造企业升级出口。  
相信在未来,力谱云和中小型企业之间,尤其是初创企业,还将开启更为紧密的商业纽带。
收起阅读 »