• Stars
    star
    225
  • Rank 176,767 (Top 4 %)
  • Language
    JavaScript
  • Created over 6 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

网易云信,IM DEMO小程序版本。【推荐客户得京东卡,首次推荐成单得1500元京东卡,连续推荐2000元/单,上不封顶。】点击参与https://yunxin.163.com/promotion/recommend

介绍

云信IM DEMO 小程序版本 (以下简称小程序 demo),是一套使用网易云信IM端SDK,基于微信小程序原生开发方式开发的一款类似于微信的聊天小程序。 小程序DEMO的推出,使得云信SDK的开发者们可以更便捷的借助微信渠道推广他们的产品。主要功能点如下:

登录注册(为了实现不同端同一账号体系,所以没有采用微信授权登录)

  • 最近会话展示
  • 通讯录
  • 单聊对话
  • 用户名片

废话不多说直接上图:

yunxindemo-maintab

一期已经上线,欢迎扫一扫体验:

yunxindemo-qrcode

本项目是基于网易云信聊天室SDK实现的,更多详细介绍可以前往查看。

另外基于网易云信chatroom SDK实现的微信小程序也已开发完成,可前往查看。

运行

下载微信开发者工具,创建新项目,导入即可看到运行效果

工程结构

整个微信小程序DEMO目录结构如下:

|- components 自定义组件目录
|- images 项目中使用的一些高频次图片
|- pages 主功能一级页面
	|- contact 通讯录页
	|- login 登录页
	|- recentchat 最近会话页
	|- register 注册页
	|- setting 设置页
|- partials 二级页面
	|- addfriend 添加好友页
	|- blacklist 黑名单页
	|- chatting 聊天页
	|- forwardcontact 转发消息通讯录页
	|- historyfromcloud 云端历史记录页
	|- messagenotification 消息通知中心页
	|- modify 修改个人资料页
	|- personcard 非陌生人个人名片页
	|- strangercard 陌生人个人名片页
|- utils 存放一些工具类js
	|- config.js 存放项目的基本配置
	|- emojimap.js emoji文本与对应图片的映射关系,自定义emoji组件使用
	|- event.js 观察者模式具体实现
	|- imageBase64.js 存储一些小图标bese64编码
	|- imeventhandler.js 网易IM SDK初始化以及对应的回调函数注册,通过消息发布、订阅与外部通信
	|- pinyin.js 获取汉字的拼音
	|- util.js 一些工具方法的集合
|- vendors 引入外部的库,主要有网易云信 IM 的SDK以及md5加密
|- app.js 小程序根实例,存储了全局中的一些数据
|- app.json 注册页面以及定义页面一些基本样式
|- app.wxss 全局样式
|- project.config.json 设置整个小程序工程的一些属性,包括编译类型(截止2018年3月新增加了微信插件)、基础库版本等

技术栈的一些思考

这里探讨下目前(截止2018年3月)比较流行的三种开发微信小程序的方式:微信小程序原生、wepy、mpVue

微信小程序 wepy mpvue
开发规范 小程序开发规范 vue开发规范 vue开发规范
状态管理 vuex
组件化 比较原始 自定义组件规范 vue组件
多端复用 不可 可转化为H5 可转化为H5
构建方式 开发工具内置自动构建 框架内置 webpack
构建原理 开发工具自动构建 构建为dist后转化为小程序支持类型然后将开发工具指向dist目录,支持热更新 构建为dist后转化为小程序支持类型然后将开发工具指向dist目录,支持热更新

接着分析下云信IM DEMO的需求,首先受限于同一设备下一个用户的Storage的上限为10MB,所以这边不做聊天数据的持久化,所有的聊天数据、用户数据存储在内存中,在小程序被微信关闭(驻留后台过久)或者用户手动关闭(杀了微信进程)时所有数据会被重置;其次本期需求主要为p2p单聊,后期还会添加上群聊功能等功能,所以这边整体代码量需要控制,不能引入非必要框架;本期需求支持的消息类型有文本、emoji、地图、视频、语音、图片,部分组件可以借助微信提供的能力,加速渲染。。。

接下来大致评估下实现每个页面的技术点

一级页面:

  • 最近会话页
    • 滑动删除 - 自定义组件实现
    • 单条消息条目 - 全局拿到数据,然后进行清洗渲染
    • 消息通知 - 消息订阅器
  • 通讯录页
    • 昵称排序 - 汉字转拼音
    • 新增、拉黑、删除好友 - 消息订阅器
  • 设置页
    • 展示个人数据 - 数据清洗
    • 修改个人资料 - 调用照相、相册接口实现修改头像以及其他类型数据
  • 登录注册页
    • yunxindemo-loginandregister

