APICloud开发者进阶之路 | UIPickerView 模块示例demo
本文出自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的更多相关文章
- APICloud开发者进阶之路 | txLive模块(直播类)试用分享
本文出自APICloud官方论坛,感谢论坛版主uoaccw的分享 txLive 模块封装了腾讯云直播服务 https://docs.apicloud.com/Client-API/Open-SDK/t ...
- APICloud开发者进阶之路 |audioRecorder录音模块Demo
本文出自APICloud官方论坛 audioRecorder 模块通过封装系统的录音接口,能够快速的为开发者提供一个完整的录音功能. 该模块提供Android和iOS版本,录音方式及录制的音频格式 ...
- APICloud开发者进阶之路 |iOS修改entitlements文件
本文出自APICloud官方论坛, 感谢论坛版主 技术咨询-Kenny 的分享. 一.概述iOS原生开发中若要实现某些特殊功能,如使用HealthKit.实现Universal Links等.需要 ...
- APICloud开发者进阶之路 |纯手工编写日程表功能
本文出自APICloud官方论坛, 感谢论坛版主 赵永亮 的分享. 最近看论坛内关于极光推送的问题有很多, 本想写一个关于极光的详细教程的,无奈已经有很多大牛分享过了,所以只得纯手工写了一个日程表,可 ...
- UIPickerView 模块示例demo
本文出自APICloud官方论坛 UIPickerView 此模块封装了一个可以从屏幕底部向上弹出的 action 选择器(3D滚轮效果).开发者可自定义选择器的样式,包括:导航条颜色.高度,导航条上 ...
- UIChatBox模块示例demo
感谢论坛版主 马浩川 的分享. UIChatBox 模块是一个聊天输入框模块,开发者可自定义该输入框的功能.通过 open 接口可在当前 window 底部打开一个输入框,该输入框的生命属于当前 wi ...
- acmPush模块示例demo
感谢论坛版主 马浩川 的分享. 模块介绍: 阿里移动推送(Alibaba Cloud Mobile Push)是基于大数据的移动智能推送服务,帮助App快速集成移动推送的功能,在实现高效.精确.实时 ...
- Scala进阶之路-统计商家id的标签数以及TopN示例案例分析
Scala进阶之路-统计商家id的标签数以及TopN示例案例分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.项目需求 将“temptags.txt”中的数据进行分析,统计出 ...
- 树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)
近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 . 准备: 树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (00 ...
随机推荐
- java DOM 操作xml
1 代码如下: package dom.pasing; import java.io.IOException; import java.io.StringWriter; import javax.xm ...
- java final域
public final class ThreeStooges { /* * stooges是Set<String>类型的引用,final限定该引用成员属性stooges被赋初值后,就不能 ...
- Html5 @media + css3 媒体查询
css3 media媒体查询器用法总结 随着响应式设计模型的诞生,Web网站又要发生翻天腹地的改革浪潮,可能有些人会觉得在国内IE6用户居高不下的情况下,这些新的技术还不会广泛的蔓延下去,那你就错 ...
- 【p083】传球游戏
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样 ...
- 2018-8-10-win10-uwp-x_Bind-无法获得资源
title author date CreateTime categories win10 uwp x:Bind 无法获得资源 lindexi 2018-08-10 19:17:19 +0800 20 ...
- H3C FTP主动数据传输方式
- HDU 1087 Super Jumping....(动态规划之最大递增子序列和)
Super Jumping! Jumping! Jumping! Problem Description Nowadays, a kind of chess game called “Super Ju ...
- vue-learning:7-template-v-bind-with-class-and-style
绑定元素样式的指令v-bind:class 和v-bind:style 在HTML元素结构中,class和style特性(attribute)是非常突出的,可以为元素添加样式属性(property). ...
- 2019浙江ACM省赛——部分题目
有一些题目过了我还没有重新写,先放一些我重新写好了的吧 签到题拿到了信心吧,9分钟写完两题,我们贼开心,我大哥说签到题有什么好开心的,如果不是我有一些地方卡了下,可能还是更快吧,还有就是测试案例多试了 ...
- CAS5.3 单点登录/登出/springboot/springmvc
环境: jdk:1.8 cas server:5.3.14 + tomcat 8.5 cas client:3.5.1 客户端1:springmvc 传统web项目(使用web.xml) 客户端2:s ...