4. Windows 客户端开发指南

4.1. 概述

本节用于指导使用 PPVIEW 客户端 SDK 开发 WINDOWS 平台客户端。
在本SDK中,与平台交互的接口封装为了VVCloudSdk库,与设备交互的接口封装为VVCliSdk.dll库, 推送相关的封装VVPushSdk库,均可单独独立使用。请参考Windows PPVIEW SDK接口说明
演示程序和DEMO使用VC++2008开发。使用本SDK建议使用主流开发工具和语言。

4.2. 开发准备

4.2.1. 创建VC++项目

image001

image003

image005

image007

image009

4.2.2. 导入库

将开发包中 include 文件夹下的头文件和lib文件夹下库文件包含到到项目中
Demo和开发包目录结构如下,可以根据自己需要自行安排。

image011

image013

项目中包含目录设置如下:
image015

项目中库目录设置如下:

image017
image019

项目中在stdafx.h中包含文件:

#include "gdiplus.h"
using namespace Gdiplus;
#pragma  comment(lib,"gdiplus.lib")
 
#include "vv_push_sdk.h"
#include "vv_cli_sdk.h"
#include "vv_cloud_sdk.h"   
#include "cJSON.h"

由于的本SDK和demo中使用了json格式数据因此另外包含了cJSON,验证码使用了GDI+绘图。GDI+需要初始化,具体细节请自行查阅相关windows编程相关文档。按照上图所示添加必要的头文件和库文件就可以正式使用本SDK来开发监控系统了。

4.3. 流程指南

4.3.1. 初始化流程

  • 初始化设备交互相关库:VVCliSdk

默认使用杭州威威的p2p服务器相关设置,调用接口:

vv_cli_init();

如果使用自定义的p2p服务器地址请使用:

vv_cli_init_v2("server_addr", p2p_port, "p2p_key");   
  • 设置回调
vv_cli_setcallback(回调函数, 上下文参数);
  • 初始化平台交互相关库:VVCloudSdk
cloud_handle = vv_cloud_init();  

注:返回句柄在平台交互相关的接口中会使用。

  • 初始化推送库:VVPushSdk

初始化:

vv_cli_push_init();

设置推送回调:

vv_cli_push_set_callback(回掉函数, 上下文参数);

注册推送服务器:默认是使用杭州威威的推送服务器。

int res = vv_cli_push_regist("客户端生成的唯一id,并且以后也一直用的。可以保存到PC本地, 账户");

如果使用指定服务器地址,请使用

vv_cli_push_regist_v2 (char* server, char* user, char* appkey, char* apppass, char* client_id);

4.3.2. 用户账户注册流程

4.3.2.1. 通过手机号注册用户

Windows APP->WINDOWS APP: 1. 输入手机号
Windows APP->云平台: 2. 请求短信验证码
云平台-->Windows APP: 3. 请求短信验证码回复
云平台->用户: 4. 短信验证码
用户->Windows APP: 5. 手工输入短信验证码
Windows APP->云平台: 6. 注册新用户请求
云平台-->Windows APP: 7. 注册请求回复
  • 请求短信验证码
int res = vv_cloud_get_sms_vcode(cloud_handle, "要注册的手机号", 1);
  • 注册新用户
int res = vv_cloud_user_regist(cloud_handle, user, pass, vcode, nick, email, mobile);

4.3.2.2. 通过邮箱注册用户

Windows APP->Windows APP: 1. 输入邮箱号
Windows APP->云平台: 2. 请求邮箱验证码
云平台-->Windows APP: 3. 请求邮箱验证码回复
云平台->用户: 4. 邮箱验证码
用户->用户: 5. 打开邮箱,读取验证码
用户->Windows APP: 6. 手工输入邮箱验证码
Windows APP->云平台: 7. 注册新用户请求
云平台-->Windows APP: 8. 注册请求回复
  • 请求邮箱验证码
int res = vv_cloud_get_email_vcode(cloud_handle, 邮箱地址, 1, "zh_cn");
  • 注册
int res = vv_cloud_user_regist(cloud_handle, user, pass, vcode, nick, email, mobile);

4.3.3. 密码重置流程

4.3.3.1. 通过手机号重置密码

