HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

【IOS相册权限】Native.js IOS相册权限获取 弹窗请求授权

Native.JS

优化官方推荐的uni.authorize文档中permission.js中的相册授权方法,判断是否有授权没有则弹窗请求授权。
发现很多小伙伴有这个需求,自己也在网上搜索了一番无果。
在此分享出来,方便大家开发。

// 判断相册权限是否开启 resolve()返回值可以根据需求更具体一点,在业务中拿到状态码后弹窗提示用户是否要去设置页修改权限  
function judgeIosPermissionPhotoLibrary() {  
    return new Promise((resolve, reject) => {  
        var PHAuthorizationStatus = {  
            NotDetermined: 0, // 未申请过权限  
            Restricted: 1, // 拒绝  
            Denied: 2,  // 拒绝  
            Authorized: 3, // 拥有  
            Limited: 4 // iOS 14 新增  
        };  
        if (!PHPhotoLibrary) {  
            var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");  
        }  
        var status  = PHPhotoLibrary.authorizationStatus();  
        if (status === PHAuthorizationStatus.NotDetermined) {  
            PHPhotoLibrary.requestAuthorization(() => {  
                const status = PHPhotoLibrary.authorizationStatus(); {  
                    if (status === PHAuthorizationStatus.Authorized) {  
                        plus.ios.deleteObject(PHPhotoLibrary);  
                        resolve(true)  
                    } else {  
                        plus.ios.deleteObject(PHPhotoLibrary);  
                        resolve(false)  
                    }  
                }  
            })  
        } else if (status === PHAuthorizationStatus.Authorized) {  
            plus.ios.deleteObject(PHPhotoLibrary);  
            resolve(true)  
        } else {  
            if (status === PHAuthorizationStatus.Denied || status === PHAuthorizationStatus.Restricted) {  
                console.log("您已拒绝访问相册权限,请在设置中手动开启。");   
            } else if (status === PHAuthorizationStatus.Limited) {  
                console.log("相册权限为有限访问。");   
            }  
            plus.ios.deleteObject(PHPhotoLibrary);  
            resolve(false)  
        }     
    })  

}
继续阅读 »

优化官方推荐的uni.authorize文档中permission.js中的相册授权方法,判断是否有授权没有则弹窗请求授权。
发现很多小伙伴有这个需求,自己也在网上搜索了一番无果。
在此分享出来,方便大家开发。

// 判断相册权限是否开启 resolve()返回值可以根据需求更具体一点,在业务中拿到状态码后弹窗提示用户是否要去设置页修改权限  
function judgeIosPermissionPhotoLibrary() {  
    return new Promise((resolve, reject) => {  
        var PHAuthorizationStatus = {  
            NotDetermined: 0, // 未申请过权限  
            Restricted: 1, // 拒绝  
            Denied: 2,  // 拒绝  
            Authorized: 3, // 拥有  
            Limited: 4 // iOS 14 新增  
        };  
        if (!PHPhotoLibrary) {  
            var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");  
        }  
        var status  = PHPhotoLibrary.authorizationStatus();  
        if (status === PHAuthorizationStatus.NotDetermined) {  
            PHPhotoLibrary.requestAuthorization(() => {  
                const status = PHPhotoLibrary.authorizationStatus(); {  
                    if (status === PHAuthorizationStatus.Authorized) {  
                        plus.ios.deleteObject(PHPhotoLibrary);  
                        resolve(true)  
                    } else {  
                        plus.ios.deleteObject(PHPhotoLibrary);  
                        resolve(false)  
                    }  
                }  
            })  
        } else if (status === PHAuthorizationStatus.Authorized) {  
            plus.ios.deleteObject(PHPhotoLibrary);  
            resolve(true)  
        } else {  
            if (status === PHAuthorizationStatus.Denied || status === PHAuthorizationStatus.Restricted) {  
                console.log("您已拒绝访问相册权限,请在设置中手动开启。");   
            } else if (status === PHAuthorizationStatus.Limited) {  
                console.log("相册权限为有限访问。");   
            }  
            plus.ios.deleteObject(PHPhotoLibrary);  
            resolve(false)  
        }     
    })  

}
收起阅读 »

uni-app打包H5自动请求shadow-grey.png的问题

反应H5加载很慢,排查有个图片耗时较多,“https://cdn.dcloud.net.cn/img/shadow-grey.png”

这个图片是导航栏底边阴影效果预加载加速显示用的,如果不需要参考下面的配置。

app.vue 文件添加如下css,经测已正常。  
<style>  
    body::after {  
        content: none !important;  
    }  
</style>
继续阅读 »

反应H5加载很慢,排查有个图片耗时较多,“https://cdn.dcloud.net.cn/img/shadow-grey.png”

这个图片是导航栏底边阴影效果预加载加速显示用的,如果不需要参考下面的配置。

app.vue 文件添加如下css,经测已正常。  
<style>  
    body::after {  
        content: none !important;  
    }  
</style>
收起阅读 »

分享一个第三方unicloud省市区数据库,顺便反馈一个bug

省市选择

github地址 https://github.com/6613974/unicloud-china-city

==============================================
bug反馈, 客户端云数据库查询不支持地理查询(所有操作)均为==右侧值错误
示例代码需要在云函数内执行查询。

地图收费贵,uni自带的数据库个人不适应,重新整理了这个数据。 不需要基于经纬度的地理查询可以删除字段极大减小数据空间占用。
姑且算是满足了县级的地理逆解析,用小程序的可以用免费的经纬度接口配合查询。
==============================================
unicloud-china-city-geo
适用于unicloud于mongodb的大陆地区省市区及轮廓数据(gcj02)

数据来源
高德地图抓取

创建表
使用hubildX在database目录下用city-china.schema.json创建表,用city-china.json创建索引,或直接在unicloud控制台手动创建并添加索引,mongodb下自行修改导入文件格式

字段说明
code 唯一ID,省为两位,市四位,县六位 如北京为11 北京市1101 北京市西城区 110102
parent_code 上级ID 省级为null
name 地区简称 如北京
fullname 地区全称 如北京市
path 地区完整路径,如 北京市 北京市 西城区
pinyin 地区名称拼音 如 beijing
type 地区类型 0 省 1市 2县
first_letter 地区拼音首字母大写 如B
geometry 轮廓数据
基于经纬度的省市区查询
// 请在云函数中执行查询,uni-app本地无法执行地理查询
// lat 经度值 浮点数类型
// lng 纬度值 浮点数类型
const {errCode, data} = await db.collection('city')
.where({
geometry: db.command.geoIntersects({
geometry: db.Geo.Point(lat, lng)
})
})
.field({
code:true,
parent_code:true,
name:true,
fullname:true,
type:true,
first_letter:true,
pinyin:true,
})
.get()
省市区查询
省市区保存时只需保存最后一及的数值,以北京市西城区为例,110102, 可在path字段获取完整的省市区名称,无需二次查询
有时需要通过code反查上级code, 如北京可提取前两位获取11,北京市提取前4位即1101,无需反复查询数据库。
要查所有的省可以通过parent_code为null进行查询
要查北京下所有的市可模糊查询code为11开头且type为1
要查北京市下所有的区可模糊查询code为1101开头且type为2
可通过拼音或首字母进行搜索
不需要地理位置时可删除geometry字段可极大建设数据库空间占用
备注
数据来自高德,仅包括中国大陆地区,港、澳、台缺少轮廓数据的值为null

继续阅读 »

github地址 https://github.com/6613974/unicloud-china-city

==============================================
bug反馈, 客户端云数据库查询不支持地理查询(所有操作)均为==右侧值错误
示例代码需要在云函数内执行查询。

地图收费贵,uni自带的数据库个人不适应,重新整理了这个数据。 不需要基于经纬度的地理查询可以删除字段极大减小数据空间占用。
姑且算是满足了县级的地理逆解析,用小程序的可以用免费的经纬度接口配合查询。
==============================================
unicloud-china-city-geo
适用于unicloud于mongodb的大陆地区省市区及轮廓数据(gcj02)

数据来源
高德地图抓取

创建表
使用hubildX在database目录下用city-china.schema.json创建表,用city-china.json创建索引,或直接在unicloud控制台手动创建并添加索引,mongodb下自行修改导入文件格式

字段说明
code 唯一ID,省为两位,市四位,县六位 如北京为11 北京市1101 北京市西城区 110102
parent_code 上级ID 省级为null
name 地区简称 如北京
fullname 地区全称 如北京市
path 地区完整路径,如 北京市 北京市 西城区
pinyin 地区名称拼音 如 beijing
type 地区类型 0 省 1市 2县
first_letter 地区拼音首字母大写 如B
geometry 轮廓数据
基于经纬度的省市区查询
// 请在云函数中执行查询,uni-app本地无法执行地理查询
// lat 经度值 浮点数类型
// lng 纬度值 浮点数类型
const {errCode, data} = await db.collection('city')
.where({
geometry: db.command.geoIntersects({
geometry: db.Geo.Point(lat, lng)
})
})
.field({
code:true,
parent_code:true,
name:true,
fullname:true,
type:true,
first_letter:true,
pinyin:true,
})
.get()
省市区查询
省市区保存时只需保存最后一及的数值,以北京市西城区为例,110102, 可在path字段获取完整的省市区名称,无需二次查询
有时需要通过code反查上级code, 如北京可提取前两位获取11,北京市提取前4位即1101,无需反复查询数据库。
要查所有的省可以通过parent_code为null进行查询
要查北京下所有的市可模糊查询code为11开头且type为1
要查北京市下所有的区可模糊查询code为1101开头且type为2
可通过拼音或首字母进行搜索
不需要地理位置时可删除geometry字段可极大建设数据库空间占用
备注
数据来自高德,仅包括中国大陆地区,港、澳、台缺少轮廓数据的值为null

收起阅读 »

【解决】uni.createRequestPermissionListener()安卓离线打包问题

本地打包 App离线打包 Android 安卓

一、首先需要Hbuilderx版本需大于等于4.21,离线sdk下载相对应版本

具体看官方回复:https://ask.dcloud.net.cn/question/193097,截图如下:

二、复制以下sdk:utsplugin-release.aar、uni-createRequestPermissionListener-release.aar

三、粘贴sdk到安卓的以下目录:

四、在项目的build.gradle添加以下代码,可以直接看官方文档:https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/uts.html

1、在app级的build.gradle配置

implementation "com.squareup.okhttp3:okhttp:3.12.12"  
implementation "androidx.core:core-ktx:1.6.0"  
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.10"  
implementation "org.jetbrains.kotlin:kotlin-reflect:1.6.0"  
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8"  
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8"  
implementation "com.github.getActivity:XXPermissions:18.0"

2、在项目根目录的build.gradle下添加jitpack依赖

maven {url 'https://jitpack.io'}

五、初次编译或者每次有改动都点击一下“Sync Project with Gradle Files”按钮

六、看是要运行还是要打包

↓↓↓ 各位大佬点点赞

继续阅读 »

一、首先需要Hbuilderx版本需大于等于4.21,离线sdk下载相对应版本

具体看官方回复:https://ask.dcloud.net.cn/question/193097,截图如下:

二、复制以下sdk:utsplugin-release.aar、uni-createRequestPermissionListener-release.aar

三、粘贴sdk到安卓的以下目录:

四、在项目的build.gradle添加以下代码,可以直接看官方文档:https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/uts.html

1、在app级的build.gradle配置

implementation "com.squareup.okhttp3:okhttp:3.12.12"  
implementation "androidx.core:core-ktx:1.6.0"  
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.10"  
implementation "org.jetbrains.kotlin:kotlin-reflect:1.6.0"  
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8"  
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8"  
implementation "com.github.getActivity:XXPermissions:18.0"

2、在项目根目录的build.gradle下添加jitpack依赖

maven {url 'https://jitpack.io'}

五、初次编译或者每次有改动都点击一下“Sync Project with Gradle Files”按钮

六、看是要运行还是要打包

↓↓↓ 各位大佬点点赞

收起阅读 »

小程序预览时,显示空白页,首页没有显示

我的小程序有基本的功能,我想看看在手机上实际的效果,结果扫描小程序预览二维码后,总是显示一个空白页。一开始我以为是网速慢什么原因,尝试分包下载,结果还是一样。后来我就用微信小程序开发工具生成一个最简单的hello小程序,再预览,效果还是一样。后来我选择一个单页面模板,再试,结果显示”页面没找到'。我想就一个页面怎么会没找到呢?细看扫描页面,发现有个页面设置,我以前设置了一个预览页面,现在改了代码,那个页面不存在了。

总结以下:小程序预览时,预设的路径如果不是首页,可能会显示空白页,甚至不报错。

继续阅读 »

我的小程序有基本的功能,我想看看在手机上实际的效果,结果扫描小程序预览二维码后,总是显示一个空白页。一开始我以为是网速慢什么原因,尝试分包下载,结果还是一样。后来我就用微信小程序开发工具生成一个最简单的hello小程序,再预览,效果还是一样。后来我选择一个单页面模板,再试,结果显示”页面没找到'。我想就一个页面怎么会没找到呢?细看扫描页面,发现有个页面设置,我以前设置了一个预览页面,现在改了代码,那个页面不存在了。

总结以下:小程序预览时,预设的路径如果不是首页,可能会显示空白页,甚至不报错。

收起阅读 »

swiper内容中使用uview中image图片组件在H5端卡顿问题

swiper h5

解决:换成原生image组件即可。

解决:换成原生image组件即可。

全职外包接单,个人开发者承接app、小程序、网页外包

uniapp 外包接单 外包

全职在家承接外包,多年外包经验,个人开发者,绝对实惠靠谱,有很多款线上应用(度是自己开发的,自己独立完成,可查)

可做商城类,社交类,工具类,任务平台类,mes 类等,除了游戏和带颜色的,其他度可以开发

可承接安卓/IOS、各个端的小程序、H5网页、PC网页开发,从前端到后端,我全度会,一条龙服务

有需要开发的并能看得上我的请联系我哈

vx:wu1020yt

各位同行就别在下面打广告了谢谢,很不礼貌的

继续阅读 »

全职在家承接外包,多年外包经验,个人开发者,绝对实惠靠谱,有很多款线上应用(度是自己开发的,自己独立完成,可查)

可做商城类,社交类,工具类,任务平台类,mes 类等,除了游戏和带颜色的,其他度可以开发

可承接安卓/IOS、各个端的小程序、H5网页、PC网页开发,从前端到后端,我全度会,一条龙服务

有需要开发的并能看得上我的请联系我哈

vx:wu1020yt

各位同行就别在下面打广告了谢谢,很不礼貌的

收起阅读 »

uniCloud 三个云厂商的功能差异汇总,持续更新中

uniCloud

前言

官方已抹平了三个云厂商的绝大部分差异,但是还有部分功能表现不一致,或语法不统一等。
此表格汇总目前已知差异,旨在为开发者提供参考,无论是在首次选择云厂商,还是后期切换厂商,都能做到心中有数。

群策群力

一个人的精力有限,欢迎每一位开发者在留言中补充更多差异项。

套餐区别及云资源限制差异

官方已整理汇总,点击查看官方文档

云函数/云对象差异

功能项 腾讯云 阿里云 支付宝云 详情 备注
云函数数量限制 149 99 499 - -
最大超时时间 30秒 120秒 180秒 - 如果超时时间不够用,可递归调用云函数
定时任务单次最大运行时间 15分钟 2小时 3小时 - -
QPS 500-1w 1k 2k - -
云端安装node_modules - npm包不占用云函数体积
读取文件路径 相对路径、绝对路径 相对路径 相对路径 - -
云函数内访问其他服务空间 查看 -
实例回收时间 30分钟 15分钟 60秒 - 实例回收后,下次访问会触发冷启动
单实例多并发 查看 -
node版本 node8.9.4(可改node12) node16(可改node12) node18(可改node16) 查看 腾讯云使用node12时,可配置return后是否继续执行
时区 UTC+0 UTC+0 UTC+8 - 本地运行时是电脑的时区
WebSocket - 客户端需使用uni-app x
固定出口IP - - - 查看 -
IP防刷 基于Redis 基于Redis 网关层面 - -
- - - - - -

云数据库差异

功能项 腾讯云 阿里云 支付宝云 详情 备注
集合数量限制 300 100 400 - -
_id区别 32位的字符串类型 24位的ObjectId类型 24位的字符串类型 查看 -
数据库回档 - - 查看 -
JQL运算 - - 查看 -

前端网页托管差异

功能项 腾讯云 阿里云 支付宝云 详情 备注
history模式 查看 -
gzip压缩 查看 -
防盗链 查看 -
删除非空文件夹 查看 -
继续阅读 »

前言

官方已抹平了三个云厂商的绝大部分差异,但是还有部分功能表现不一致,或语法不统一等。
此表格汇总目前已知差异,旨在为开发者提供参考,无论是在首次选择云厂商,还是后期切换厂商,都能做到心中有数。

群策群力

一个人的精力有限,欢迎每一位开发者在留言中补充更多差异项。

套餐区别及云资源限制差异

官方已整理汇总,点击查看官方文档

云函数/云对象差异

功能项 腾讯云 阿里云 支付宝云 详情 备注
云函数数量限制 149 99 499 - -
最大超时时间 30秒 120秒 180秒 - 如果超时时间不够用,可递归调用云函数
定时任务单次最大运行时间 15分钟 2小时 3小时 - -
QPS 500-1w 1k 2k - -
云端安装node_modules - npm包不占用云函数体积
读取文件路径 相对路径、绝对路径 相对路径 相对路径 - -
云函数内访问其他服务空间 查看 -
实例回收时间 30分钟 15分钟 60秒 - 实例回收后,下次访问会触发冷启动
单实例多并发 查看 -
node版本 node8.9.4(可改node12) node16(可改node12) node18(可改node16) 查看 腾讯云使用node12时,可配置return后是否继续执行
时区 UTC+0 UTC+0 UTC+8 - 本地运行时是电脑的时区
WebSocket - 客户端需使用uni-app x
固定出口IP - - - 查看 -
IP防刷 基于Redis 基于Redis 网关层面 - -
- - - - - -

云数据库差异

功能项 腾讯云 阿里云 支付宝云 详情 备注
集合数量限制 300 100 400 - -
_id区别 32位的字符串类型 24位的ObjectId类型 24位的字符串类型 查看 -
数据库回档 - - 查看 -
JQL运算 - - 查看 -

前端网页托管差异

功能项 腾讯云 阿里云 支付宝云 详情 备注
history模式 查看 -
gzip压缩 查看 -
防盗链 查看 -
删除非空文件夹 查看 -
收起阅读 »

个人兼职接单,前后端皆可开发

外包接单

技术栈:uniapp、uniappX、uniCloud、taro、vue、react、react native、原生小程序、nodejs相关等,有项目来+ vx172537,低价优品,极致性价比

技术栈:uniapp、uniappX、uniCloud、taro、vue、react、react native、原生小程序、nodejs相关等,有项目来+ vx172537,低价优品,极致性价比

如何基于带UI组件的音视频SDK 一小时快速集成音视频SDK

ui框架 直播 视频 ui组件

快速开始(包含呼叫邀请)

参考此文档,您可以了解并集成一对一音视频通话的呼叫邀请功能。

准备环境

在开始集成音视频 UIKit 前,请确保开发环境满足以下要求:

Android Studio 2020.3.1 或以上版本。
Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.x.x 或以上版本。
Android 4.4 或以上版本,且支持音视频的 Android 设备。
Android 设备已经连接到 Internet。

前提条件

已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目信息
联系 ZEGO 技术支持,开通 UIKit 相关服务。

UI 实现效果

以下 Gif 为小米设备上的效果,不同设备可能会有不同的结果。

Note
以下离线通话的效果需要您实现在线呼叫邀请功能后,参考 向离线应用发送呼叫邀请 进一步集成离线推送功能。

在线通话 在线通话(APP处于后台状态) 离线通话(APP被终止)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

集成呼叫邀请功能

添加 ZegoUIKitPrebuiltCall 为依赖项

添加 jitpack 配置。
根据您的 Android Gradle 插件版本,选择对应的实现步骤。

7.1.0 或更高版本 低于 7.1.0 的版本
进入项目的根目录,打开 settings.gradle 文件,在 dependencyResolutionManagement > repositories 中添加 jitpack,示例代码如下:

dependencyResolutionManagement {  
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)  
  repositories {  
      google()  
      mavenCentral()  
      maven { url 'https://storage.zego.im/maven' }   // <- 添加这行。  
      maven { url 'https://www.jitpack.io' } // <- 添加这行。  
  }  
}

修改您的 app 级别的 build.gradle 文件。

dependencies {
...
implementation 'com.github.ZEGOCLOUD:zego_uikit_prebuilt_call_android:+' }

初始化呼叫邀请服务

在用户登录后,调用init方法,并指定 userID 和 userName 来连接呼音视频通话服务。

我们建议在用户登录您的 App 后立即调用此方法。

  1. 用户登录后,需要初始化 ZegoUIKitPrebuiltCallService 以接收呼叫邀请。 用户登出时,需要调用 uninit
  2. 以清除先前的登录记录,以免影响下次登录。

Note UIKit 默认语言为英文,如需修改为中文,请修改
ZegoUIKitPrebuiltCallInvitationConfig.translationText。

Application application = ; // Android 应用程序上下文  
long appID = ;   // 您的 AppID  
String appSign =;  // 您的 AppSign  
String userID =; // 您的 userID,userID应仅包含数字、英文字母和'_'  
String userName =;   // 您的 userName  

ZegoUIKitPrebuiltCallInvitationConfig callInvitationConfig = new ZegoUIKitPrebuiltCallInvitationConfig();  
// 设置语言为中文  
callInvitationConfig.translationText = new ZegoTranslationText(ZegoUIKitLanguage.CHS);  

ZegoUIKitPrebuiltCallService.init(getApplication(), appID, appSign, userID, userName, callInvitationConfig);

ZegoUIKitPrebuiltCallService 组件属性

属性 类型 必需 描述
appID long 是 您从 ZEGO 控制台 获取的App ID。
appSign String 是 您从 ZEGO 控制台 获取的App Sign。
userID String 是 userID可以是电话号码或您自己用户系统上的用户ID。只能包含数字、字母和下划线(_)。
userName String 是 userName可以是任何字符或您自己用户系统上的用户名。

添加呼叫邀请按钮

您可以自定义 ZegoSendCallInvitationButton 的位置,传入您想要呼叫的用户的ID。

String targetUserID = ; // 呼叫目标的用户 ID。  
String targetUserName = ; // 呼叫目标的用户名。  
Context context = ; // Android上下文。  

ZegoSendCallInvitationButton button = new ZegoSendCallInvitationButton(context);  
button.setIsVideoCall(true);  
button.setInvitees(Collections.singletonList(new ZegoUIKitUser(targetUserID,targetUserName)));

ZegoSendCallInvitationButton 属性

属性 类型 必需 描述
invitees Array 是 被叫用户信息。必须包括 userID 和 userName。
isVideoCall Boolean 是 如果为 true,则按下按钮时进行视频通话,否则进行语音通话。
resourceID String 否 用于配置离线呼叫邀请铃声,需与在 ZEGO 控制台 配置的值保持一致。
timeout Number 否 超时时长。默认为60秒。
如需了解更多参数,请参考 自定义通话。

至此,您可以通过点击此按钮进行呼叫邀请。

运行和测试

至此,您已经完成了所有步骤!

只需在 Android Studio 中点击 Run 即可在设备上运行和测试您的应用程序。

继续阅读 »

快速开始(包含呼叫邀请)

参考此文档,您可以了解并集成一对一音视频通话的呼叫邀请功能。

准备环境

在开始集成音视频 UIKit 前,请确保开发环境满足以下要求:

Android Studio 2020.3.1 或以上版本。
Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.x.x 或以上版本。
Android 4.4 或以上版本,且支持音视频的 Android 设备。
Android 设备已经连接到 Internet。

前提条件

已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目信息
联系 ZEGO 技术支持,开通 UIKit 相关服务。

UI 实现效果

以下 Gif 为小米设备上的效果,不同设备可能会有不同的结果。

Note
以下离线通话的效果需要您实现在线呼叫邀请功能后,参考 向离线应用发送呼叫邀请 进一步集成离线推送功能。

在线通话 在线通话(APP处于后台状态) 离线通话(APP被终止)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

集成呼叫邀请功能

添加 ZegoUIKitPrebuiltCall 为依赖项

添加 jitpack 配置。
根据您的 Android Gradle 插件版本,选择对应的实现步骤。

7.1.0 或更高版本 低于 7.1.0 的版本
进入项目的根目录,打开 settings.gradle 文件,在 dependencyResolutionManagement > repositories 中添加 jitpack,示例代码如下:

dependencyResolutionManagement {  
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)  
  repositories {  
      google()  
      mavenCentral()  
      maven { url 'https://storage.zego.im/maven' }   // <- 添加这行。  
      maven { url 'https://www.jitpack.io' } // <- 添加这行。  
  }  
}

修改您的 app 级别的 build.gradle 文件。

dependencies {
...
implementation 'com.github.ZEGOCLOUD:zego_uikit_prebuilt_call_android:+' }

初始化呼叫邀请服务

在用户登录后,调用init方法,并指定 userID 和 userName 来连接呼音视频通话服务。

我们建议在用户登录您的 App 后立即调用此方法。

  1. 用户登录后,需要初始化 ZegoUIKitPrebuiltCallService 以接收呼叫邀请。 用户登出时,需要调用 uninit
  2. 以清除先前的登录记录,以免影响下次登录。

Note UIKit 默认语言为英文,如需修改为中文,请修改
ZegoUIKitPrebuiltCallInvitationConfig.translationText。

Application application = ; // Android 应用程序上下文  
long appID = ;   // 您的 AppID  
String appSign =;  // 您的 AppSign  
String userID =; // 您的 userID,userID应仅包含数字、英文字母和'_'  
String userName =;   // 您的 userName  

ZegoUIKitPrebuiltCallInvitationConfig callInvitationConfig = new ZegoUIKitPrebuiltCallInvitationConfig();  
// 设置语言为中文  
callInvitationConfig.translationText = new ZegoTranslationText(ZegoUIKitLanguage.CHS);  

ZegoUIKitPrebuiltCallService.init(getApplication(), appID, appSign, userID, userName, callInvitationConfig);

ZegoUIKitPrebuiltCallService 组件属性

属性 类型 必需 描述
appID long 是 您从 ZEGO 控制台 获取的App ID。
appSign String 是 您从 ZEGO 控制台 获取的App Sign。
userID String 是 userID可以是电话号码或您自己用户系统上的用户ID。只能包含数字、字母和下划线(_)。
userName String 是 userName可以是任何字符或您自己用户系统上的用户名。

