微信小程序是什么?如何快速搭建一个微信小程序?_小程序

一、微信小程序是什么

微信小程序是一种不用下载就能使用的应用也是一项创新经过将近两年的发展已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果已经有超过150万的开发者加入到了微信小程序的开发与我们一起共同发力推动微信小程序的发展微信小程序应用数量超过了一百万覆盖200多个细分的行业日活用户达到两个亿微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会2017年小程序带动就业104万人社会效应不断提升。

二、安全管理

微信小程序在产品功能设计上给用户更多控制力。在微信小程序的设置页,为用户提供了数据权限开关,一旦用户授权之后又关闭,微信小程序再次使用该用户数据时需要重新获得授权,为用户提供更方便的数据控制权。用户在微信小程序的资料页还可以看到隐私数据保护的提示以及投诉入口。
微信小程序在收集、获取用户数据上,微信小程序坚持“必要+合理”原则。必要是指只有在微信小程序的具体业务中,确实有场景需要获取用户数据的情况下,开发者才能去获取用户的同意授权合理是指开发者获取数据的范围不应该超出具体场景所需要的数据范围。例如一个提供外卖服务的微信小程序,可能需要获得电话、地址等数据,但没有必要获取性别、年龄等数据,否则平台会认为微信小程序收集用户数据的行为违反了“必要并且合理”的原则,会对这类微信小程序进行处理。

三、微信小程序的功能

微信小程序是一种不需要下载安装即可使用的应用它实现了应用“触手可及”的梦想用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念用户不用关心是否安装太多应用的问题。应用将无处不在随时可用但又无需安装卸载。对于开发者而言微信小程序开发门槛相对较低难度不及APP能够满足简单的基础应用适合生活服务类线下商铺以及非刚需低频应用的转换。微信小程序能够实现消息通知、线下扫码、公众号关联等七大功能。其中通过公众号关联用户可以实现公众号与微信小程序之间相互跳转。由于微信小程序不存在入口。

四、快速开发一个微信小程序APP

今天以Android版本为例快速实现一个小程序开发APP一起深入理解整个小程序开发开发流程。我们最终实现效果如下

在这里插入图片描述

按照惯例为了快速实现我们继续基于即构实时通话SDK进行开发。在正式开发之前我们先理一下小程序开发开发流程。

  1. 初始化即构SDK
  2. 房主创建房间ID并进入房间。 观众根据房间ID进入房间
  3. 房主推实时视频流观众拉实时视频流

1、集成即构实时音视频SDK

SDK集成方式请直接参考官方文档https://doc-zh.zego.im/article/195, 这里不过多描述。

2、初始化SDK引擎

这里我们把所有调用即构SDKAPI封装到Zego类中并使用单例模式调用。其中初始化SDK引擎工作放入到构造函数中

private Zego(Application app) {
    ZegoEngineProfile profile = new ZegoEngineProfile();
    profile.appID = KeyCenter.APPID;
    profile.scenario = ZegoScenario.GENERAL;  // 通用场景接入
    profile.application = app;
    mEngine = ZegoExpressEngine.createEngine(profile, null);
}

3、创建房间与登录房间

登录画面如下

4、房主创建房间

1验证房间ID的有效性

在创建房间之前需要房主提供房间号当然了这一步可以由后台自动生成。作为一个Demo我们暂时让房主自己设置。为了避免房间号冲突我们需要先验证当前房间号是否已存在如果有个人服务器自然很轻松判断。如果没有个人服务器可以调用即构提供的服务器端API接口查询当前房间的人数。

简单来说使用服务器端API就是访问一个http址返回对应的JSON参数。

2使用ID创建房间并登录

我们将登录房间函数封装到Zego类里面。登录房间代码如下。

注意无须显式创建房间如果指定的房间ID不存在则会自动创建。

public boolean loginRoom(String userId, String userName, String roomId, String token) {
    ZegoUser user = new ZegoUser(userId, userName);
    ZegoRoomConfig config = new ZegoRoomConfig();
    config.token = token; // 请求开发者服务端获取
    config.isUserStatusNotify = true;
    mEngine.loginRoom(roomId, user, config);
    return true;
}

注意到此函数需要传入token参数。token参数是采用对称算法生成。其大致原理如下

  1. 生成一个随机数并将有效时长等其他相关参数按照固定格式排列得到未加密版的token
  2. 使用密钥在即构官方控制台中获取每个APPID对应一个密钥并使用对称加密算法加密得到加密版的token这个token是给客户端登录时使用的。

具体的代码实现操作请参考文末提供的源码这里不再过多描述。

需要注意的是为了安全考虑token的生成操作最好放到个人服务器中以免泄露密钥。

3观众登录房间

观众登录房间的方式与2.1.2中描述的一致实现代码也一致即房主与观众可以复用同一套登录函数。

5、推流与拉流

1房主推流

房主进入房间后需要做如下事情

  1. 申请摄像头、语音的手机权限。
  2. 开启摄像头本地预览画面。
  3. 推流。将本地实时画面推向即构服务器由即构服务器做直播流数据分发。

申请摄像头等权限这里不描述不清楚的可以直接查看文末源码或相关文档。

2开启摄像头并预览

实时画面预览效果如下

如果从零开始做个摄像头实时画面预览需要大量代码量即构SDK早已将这行工作封装好我们只需提供一个已经在ContentView中布局好的TextureView即可。示例代码如下

ZegoCanvas canvas = new ZegoCanvas(textureView);
canvas.viewMode = ASPECT_FILL;
mEngine.startPreview(canvas);

3推流与停止推流

推流更简单直接调用即构SDK一行代码

   mEngine.startPublishingStream(streamId);

指定视频流的唯一ID传给startPublishingStream函数即可。停止推流直接调用stopPublishingStream()函数

mEngine.stopPublishingStream();

6、拉流预览

与本地预览实时画面一样即构SDK将拉取远程视频流也封装到了极致只需一行代码即可。我们在调用的时候仅需指定TextureView与对应的流ID

ZegoCanvas canvas = new ZegoCanvas(textureView);
canvas.viewMode = ASPECT_FILL;
mEngine.startPlayingStream(streamId, canvas);

7、播放实时画面统一封装

根据拉流与推流的介绍我们知道其实播放实时画面得时候房主和观众都一样最多仅需TextureView与对应的流ID两个参数因此我们把这两个参数封装到PreviewItem

public class PreviewItem {
    public TextureView tv;
    public String streamId;

    public PreviewItem(TextureView tv, String streamId) {
        this.tv = tv;
        this.streamId = streamId;
    }
}

然后封装playPreview函数, 不管是房主还是观众都可以统一调用这个函数

public void playPreview(PreviewItem pi, boolean isMyself) {
        ZegoCanvas canvas = new ZegoCanvas(pi.tv);
        canvas.viewMode = ASPECT_FILL;
        //不管有没有推流先停止推流
        mEngine.stopPublishingStream();
        if (isMyself) {//本地预览
            mEngine.startPublishingStream(pi.streamId);
            mEngine.startPreview(canvas);
        } else {//拉取视频流
            //拉取远程视频流
            mEngine.startPlayingStream(pi.streamId, canvas);
        }
    }

如果是房主则在预览画面的同时执行推流任务。如果是观众直接拉流即可。

8、其他工作

由于本文没有采用个人后台服务器做一些权限控制因此会存在安全风险。如果是线上APP请务必记得将敏感操作放到自己的后台服务器中执行。

五、观众如何得知房主的视频流ID

在本文中对于每个用户如果需要推流则将其推流的ID设置为其serID强烈建议线上产品不要这么做最好是由个人服务器生成随机字符串。因此如果我们知道房主的userID即可拉取其视频流。

1、如何获取房主ID直播间的商品信息直播间的名称信息

同样的问题如果有个人服务器直接访问服务器查询相关数据库即可获取。但没有个人服务器怎么办这里我们通过房主监听每个用户登录房间回调函数+房间内实时消息来实现。具体可描述如下

房主监听登录房间回调函数如果有用户登录房间则发送商品信息、房主userID、房间名称等数据消息。

发送消息可以调用sendCustomCommand函数实现

public void sendMsg(String roomId, ArrayList<ZegoUser> userList, Msg msg) {
    String msgPack = msg.toString();
    // 发送自定义信令`toUserList` 中指定的用户才可以通过 
	// onIMSendCustomCommandResult 收到此信令.
    // 若 `toUserList` 参数传 `null` 则 SDK 将发送该信令给房间内所有用户
    mEngine.sendCustomCommand(roomId, msgPack, userList, new IZegoIMSendCustomCommandCallback() {
        @Override
        public void onIMSendCustomCommandResult(int errorCode) {}
    });
}

2、源码分享

本文的小程序Demo使用的是即构的实时音视频SDK感兴趣的开发者可访问即构文档中心动手尝试集成。

如果想轻量开发电商直播Demo微信小程序端也是一个不错的选择。用完即走且自带流量便于推广。即构提供了微信小程序版本的RTC SDK包含了音视频直播、主播美颜、房间消息等功能大家可参考该组件实现自己的需求。

如需下载小程序示例源码可点击https://doc-zh.zego.im/article/3927进行下载

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6