敬告:此 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.yxIm.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.yxIm.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.yxIm.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.yxIm.logout(function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
云信 IM 账号的 accid:
昵称
nickname:
//需在 setListner 的 CallkitUserInfoHelper -> fetchNickname 中调用 jsBridge.yxIm.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.yxIm.setCallkitUserAvatar({ //云信 IM 账号的 accid accid: "{{setCallkitUserAvatar.accid}}", //头像 nickname: "{{setCallkitUserAvatar.avatar}}" }, function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
事件监听
• 如需处理接口调用事件,请设置此监听器;
jsBridge.yxIm.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.yxIm.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.yxIm.setUserInfo({ users: users }); break; } } break; } //登录 login 时需启用 useCustomCallkitUserInfo 才会有此回调事件 case "CallkitUserInfoHelper": { switch (res.action) { //异步请求用户昵称,res.data 为正在请求获取的 { accid: "xxx" } //准备好数据后请调用 setCallkitUserNickname 接口设置昵称 case "fetchNickname": { jsBridge.yxIm.setCallkitUserNickname({ accid: res.data.accid, nickname: "一门 Callkit 测试" }); break; } //异步请求用户头像,res.data 为正在请求获取的 { accid: "xxx" } //准备好数据后请调用 setCallkitUserAvatar 接口设置头像 case "loadAvatar": { jsBridge.yxIm.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.yxIm.removeListener();
网易云信 IM 即时通讯
云信 IM 账号的 accid
users[0].accid:
昵称
users[0].nickname:
头像
users[0].avatar:
//初始化 init 时需启用 useCustomUserInfoDelegate //需在 setListner 的 CustomUserInfoDelegate -> fetchUserInfo 中调用 jsBridge.yxIm.setUserInfo({ //一个或多个用户资料数组 users: [ { //云信 IM 账号的 accid accid: "{{setUserInfo.users[0].accid}}", //昵称 nickname: "{{setUserInfo.users[0].nickname}}", //头像 avatar: "{{setUserInfo.users[0].avatar}}" } //...可以一次设置多个用户 ] }, function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
震动
vibrateMode:
响铃
ringMode:
是否听筒播放
handsetMode:
是否显示已读状态
showReadStatus:
-
deleteWithAlias:
-
multiPortPushMode:
jsBridge.yxIm.setGlobalOptions({ //震动 vibrateMode: {{setGlobalOptions.vibrateMode}}, //响铃 ringMode: {{setGlobalOptions.ringMode}}, //是否听筒播放 handsetMode: {{setGlobalOptions.handsetMode}}, //是否显示已读状态 showReadStatus: {{setGlobalOptions.showReadStatus}}, //- deleteWithAlias: {{setGlobalOptions.deleteWithAlias}}, //- multiPortPushMode: {{setGlobalOptions.multiPortPushMode}} }, function(success, res) { if (success) { alert('成功' + JSON.stringify(res)); } else { alert('失败' + JSON.stringify(res)); } });
jsBridge.yxIm.getGlobalOptions(function(success, res) { if (success) { alert("成功" + JSON.stringify(res)); } else { alert("失败" + JSON.stringify(res)); } });
主题
theme:
界面路径
path:
目标用户云信 IM 账号的 accid
accid:
昵称
nickname
头像
avatar
目标群组ID
teamId:
通话类型
callType:
是否显示标题栏
showTitleBar:
是否显示右侧图标
showTitleBarRightIcon:
是否显示右侧图标2
showTitleBarRight2Icon:
右侧图标链接
titleBarRightIcon:
右侧图标2链接
titleBarRight2Icon:
标题
titleBarTitle:
标题颜色
titleBarTitleColor:
是否显示头部(验证、黑名单、群)
showHeader:
是否显示标题栏
showTitleBar:
是否显示左侧图标
showTitleBarLeftIcon:
是否显示右侧图标
showTitleBarRightIcon:
是否显示右侧图标2
showTitleBarRight2Icon:
左侧自定义图标链接
titleBarLeftIcon:
右侧自定义图标链接
titleBarRightIcon:
右侧自定义图标2链接
titleBarRight2Icon:
标题
titleBarTitle:
标题颜色
titleBarTitleColor:
列表项标题大小
itemTitleSize:
列表项标题颜色
itemTitleColor:
列表项内容大小
itemContentSize:
列表项内容颜色
itemContentColor:
列表项时间大小
itemDateSize:
列表项时间颜色
itemDateColor:
头像圆角
avatarCornerRadius:
列表项背景色
itemBackgroundColor:
列表项高亮色
itemStickTopBackgroundColor:
jsBridge.yxIm.navigate({ //主题,fun 为通用版,其他则为基础版 theme : "{{navigate.theme}}", //界面路径 path : "{{navigate.path}}", //参数 params: { accid: "{{navigate.params.accid}}", nickname: "{{navigate.params.nickname}}", avatar: "{{navigate.params.avatar}}", teamId: "{{navigate.params.teamId}}", //按序显示的工具栏按钮列表,null 则为系统默认按钮组,空数组 [] 则不显示任何按钮 //如下可选值分别为:录音、表情、相册、更多 inputBarItems: [ "record", "emoji", "album", "more" ], //按序显示展开的更多按钮列表,null 则为系统默认按钮组,空数组 [] 则不显示任何按钮 //如下可选值分别为:拍摄、位置、文件、音视频通话 inputMoreItems: [ "camera", "file", "location", "call" ], callType: "{{navigate.params.callType}}", //自定义通讯录界面 UI //是否显示标题栏 showTitleBar: {{navigate.params.showTitleBar}}, //是否显示右侧图标 showTitleBarRightIcon: {{navigate.params.showTitleBarRightIcon}}, //是否显示右侧图标2 showTitleBarRight2Icon: {{navigate.params.showTitleBarRight2Icon}}, //右侧自定义图标,留空则为默认图标、默认点击行为 titleBarRightIcon: "{{navigate.params.titleBarRightIcon}}", //右侧自定义图标2,留空则为默认图标、默认点击行为 titleBarRight2Icon: "{{navigate.params.titleBarRight2Icon}}", //标题 titleBarTitle: "{{navigate.params.titleBarTitle}}", //标题颜色,留空则为系统默认色 titleBarTitleColor: "{{navigate.params.titleBarTitleColor}}", //是否显示头部(验证、黑名单、群) showHeader: {{navigate.params.showHeader}}, //自定义会话消息界面 UI //是否显示标题栏 showTitleBar: {{navigate.params.showTitleBar}}, //是否显示左侧图标 showTitleBarLeftIcon: {{navigate.params.showTitleBarLeftIcon}}, //是否显示右侧图标 showTitleBarRightIcon: {{navigate.params.showTitleBarRightIcon}}, //是否显示右侧图标2 showTitleBarRight2Icon: {{navigate.params.showTitleBarRight2Icon}}, //左侧图标,留空则为默认图标、默认点击行为 titleBarLeftIcon: "{{navigate.params.titleBarLeftIcon}}", //右侧图标,留空则为默认图标、默认点击行为 titleBarRightIcon: "{{navigate.params.titleBarRightIcon}}", //右侧图标2,留空则为默认图标、默认点击行为 titleBarRight2Icon: "{{navigate.params.titleBarRight2Icon}}", //标题 titleBarTitle: "{{navigate.params.titleBarTitle}}", //标题颜色,留空则为系统默认色 titleBarTitleColor: "{{navigate.params.titleBarTitleColor}}", //列表项标题大小,小于1则为系统默认大小 itemTitleSize: {{navigate.params.itemTitleSize}}, //列表项标题颜色,留空则为系统默认色 itemTitleColor: "{{navigate.params.itemTitleColor}}", //列表项内容大小,小于1则为系统默认大小 itemContentSize: {{navigate.params.itemContentSize}}, //列表项内容颜色,留空则为系统默认色 itemContentColor: "{{navigate.params.itemContentColor}}", //列表项时间大小,小于1则为系统默认大小 itemDateSize: {{navigate.params.itemDateSize}}, //列表项时间颜色,小于0则为系统默认 itemDateColor: "{{navigate.params.itemDateColor}}", //头像圆角,小于0则为系统默认圆角大小 avatarCornerRadius: {{navigate.params.avatarCornerRadius}}, //列表项背景色,留空则为系统默认色 itemBackgroundColor: "{{navigate.params.itemBackgroundColor}}", //列表项高亮色,留空则为系统默认色 itemStickTopBackgroundColor: "{{navigate.params.itemStickTopBackgroundColor}}" } }, function(success, res) { if (success) { //成功 //在本页面底部显示返回数据 showResult(res); /* contact/selector 选择联系人时返回 { selected_friends: [ "accid1", "accid2" ] } */ } else { alert(JSON.stringify(res)); } });
监听回调数据: