敬告:此 DEMO 演示为开放测试页面,仅用于开发者快速测试体验应用功能,请严格遵守开发者协议,了解更多。
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版 jsBridge-v20241118.zip,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
【优惠说明】通过一门平台链接登录云信控制台并成功注册账号,云信将提供特别的渠道版套餐,低至五折接入;
基本设置
网易云信 上创建的应用 AppKey
appKey:
是否开启会话已读多端同步,false 即不支持多端同步会话未读数
sessionReadAck:
群通知消息是否计入未读数,false 即群消息不计入未读数
teamNotificationMessageMarkUnread:
是否启用群消息已读功能,false 即关闭群消息已读功能
enableTeamMsgAck:
是否需要将被撤回的消息计入未读数,false 即撤回消息不影响未读数
shouldConsiderRevokedMessageUnreadCount:
登录时的自定义字段,登录成功后同步给其他端
loginCustomTag:
是否同步置顶会话,false 即不同步置顶会话
notifyStickTopSession:
是否开启最近联系人会话时间索引,false 即不开启
enableRecentContactsTimeIndex:
是否开启聊天室空间消息功能,false 即不开启
enableChatRoomLocation:
是否支持圈组消息缓存,false 即不开启
enabledQChatMessageCache:
true 则消息状态是否成功会结合是否被拉入黑名单进行判断
fixMsgStatusByBlackList:
是否开启圈组自动订阅,true 开启圈组自动订阅;false 关闭圈组自动订阅
qchatAutoSubscribe:
是否使用自定义用户信息,如果启用请务必参考示例处理 setListener 的 fetchUserInfo 事件
useCustomUserInfoDelegate:
小米推送 appId
mixPushConfig.xmAppId:
小米推送 appKey
mixPushConfig.xmAppKey:
小米推送证书,请在云信管理后台申请
mixPushConfig.xmCertificateName:
华为推送 appId
mixPushConfig.hwAppId:
华为推送证书,请在云信管理后台申请
mixPushConfig.hwCertificateName:
魅族推送 appId
mixPushConfig.mzAppId:
魅族推送 appKey
mixPushConfig.mzAppKey:
族推送证书,请在云信管理后台申请
mixPushConfig.mzCertificateName:
VIVO推送证书,请在云信管理后台申请
mixPushConfig.vivoCertificateName:
OPPO推送 appId
mixPushConfig.oppoAppId:
OPPO推送 appKey
mixPushConfig.oppoAppKey:
OPPO推送 appSecret
mixPushConfig.oppoAppSecret:
OPPO推送证书,请在云信管理后台申请
mixPushConfig.oppoCertificateName:
荣耀推送证书,请在云信管理后台申请
mixPushConfig.honorCertificateName:
FCM推送证书,请在云信管理后台申请(海外客户使用)
mixPushConfig.fcmCertificateName:
是否根据token自动选择推送类型
mixPushConfig.autoSelectPushType:
iOS APNs 推送证书名
mixPushConfig.apnsCername:
iOS PushKit 推送证书名
mixPushConfig.pkCername:
jsBridge.yxRtc.init({ //网易云信 上创建的应用 AppKey appKey: "{{init.appKey}}", //是否开启会话已读多端同步,false 即不支持多端同步会话未读数 sessionReadAck: {{init.sessionReadAck}}, //群通知消息是否计入未读数,false 即群消息不计入未读数 teamNotificationMessageMarkUnread: {{init.teamNotificationMessageMarkUnread}}, //是否启用群消息已读功能,false 即关闭群消息已读功能 enableTeamMsgAck: {{init.enableTeamMsgAck}}, //是否需要将被撤回的消息计入未读数,false 即撤回消息不影响未读数 shouldConsiderRevokedMessageUnreadCount: {{init.shouldConsiderRevokedMessageUnreadCount}}, //登录时的自定义字段,登录成功后同步给其他端 loginCustomTag: "{{init.loginCustomTag}}", //是否同步置顶会话,false 即不同步置顶会话 notifyStickTopSession: {{init.notifyStickTopSession}}, //是否开启最近联系人会话时间索引,false 即不开启 enableRecentContactsTimeIndex: {{init.enableRecentContactsTimeIndex}}, //是否开启聊天室空间消息功能,false 即不开启 enableChatRoomLocation: {{init.enableChatRoomLocation}}, //是否支持圈组消息缓存,false 即不开启 enabledQChatMessageCache: {{init.enabledQChatMessageCache}}, //true 则消息状态是否成功会结合是否被拉入黑名单进行判断 fixMsgStatusByBlackList: {{init.fixMsgStatusByBlackList}}, //是否开启圈组自动订阅,true 开启圈组自动订阅;false 关闭圈组自动订阅 qchatAutoSubscribe: {{init.qchatAutoSubscribe}}, //是否使用自定义用户信息,如果启用请务必参考示例处理 setListener 的 fetchUserInfo 事件 useCustomUserInfoDelegate: {{init.useCustomUserInfoDelegate}}, //第三方厂商通道离线推送配置 mixPushConfig: { //小米推送 appId xmAppId: "{{init.mixPushConfig.xmAppId}}", //小米推送 appKey xmAppKey: "{{init.mixPushConfig.xmAppKey}}", //小米推送证书,请在云信管理后台申请 xmCertificateName: "{{init.mixPushConfig.xmCertificateName}}", //华为推送 appId hwAppId: "{{init.mixPushConfig.hwAppId}}", //华为推送证书,请在云信管理后台申请 hwCertificateName: "{{init.mixPushConfig.hwCertificateName}}", //魅族推送 appId mzAppId: "{{init.mixPushConfig.mzAppId}}", //魅族推送 appKey mzAppKey: "{{init.mixPushConfig.mzAppKey}}", //族推送证书,请在云信管理后台申请 mzCertificateName: "{{init.mixPushConfig.mzCertificateName}}", //VIVO推送证书,请在云信管理后台申请 vivoCertificateName: "{{init.mixPushConfig.vivoCertificateName}}", //OPPO推送 appId oppoAppId: "{{init.mixPushConfig.oppoAppId}}", //OPPO推送 appKey oppoAppKey: "{{init.mixPushConfig.oppoAppKey}}", //OPPO推送 appSecret oppoAppSecret: "{{init.mixPushConfig.oppoAppSecret}}", //OPPO推送证书,请在云信管理后台申请 oppoCertificateName: "{{init.mixPushConfig.oppoCertificateName}}", //荣耀推送证书,请在云信管理后台申请 honorCertificateName: "{{init.mixPushConfig.honorCertificateName}}", //FCM推送证书,请在云信管理后台申请(海外客户使用) fcmCertificateName: "{{init.mixPushConfig.fcmCertificateName}}", //是否根据token自动选择推送类型 autoSelectPushType: {{init.mixPushConfig.autoSelectPushType}}, //iOS APNs 推送证书名 apnsCername: "{{init.mixPushConfig.apnsCername}}", //iOS PushKit 推送证书名 pkCername: "{{init.mixPushConfig.pkCername}}" } }, function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
jsBridge.yxRtc.info(function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } /** 成功时 res 参数返回 { sdkVersion SDK版本 hasInit 是否已初始化 accid 当前登录的 accid status 当前用户状态 } **/ });
云信 IM 账号 的 accid
accid:
登录鉴权 token
token:
鉴权方式:
//0 通过静态 token 鉴权;
//1 通过动态 token 鉴权;
//2 基于第三方回调的 token 鉴权方式,使用该方式时必须传入 loginExt 参数
authType:
登录自定义扩展字段,用于第三方服务器鉴权,当 authType 为 2 时必须传入本参数
loginExt:
音视频通话是否使用 自定义用户昵称和头像,如果启用请务必在 setListener 中处理 CallkitUserInfoHelper 事件设置昵称和头像。
useCustomCallkitUserInfo:
jsBridge.yxRtc.login({ //云信 IM 账号 的 accid accid: "{{login.accid}}", //登录鉴权 token token: "{{login.token}}", //鉴权方式: //0 通过静态 token 鉴权; //1 通过动态 token 鉴权; //2 基于第三方回调的 token 鉴权方式,使用该方式时必须传入 loginExt 参数 authType: {{login.authType}}, //登录自定义扩展字段,用于第三方服务器鉴权,当 authType 为 2 时必须传入本参数 loginExt: "{{login.loginExt}}", //音视频通话是否使用 自定义用户昵称和头像,如果启用请务必在 setListener 中处理 CallkitUserInfoHelper 事件设置昵称和头像。 useCustomCallkitUserInfo: {{login.useCustomCallkitUserInfo}} }, function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
jsBridge.yxRtc.logout(function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
云信 IM 账号的 accid:
昵称
nickname:
//需在 setListner 的 CallkitUserInfoHelper -> fetchNickname 中调用 jsBridge.yxRtc.setCallkitUserNickname({ //云信 IM 账号的 accid accid: "{{setCallkitUserNickname.accid}}", //昵称 nickname: "{{setCallkitUserNickname.nickname}}" }, function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
云信 IM 账号的 accid:
昵称
nickname:
//需在 setListner 的 CallkitUserInfoHelper -> loadAvatar 中调用 jsBridge.yxRtc.setCallkitUserAvatar({ //云信 IM 账号的 accid accid: "{{setCallkitUserAvatar.accid}}", //头像 nickname: "{{setCallkitUserAvatar.avatar}}" }, function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
事件监听
• 如需处理接口调用事件,请设置此监听器;
jsBridge.yxRtc.setListener(function(event, res) { switch (event) { //用户信息 //初始化 init 时需启用 useCustomUserInfoDelegate 才会有此回调事件 case "CustomUserInfoDelegate": { switch (res.action) { //异步请求用户信息,res.data 为正在请求获取的 accid 数组 //准备好用户信息后请调用 setUserInfo 接口设置用户信息 case "fetchUserInfo": { const DemoUsers = { ym1: { accid: "ym1", nickname: "一门1", avatar: "https://www.yimenapp.com/assets/trtc/a1.png" }, ym2: { accid: "ym2", nickname: "一门2", avatar: "https://www.yimenapp.com/assets/trtc/a2.png" } }; //正在请求获得的 accid 列表 const accids = res.data; /* 示例 fetch(...).then(() => { jsBridge.yxRtc.setUserInfo(...) }); */ const users = []; accids.forEach(function(accid) { const user = DemoUsers[accid]; users.push(user ? user : { accid: accid, nickname: '未知昵称', avatar: 'https://www.yimenapp.com/assets/trtc/a.png' }); }); jsBridge.yxRtc.setUserInfo({ users: users }); break; } } break; } //登录 login 时需启用 useCustomCallkitUserInfo 才会有此回调事件 case "CallkitUserInfoHelper": { switch (res.action) { //异步请求用户昵称,res.data 为正在请求获取的 { accid: "xxx" } //准备好数据后请调用 setCallkitUserNickname 接口设置昵称 case "fetchNickname": { jsBridge.yxRtc.setCallkitUserNickname({ accid: res.data.accid, nickname: "一门 Callkit 测试" }); break; } //异步请求用户头像,res.data 为正在请求获取的 { accid: "xxx" } //准备好数据后请调用 setCallkitUserAvatar 接口设置头像 case "loadAvatar": { jsBridge.yxRtc.setCallkitUserAvatar({ accid: res.data.accid, avatar: "https://www.yimenapp.com/assets/trtc/a.png" }); break; } } break; } //通讯录标题栏 case "ContactListTitleBar": { switch (res.action) { //点击了右侧图标 //打开通讯录时需提供 titleBarRightIcon 才会有此回调,否则为系统默认行为 case "titleBarRightClick": { jsBridge.toast("Contact titleBarRightClick"); break; } //点击了右2图标 //打开通讯录时需提供 titleBarRight2Icon 才会有此回调,否则为系统默认行为 case "titleBarRight2Click": { jsBridge.toast("Contact titleBarRight2Click"); break; } } break; } //会话列表标题栏 case "ConversationListTitleBar": { switch (res.action) { //点击了左侧图标 //打开会话列表时需提供 titleBarLeftIcon 才会有此回调,否则为系统默认行为 case "titleBarLeftClick": { jsBridge.toast("Conversation titleBarLeftClick"); break; } //点击了右侧图标 //打开会话列表时需提供 titleBarRightIcon 才会有此回调,否则为系统默认行为 case "titleBarRightClick": { jsBridge.toast("Conversation titleBarRightClick"); break; } //点击了右2图标 //打开会话列表时需提供 titleBarRight2Icon 才会有此回调,否则为系统默认行为 case "titleBarRight2Click": { jsBridge.toast("Conversation titleBarRight2Click"); break; } } break; } } //此函数仅用于显示回调参数在本 DEMO 页面上 showResult({ event: event, res : res }); }); //请拉到页面底部查看回调数据信息 $('html,body').animate({ scrollTop: $('#view').offset().top }, 500); /** 回调参数说明: event //事件代码,字符串类型 res //事件数据,JSON 对象 { action //事件名称,字符串类型 data //事件参数 } **/
//移除监听器,不会再收到回调通知 //在需要时可重新调用 setListener jsBridge.yxRtc.removeListener();
网易云信 RTC 实时音视频通话
云信 IM 账号的 accid:
通话类型 callType:
推送标题 pushConfig.title:
推送内容 pushConfig.content:
jsBridge.yxRtc.singleCall({ //云信 IM 账号的 accid accid: "{{singleCall.accid}}", //通话类型 callType: "{{singleCall.callType}}", //可选,推送 pushConfig: { //标题 title: "{{singleCall.pushConfig.title}}", //内容 content: "{{singleCall.pushConfig.content}}" } }, function(success, res) { if (!success) { alert("失败" + JSON.stringify(res)); } });
监听回调数据: