本文出自APICloud官方论坛

rongCloud2  3.2.8 版本更新后添加了发送小视频接口,发送文件接口。

rongCloud2  概述

融云是国内首家专业的即时通讯云服务提供商,专注为互联网、移动互联网开发者提供即时通讯基础能力和云端服务。通过融云平台,开发者不必搭建服务端硬件环境,就可以将即时通讯、实时网络能力快速集成至应用中。
rongCloud2 封装了融云即时通讯能力库 IMLib SDK 的 API,对融云的相关接口做了一一对应的封装,功能详情可参考目录。
使用 rongCloud2 模块之前,请先 注册 融云的开发者帐号并申请创建 App,创建 App 后,可以在 开发者后台 获取 App Key 和 App Secret 用于开发。开发前请先认真阅读相关的 融云开发文档和视频。(请在PC端打开)
由于 (Android )融云sdk 不支持中文路径,需要处理一下,用fs 模块 调用rename接口重命名一下,为了不影响原文件需要先复制一下再进行处理。方法不唯一,提供参考
所用 模块  rongcloud2、fs 模块、fileBrowser 模块以下是页面源码 包括简易登陆获取token页面主功能页面。
一、

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/> <title>title</title> <link rel="stylesheet" type="text/css" href="../css/api.css"/> <style> body{ } .form{ width: %; height: 200px; margin-top: 100px; text-align: center; } input{ width: %; height: 60px; text-align: center; font-size: 35px; border-radius: 5px; border: 1px solid #b23; } button{ width: 100px; height: 50px; margin-left: 100px; background-color: green; color: #fff; }
</style> </head> <body> <div class="form"> id:<input id="uid" type="text" name="" value=""> name:<input id="uname" type="text" name="" value=""> </div> <button type="button" name="button">登陆</button> <button type="button" name="button">发送</button> </body> <script type="text/javascript" src="../script/api.js"></script> <script type="text/javascript" src="../script/sha1.js"></script> <script type="text/javascript"> var rong = ''; apiready = function(){ rong = api.require("rongCloud2"); }; function login() { var uid = $api.byId('uid').value; var uname = $api.byId('uname').value; var portraitUri = 'lll'; //会员头像 var appKey = "*********"; var appSecret = "***********"; var nonce = Math.floor(Math.random() * );//随机数 var timestamp = Date.now(); //时间戳 var signature = SHA1("" + appSecret + nonce + timestamp);//数据签名(通过哈希加密计算) api.ajax({ url : "http://api.cn.ronghub.com/user/getToken.json", method : "post", headers : { "RC-App-Key" : appKey, "RC-Nonce" : "" + nonce, "RC-Timestamp" : "" + timestamp, "RC-Signature" : "" + signature, "Content-Type" : "application/x-www-form-urlencoded" }, data : { values : { userId : uid, name : uname, portraitUri : portraitUri } } }, function(ret, err) { if (ret) { $api.setStorage('token', ret.token);//将token存储到本地 api.alert({ title: 'testtitle', msg: '以获取token', }, function(ret, err){ if( ret ){ api.openWin({ name: 'rong2', url: './rong2.html', pageParam: { name: 'test' } }); }else{ alert( JSON.stringify( err ) ); } }); } else { alert("获取token失败") } }); } function sendEv() { api.sendEvent({ name: 'myEvent', extra: { key1: 'value1', key2: 'value2' } }); api.openWin({ name: 'page1', url: 'widget://index.html', pageParam: { name: 'test' } }); }
</script> </html> 复制代码

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />

    <title>title</title>

    <link rel="stylesheet" type="text/css" href="../css/api.css" />

    <style>

        body {}

        .main {

            position: absolute;

            bottom: ;

            width: %;

            height: 200px;

            text-align: center;

            border-top: 1px solid #b23;

        }

        button {

            margin-top: 5px;

            margin-left: 10px;

            width: 90px;

            height: 50px;

        }

        .msg {

            width: %;

            height: 300px;

            margin-top: 100px;

        }

        input {

            width: %;

            height: 50px;

            border: 1px solid #b33;

            text-align: center;

        }

        .msg button {

            width: 100px;

            height: 50px;

            background-color: green;

            color: #fff;

            border-radius: 5px;

        }
</style> </head> <body> <div class="msg"> <input id="sendtxt" type="text" name="" value="" placeholder="发送文本内容"> <input id="uid" type="text" name="" value="" placeholder="接收者id"> <button type="button" name="button">发送</button> <button type="button" name="button">发文件</button> <button type="button" name="button">发视频</button> </div> <div id="evbtn"> </div> </body> <script type="text/javascript" src="../script/api.js"></script> <script type="text/javascript"> var token = ''; var oldPath = ''; var fileName = ''; var type = ''; //按钮 //初始化模块 var rong = null; var fs = null; var fileBrowser = null; apiready = function() { //初始化模块 rong = api.require('rongCloud2'); fs = api.require('fs'); fileBrowser = api.require('fileBrowser'); //登陆 setTimeout(function() { getToken(); msglisten(); addlistenSta(); toCon(); }, ); }; //获取缓存token function getToken() { token = $api.getStorage('token'); if (token) { toInit(); } else { api.openWin({ name: 'page1', url: './token.html', pageParam: { name: 'test' } }); } } //初始化融云 function toInit() { rong.init(function(ret, err) { if (ret) { console.log('init---ok'); } }); } //添加状态监听 function addlistenSta() { rong.setConnectionStatusListener(function(ret, err) { if (ret) { console.log('监听开启---'); } }); } //连接融云 function toCon() { rong.connect({ token: token }, function(ret, err) { alert(JSON.stringify(ret) + '---连接成功'); }); } function send ( type ) { type = type; getFilePath(); } function fnEvent( path ) { if (type == 'file') { sendFileMessageR( path ); }else { sendSightMessageR( path ); } } //选取文件 function getFilePath() { fileBrowser.open(function(ret) { if (ret) { alert(JSON.stringify(ret)); oldPath = ret.url; fileName = ret.name; //判断路径是否包含中文 if (escape(oldPath).indexOf( "%u" )<){ alert( "没有包含中文" ); fnEvent( oldPath ); } else { existIsOk(); } } }); } //判断文件夹是否存在 function existIsOk() { fs.exist({ path: 'fs://rongcloudfilecopy' }, function(ret, err) { alert(JSON.stringify(ret)); if (ret.exist) { alert('有这个路径'); copyToRong(); } else { alert('没有这个路径'); createDirF(); } }); } //创建路径 function createDirF() { fs.createDir({ path: 'fs://rongcloudfilecopy' }, function(ret, err) { if (ret.status) { alert(JSON.stringify(ret)); copyToRong(); } else { alert(JSON.stringify(err)); } }); } //复制到融云文件夹 function copyToRong( ) { fs.copyTo({ oldPath: oldPath, newPath: 'fs://rongcloudfilecopy' }, function(ret, err) { if (ret.status) { alert(JSON.stringify(ret)); renameRong(); } else { alert(JSON.stringify(err)); } }); } //重命名文件 function renameRong( ) { var timestamp = (new Date()).getTime(); var srtPath1 = fileName.split('.')[]; var srtPath2 = fileName.split('.')[]; var copyOldPath = 'fs://rongcloudfilecopy/' + fileName ; var newPath = 'fs://rongcloudfilecopy/' + timestamp + '.' + srtPath2 fs.rename({ oldPath: copyOldPath, newPath: newPath }, function(ret, err) { if (ret.status) { alert(JSON.stringify(ret)); fnEvent( newPath ); } else { alert(JSON.stringify(err)); } }); } //发短视频 function sendSightMessageR( videoPath ) { console.log(videoPath); var txt = $api.byId('sendtxt').value; var uid = $api.byId('uid').value; console.log(uid); rong.sendSightMessage({ conversationType: 'PRIVATE', targetId: uid, thumbPath: 'fs://picture/dog1.png', sightPath: videoPath, //videoPath, //sightPath: 'fs://picture/666.mp4', //videoPath, duration: , extra: '' }, function(ret, err) { if (ret.status == 'prepare') console.log(JSON.stringify(ret.result.message)); else if (ret.status == 'progress') console.log(ret.result.progress ); else if (ret.status == 'success') console.log(ret.result.message.messageId); else if (ret.status == 'error') console.log(err.code); }); } //发送文件 function sendFileMessageR( filePath ) { var uid = $api.byId('uid').value; console.log(filePath); rong.sendFileMessage({ conversationType: 'PRIVATE', targetId: uid, filePath: filePath, extra: '' }, function(ret, err) { if (ret.status == 'prepare') console.log(JSON.stringify(ret.result.message)); else if (ret.status == 'progress') console.log(ret.result.progress ); else if (ret.status == 'success') console.log(ret.result.message.messageId); else if (ret.status == 'error') console.log(err.code); }); } //发送信息 function sendmsg() { var txt = $api.byId('sendtxt').value; var uid = $api.byId('uid').value; rong.sendTextMessage({ conversationType: 'PRIVATE', targetId: uid, text: txt, extra: '' }, function(ret, err) { if (ret.status == 'prepare') api.alert({ msg: JSON.stringify(ret.result.message) }); else if (ret.status == 'success') api.alert({ msg: ret.result.message.messageId }); else if (ret.status == 'error') api.alert({ msg: err.code }); }); } //消息监听 function msglisten() { rong.setOnReceiveMessageListener(function(ret, err) { // api.alert({ msg: JSON.stringify(ret.result.message) }); alert('收到了消息'); console.log(JSON.stringify(ret.result)); // setInterval(function () { // rong.getConnectionStatus(function(ret, err) { // console.log( ret.result.connectionStatus ); // }) // }, 2000); // var receivetxtSTR = ret.result.message.content.text; // tid = ret.result.message.targetId // console.log(tid); // $api.byId('receivetxt').value = receivetxtSTR; // rong.sendReadReceiptMessage({ // targetId: tid // }, function(ret) { // api.alert({ // msg: JSON.stringify(ret) + '我已读了' // }); // }); }) }
</script> </html> 复制代码

APICloud开发者进阶之路 | UIPickerView 模块示例demo的更多相关文章

  1. APICloud开发者进阶之路 | txLive模块(直播类)试用分享

    本文出自APICloud官方论坛,感谢论坛版主uoaccw的分享 txLive 模块封装了腾讯云直播服务 https://docs.apicloud.com/Client-API/Open-SDK/t ...

  2. APICloud开发者进阶之路 |audioRecorder录音模块Demo

    本文出自APICloud官方论坛   audioRecorder 模块通过封装系统的录音接口,能够快速的为开发者提供一个完整的录音功能. 该模块提供Android和iOS版本,录音方式及录制的音频格式 ...

  3. APICloud开发者进阶之路 |iOS修改entitlements文件

    本文出自APICloud官方论坛, 感谢论坛版主 技术咨询-Kenny 的分享.   一.概述iOS原生开发中若要实现某些特殊功能,如使用HealthKit.实现Universal Links等.需要 ...

  4. APICloud开发者进阶之路 |纯手工编写日程表功能

    本文出自APICloud官方论坛, 感谢论坛版主 赵永亮 的分享. 最近看论坛内关于极光推送的问题有很多, 本想写一个关于极光的详细教程的,无奈已经有很多大牛分享过了,所以只得纯手工写了一个日程表,可 ...

  5. UIPickerView 模块示例demo

    本文出自APICloud官方论坛 UIPickerView 此模块封装了一个可以从屏幕底部向上弹出的 action 选择器(3D滚轮效果).开发者可自定义选择器的样式,包括:导航条颜色.高度,导航条上 ...

  6. UIChatBox模块示例demo

    感谢论坛版主 马浩川 的分享. UIChatBox 模块是一个聊天输入框模块,开发者可自定义该输入框的功能.通过 open 接口可在当前 window 底部打开一个输入框,该输入框的生命属于当前 wi ...

  7. acmPush模块示例demo

    感谢论坛版主 马浩川 的分享. 模块介绍:  阿里移动推送(Alibaba Cloud Mobile Push)是基于大数据的移动智能推送服务,帮助App快速集成移动推送的功能,在实现高效.精确.实时 ...

  8. Scala进阶之路-统计商家id的标签数以及TopN示例案例分析

    Scala进阶之路-统计商家id的标签数以及TopN示例案例分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.项目需求 将“temptags.txt”中的数据进行分析,统计出 ...

  9. 树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)

    近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 . 准备: 树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (00 ...

随机推荐

  1. axis2 wsdl2java工具

    wsdl2java工具使用方法描述: C:\Users\Administrator>wsdl2java -h Using AXIS2_HOME: E:\Apache_Projects\axis2 ...

  2. centOS 重启 php-fpm

     ps axo pid,%cpu,%mem,comm |grep php-fpm ps aux | grep php-fpm pkill -9 php-fpm /etc/init.d/php-fpm ...

  3. mysql 第三课 jdbc基础操作

    jdbc连接可以大致分为5步: 1.注册驱动 2.获取连接 3.编写语句 4.执行语句 5.关闭连接 其中可以设置参数等等. 1.我们先建一个项目目录: 其中com.etc.dao为数据访问对象 co ...

  4. 用adblock过滤页面上固定位置的悬浮窗

    现在各种网站都喜欢加入position:fixed的悬浮窗,这些悬浮窗可以是分享按钮,可以是二维码,可以是各种烦人的按钮. 因为这些悬浮窗未必是广告,所以adblock很少自动屏蔽它们. 可这些悬浮窗 ...

  5. H3C 显示RIP当前运行状态及配置信息

  6. P1068 压缩技术

    题目描述 设某汉字由N × N的0和1的点阵图案组成. 我们依照以下规则生成压缩码.连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下.第一个数表示连续有几个0,第二 ...

  7. P1062 差K素数对

    题目描述 给你两个数 n 和 k ,请求出所有小于等于 n 的相差为 k 的素数对. 输入格式 两个正整数n,k.1<=k<=n<=10000. 输出格式 所有小于等于n的素数对.每 ...

  8. js 正则匹配 两个字符串之间,某个字符串之前(之后)的内容

    1.js截取两个字符串之间的内容: var str = "aaabbbcccdddeeefff"; str = str.match(/aaa(\S*)fff/)[1]; alert ...

  9. 机器学习——SVM

    整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 带核的SVM为什么能分 ...

  10. 【u035】奶牛的电信

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方 ...