二级页面:

  • 聊天页

    • 聊天界面布局
    • emoji键盘 - 自定义emoji组件(图片资源存储在网易nos上)
    • 多种消息类型 - 支持语音、地理位置、文本、图像、视频、猜拳、emoji消息,本质就是实现了一个富文本渲染自定义组件,能够有效渲染不同的消息类型
    • 支持消息的多种手势操作,支持消息的撤消、删除、转发操作,单击不同类型消息实现语音、视频消息的播放
    • yunxindemo-chatting
    • yunxindemo-forward
  • 个人资料

    • 分为两种,一种是陌生人个人资料、一种是好友个人资料,两种不同类型页面展示的页面组件是不一致的
    • 入口分为如下几种:单击通讯录条目进入好友信息列表;单击聊天记录头像进入好友列表;添加好友,结果不同则展示不同的类型用户资料
  • 修改个人资料页

    • 支持修改头像、昵称、性别、生日、手机、邮箱、签名,尽可能做到最大的复用
    • yunxindemo-settingandmodify
  • 黑名单列表

  • 消息通知界面

    • 自定义顶部tabbar组件
    • yunxindemo-notification
  • 聊天历史记录界面

初步结合框架特点以及几大开放方式特性,矛头重点集中在如何解决应用状态管理上面,经过评估后功能点较多,因此需要尽可能的减少引入外部框架,所以这边在微信小程序的基础上实现全局存储一个消息订阅器,然后在每个功能页面中订阅相应的事件,在相应的地方发布对应的事件。这样就解决了状态管理这个痛点。对于其他的一些区别个人觉得没有任何问题,对于一个有过现代前端开发经验,有使用过mvvm框架经验的开发者来说,入门小程序也就是几个小时的时间本人就是。既然花个几个小时能够入门小程序原生开发,为何还要去选那些坑较多,入门时间相同的框架呢。。。

因此制定了如下开发原则:尽量采用微信提供的原生组件,减少引入外部组件,手撸项目中所需的自定义组件,全局存储数据。页面间采用观察者模式进行通信

代码复用

前面已经详细讲解了整体目录结构,如果开发者需要借鉴某些功能或者某些自定义组件,只需找到对应的源文件,复制到自己工程即可。然后在globalData维护一套与项目中定义一致的结构即可,如果不一致,那你就需要修改对应的模板wxml以及解析数据的js。

遇到的一些坑

微信小程序开发可以说是在坑中前行,经常会遇到一些很奇怪的问题,在此记录在册,希望后来人可以跳过,增加开发效率

  • 小程序模板引擎的列表循环支持数组,不支持对象
  • text 组件实质是行内标签
  • background-image 只能用网络url或者base64
  • 注意事件对象中target 和 currentTarget的区别
  • URL 传参数时微信会自动拦截'=',导致后面页面onLoad中options参数容易解析出错
  • 二级页面无法再使用tabbar,必须自定义
  • 自定义组件中methods对象中定义的方法必须使用es5的函数定义
  • 注意多种小程序授权情况
    • 直接同意
    • 拒绝后,进引导,继续拒绝
    • 拒绝后,进引导,点击授权,进入授权设置页,再点授权
    • 拒绝后,进引导,点击授权,进入授权设置页,直接退出
  • input组件渲染级别提升为原生,某些布局下会出问题
  • 注意某些提升为原生组件(例如video、map等)导致的层级问题
  • 当然还有一些微信提供的createSelectorQuery的一些问题,只能等待大家去探索了

这边仅仅是抛出一些我开发中遇到的部分问题,在整个开发过程中踩过的坑远远不止这些,希望我们一起在坑中前行。。。

写在最后

初步统计本项目大概8500行代码(去除IM SDK以及MD5加密库),换句话说不到9000行代码,你就能在微信中实现一个mini 微信,这一切均借助于云信IM SDK强大的即时通讯能力。当然本期版本还存在很多不足的地方,希望在做第二期群聊功能的时候,能继续升级整体的组织架构。

#推荐好友使用云信,即享1500元京东卡奖励# 点击参与https://yunxin.163.com/promotion/recommend?channel=github main

More Repositories

1

NIM_Duilib_Framework

网易云信Windows应用开发框架。
C++
2,058
star
2

camellia

Camellia provide easy-to-use server toolkits, such as: redis proxy、delay queue、id gen、hot key and more
Java
602
star
3

NIM_Web_Demo_H5

网易云信Web Demo Html5 移动端适配。【推荐客户得京东卡,首次推荐成单得1500元京东卡,连续推荐2000元/单,上不封顶。】点击参与https://yunxin.163.com/promotion/recommend
Vue
356
star
4