Windows APP->Windows APP: 1. 输入手机号
Windows APP->云平台: 2. 请求短信验证码
云平台->用户: 3. 短信验证码
用户->Windows APP: 4. 用户手工输入验证码
Windows APP->Windows APP: 5. 输入新密码
Windows APP->云平台: 6. 重置密码请求
云平台-->Windows APP: 7. 重置密码回复
  • 请求短信验证码
int res = vv_cloud_get_sms_vcode(cloud_handle, "手机号", 1);
  • 验证短信验证码
 int  res = vv_cloud_sms_vcode_check(cloud_handle, "手机号", "验证码");

在调用vv_cloud_user_resetpass_sms接口重置密码时,也会验证短信验证码。之所以有这个接口,是为了改善用户体验,在用户设置新密码前就可以验证短信码的正确性,以免用户在设置了新密码后,由于短信码的不正确而需要重新输入新密码。

  • 根据短信验证码重置密码
int res = vv_cloud_user_resetpass_sms(cloud_handle, "账号", "验证码", "新密码");

4.3.3.2. 通过邮箱号重置密码

Windows APP->Windows APP: 1. 输入邮箱号
Windows APP->云平台: 2. 通过邮箱重置密码
云平台-->Windows APP: 3. 回复结果
云平台->用户邮箱: 4. 发送重置邮件
用户->用户邮箱: 5. 打开邮件,点击链接
用户邮箱->云平台: 6. 跳转至平台密码重置页
云平台->云平台: 7. 重置密码

注:客户端请求平台向用户邮箱发送密码重置邮件后,流程结束,用户须登录自己的邮箱,点开邮箱中的链接进行重置。

  • 使用邮箱号请求重置密码
int res = vv_cloud_user_resetpass_email_v2(cloud_handle, email);

4.3.3.3. 修改密码

在密码已知的情况下,可直接修改密码,不需要使用密码重置流程。
用手机号和邮箱号新注册的用户,其默认密码为手机验证码或邮箱验证码。可以在注册的最后一步,通过修改密码接口,让用户设置一个自己容易记住的密码。

  • 修改密码
int res = vv_cloud_user_modify_pass(cloud_handle, user, oldpass, newpass);

4.3.4. 登录流程

Windows APP->Windows APP: 1. 输入账号及密码
Windows APP->云平台: 2. 登录
云平台-->Windows APP: 3. 回复结果

用户登录只需要被执行一次。

  • 登录
int res = vv_cloud_login(cloud_handle, user, pass);

4.3.5. 修改用户昵称流程

Windows APP->Windows APP: 1. 输入新昵称
Windows APP->云平台: 2. 请求修改
云平台-->Windows APP: 3. 回复结果

以上步骤请在登录后进行。

int res = vv_cloud_user_modify_nick(cloud_handle,  user,  pass, nick);

4.3.6. 获取设备列表流程

由于单个设备可能会有多个通道(摄像头),因此这个接口通常不需要调用,呈现给用户的列表通常是摄像头列表。如果需要在界面上显示设备列表,再分级显示设备下的通道的话,需要获取设备列表和摄像头列表,并自己进行组合。

Windows APP->Windows APP: 1. 登录(略,参见4.3.4.)
Windows APP->云平台: 2. 请求获取设备列表
云平台-->Windows APP: 3. 回复结果

以上步骤请在登录后进行。

  • 取设备列表
int res = vv_cloud_get_dev_list(cloud_handle,  out_devlist);

4.3.7. 获取摄像头列表流程

Windows APP->Windows APP: 1. 登录(略,参见2.3.4.)
Windows APP->云平台: 2. 请求获取摄像头列表
云平台-->Windows APP: 3. 回复结果
Windows APP->云平台: 4. 获取摄像头缩略图
云平台-->Windows APP: 5. 回复
Windows APP->Windows APP: 6. 打开P2P预连接

以上步骤请在登录后进行。

  • 取摄像头列表
int res = vv_cloud_get_cam_list(cloud_handle, out_camlist);
  • 获取摄像头缩略图
int res = vv_cloud_get_cam_pic(cloud_handle, cam_id, out_pic, out_size);
  • 创建设备句柄
Long device_handle = vv_cli_create(p2pid, ip, port, pass);

注:当摄像头列表发生变化时(通常发生在同一个账号多个手机登录,并且添加或删除摄像头时),会收到摄像头列表变化推送,此时需要更新一下摄像头列表。