添加呼叫邀请按钮

您可以自定义 ZegoSendCallInvitationButton 的位置,传入您想要呼叫的用户的ID。

String targetUserID = ; // 呼叫目标的用户 ID。  
String targetUserName = ; // 呼叫目标的用户名。  
Context context = ; // Android上下文。  

ZegoSendCallInvitationButton button = new ZegoSendCallInvitationButton(context);  
button.setIsVideoCall(true);  
button.setInvitees(Collections.singletonList(new ZegoUIKitUser(targetUserID,targetUserName)));

ZegoSendCallInvitationButton 属性

属性 类型 必需 描述
invitees Array 是 被叫用户信息。必须包括 userID 和 userName。
isVideoCall Boolean 是 如果为 true,则按下按钮时进行视频通话,否则进行语音通话。
resourceID String 否 用于配置离线呼叫邀请铃声,需与在 ZEGO 控制台 配置的值保持一致。
timeout Number 否 超时时长。默认为60秒。
如需了解更多参数,请参考 自定义通话。

至此,您可以通过点击此按钮进行呼叫邀请。

运行和测试

至此,您已经完成了所有步骤!

只需在 Android Studio 中点击 Run 即可在设备上运行和测试您的应用程序。

收起阅读 »

短信充值开放接口,APP一键登录充值开放接口等

希望官方可以出一个关于查询当前unicloud账号下云短信账号余额,以及模版列表,签名列表,申请签名,申请短信模板,以及充值短信账号条数、APP一键登录余额查询,余额充值等的功能的接口

这样就可以在自己的项目的管理后台进行操作,申请短信模板,签名,充值余额啥的,这样方便交给客户之后 不懂技术的客户 好操作

其他模块最好也能出一下相关接口
就像微信开放文档这样

继续阅读 »

希望官方可以出一个关于查询当前unicloud账号下云短信账号余额,以及模版列表,签名列表,申请签名,申请短信模板,以及充值短信账号条数、APP一键登录余额查询,余额充值等的功能的接口

这样就可以在自己的项目的管理后台进行操作,申请短信模板,签名,充值余额啥的,这样方便交给客户之后 不懂技术的客户 好操作

其他模块最好也能出一下相关接口
就像微信开放文档这样

收起阅读 »

关于IOS云打包白屏问题一个简单有效的方案!

iOS云端打包 uniapp
   我在将uniapp项目打包成iosApp的时候出现了一个问题,明明在真机调试时页面正常显示,但是云打包后就是白屏,即使使用了自定义基座进行调试,在控制台也发现毫无报错。我相信许多同学也遇到了这种问题,其实根本原因是环境与函数导致的。  

   我的排查方式:1.ios云打包 -->  选择自定义基座  
                            2.ios真机调试 --> 选择自定义基座调试(这样就可以在白屏状态下进行debug)  
                            3.项目编译运行起来后 --> 控制台右上角选择debug按钮(普通控制台如果不报错,需要使用这种方式才看得到)  

   最后定位到我的问题出现在项目使用了html5+的plus对象,在app环境下使用了错误的函数。  
继续阅读 »
   我在将uniapp项目打包成iosApp的时候出现了一个问题,明明在真机调试时页面正常显示,但是云打包后就是白屏,即使使用了自定义基座进行调试,在控制台也发现毫无报错。我相信许多同学也遇到了这种问题,其实根本原因是环境与函数导致的。  

   我的排查方式:1.ios云打包 -->  选择自定义基座  
                            2.ios真机调试 --> 选择自定义基座调试(这样就可以在白屏状态下进行debug)  
                            3.项目编译运行起来后 --> 控制台右上角选择debug按钮(普通控制台如果不报错,需要使用这种方式才看得到)  

   最后定位到我的问题出现在项目使用了html5+的plus对象,在app环境下使用了错误的函数。  
收起阅读 »