NIM_iOS_SDK

网易云信 iOS SDK 发布仓库。【推荐客户得京东卡,首次推荐成单得1500元京东卡,连续推荐2000元/单,上不封顶。】点击参与https://yunxin.163.com/promotion/recommend
Ruby
124
star
5

NIM_ReactNative_Demo

JavaScript
108
star
6

phoenix

网易云信跨平台C++开发框架
C++
56
star
7

Basic-Video-Call

网易云信音视频示例项目,帮助你快速集成音视频SDK,实现一对一视频通话,包含加入/离开频道、开启/关闭视频、开启/关闭声音、切换前置/后置摄像头等功能。【推荐好友使用云信,即可获得1500元京东卡奖励】点击参与https://yunxin.163.com/promotion/recommend
C++
56
star
8

NIM_Android_SDK

云信Android SDK发布仓库
43
star
9

dev-blog

Share what we've optimized based on the NetEase YunXin services (IM, RTC, Live Streaming, etc.) 分享我们基于网易云信服务,做了哪些新的技术实践和优化。
39
star
10

weapp-netcall

网易云信视频DEMO小程序
JavaScript
27
star
11

Advanced-Video

演示了如何快速使用网易云信新一代(G2)实时音视频SDK实现屏幕共享、旁路推流、音视频质量管理、伴音、自定义视频采集等功能。
C++
26
star
12

NIM_Weapp_Chatroom_Demo

This is chatroom demo implement by chatroom sdk powered by netease im
JavaScript
24
star
13

nim-harmony-demo

云信IMSDK,鸿蒙使用Demo
HTML
23
star
14

NIM-Electron-Demo

云信Electron桌面版Demo with Web SDK-工程师版
JavaScript
17
star
15

NIM-CSharp-SDK

网易云信C# SDK
C#
16
star
16

CrossPlatform-SDK

云信跨平台 SDK 发布仓库(pc:win32)
C++
15
star
17

AudioChatRoom

Java
12
star
18

webrtcDemo

云信实时音webrtc sdk在移动端使用的相关实例demo
JavaScript
12
star
19

Quiz

网易云信直播竞答解决方案。【推荐客户得京东卡,首次推荐成单得1500元京东卡,连续推荐2000元/单,上不封顶。】点击参与https://yunxin.163.com/promotion/recommend
Objective-C
12
star
20

NIM_Android_AVChatKit

网易云信Android音视频组件源码仓库
Java
11
star
21

NIM_macOS_AVChat_Demo

Objective-C
11
star
22

NIMPushTool

Objective-C
10
star
23

node-nertc-sdk

C++
9
star
24

electron-fulltext-search-demo

electron 全文搜索方案的一个 demo
JavaScript
8
star
25

Signaling_Sample_Code

网易云信 信令SDK 示例代码仓库
C++
7
star
26

NIM_PC_SDK-CSharp

已废弃,请前往新仓库: https://github.com/netease-im/NIM-CSharp-SDK
C#
7
star
27

NIM_PC_SDK

云信Windows(PC) SDK发布仓库。
C
7
star
28

NIM_PC_DEMO-CSharp

已废弃,请前往新仓库: https://github.com/netease-im/NIM-CSharp-SDK
C#
6
star
29

NMCLiveStreaming

网易云信直播推流SDK(rtmp、tcp推流)
Objective-C
6
star
30

node-nim

NetEase IM nodejs wrapper based on NIM C++ SDK
TypeScript
5
star
31

NIM_Web_Education_Demo

JavaScript
5
star
32

whiteboard

云信互动版本sdk测试sample code
C++
4
star
33

NIM_Web_Weapp_NRTC

本示例为展示网易云信小程序音视频NRTC SDK能力
JavaScript
4
star
34

NIM_Android_RtsKit

网易云信Android RTS组件源码仓库
Java
4
star
35

react-native-nertc

云信在React Native 框架上的视频 SDK 实现,包含Android和IOS。
Java
4
star
36

Electron-SDK

网易云信ElectronSDK
3
star
37

NIM_ReactNative_Demo_0.61.5

JavaScript
3
star
38

VCloud_upload_JS_SDK

云信点播上传js SDK
JavaScript
2
star
39

innovation-2021

2
star
40

ne-s3

Rust
1
star
41

Embedded-SDK

网易云信嵌入式SDK
1
star
42

NIM_Resources

1
star
43

NeRTC-CSharp-SDK

适用于Windows x86平台的实时音视频SDK
C#
1
star
44

node-pre-build

A node tool to install pre-built sdk and addon.
JavaScript
1
star
45

im-code-example-web

云信 IM Web 端的示例代码
JavaScript
1
star