- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试创建一个带有封面照片的群组 channel ,
this.sendBirdInstance.GroupChannel.createChannelWithUserIds(userIds, true, this.groupName, this.groupPhotoFile, '', function (createdChannel, error) {
...
}
根据文档,我可以添加一个 url 或一个文件
coverUrl : the file or URL of the cover image, which you can fetch to render into the UI.
但是在添加文件时,我总是得到:"SendBirdException", code: 800110, message: "Invalid arguments."
有没有办法用文件而不是 url 创建一个组(因为我希望用户上传文件)?
谢谢,
最佳答案
正如您已经体验过的(几天前我看到您创建了一个 issue in GitHub),SendBird 的支持有点不可靠。
他们提供的事实 just a minified version他们的 JavaScript SDK(我个人觉得它很差)对两者都有帮助。
无论如何,我可以隔离createChannelWithUserIds
函数:
! function (e, n) {
// ...
}(this, function () {
// ...
var h = function (e) {
for (var n in e) if (e.hasOwnProperty(n)) return !1;
return Array.isArray(e) ? JSON.stringify(e) === JSON.stringify([]) : JSON.stringify(e) === JSON.stringify({})
},
// ...
A = function () { // it returns SendBird function
// ...
var w = function (e) { // w is this.GroupChannel
// ...
w.createChannelWithUserIds = function () {
// ...
// here comes the param validation (I've added spaces for a better lecture):
if (!Array.isArray(e) || "boolean" != typeof n || "string" != typeof t && null !== t && void 0 !== t || "string" != typeof r && h(r) && null !== r && void 0 !== r || "string" != typeof a && null !== a && void 0 !== a || "string" != typeof i && null !== i && void 0 !== i) return void U(null, new p("Invalid arguments.", J.INVALID_PARAMETER), s);
// It will return "Invalid arguments." if any of the conditions evaluates to true
// ...
}
}
}
return function () {
// ...
}().SendBird
});
你正在使用这样的功能:
createChannelWithUserIds(o, n, t, r, a, s);
所以第四个参数(r
)就是coverURL
:封面图片的文件(this.groupPhotoFile
);
它的验证基本上是说:
"string" != typeof r // if `r` is not a string (a URL)
&& h(r) // and the returned value of function h(r) is true
&& null !== r // and it is not null
&& void 0 !== r // and it is not undefined
该参数无效。
您的文件不是字符串,不是 null 也不是未定义的,所以一切都归结为 h()
函数:
var h = function (e) {
for (var n in e) if (e.hasOwnProperty(n)) return !1;
return Array.isArray(e) ? JSON.stringify(e) === JSON.stringify([]) : JSON.stringify(e) === JSON.stringify({})
}
上面的函数首先检查对象是否有任何属性是对象本身的成员(即不属于原型(prototype)链的属性)。然后,如果它没有任何自己的属性,它会检查 stringify 对象/数组是否等于空对象/数组。
我不能说开发人员在通过这个函数验证文件时的意图是什么,但是一个标准的 FILE 对象:
true
。true
。如前所述,我们需要 h()
返回 false
:如果返回 true
,则验证失败。
要修复此行为,您可以将 h()
函数更改为如下内容:
var h = function( e ){
return !(e instanceof File);
// or return e.constructor != File;
// or return Object.getPrototypeOf( e ) != File.prototype );
// or return e.__proto__ != File.prototype )
// or return e.constructor.prototype != File.prototype )
}
但我不会惹事的。它可以在未来的版本中用于不同的目的。
所以最好的办法是将 createChannelWithUserIds()
函数更改为:
h()
函数的调用。为此,您可以覆盖 SendBird 实例中的函数:
var sb = new SendBird( { appId: ... } );
sb.GroupChannel.createChannelWithUserIds = function(){ ... };
但它不能保证工作并且可能会在未来的版本中中断,所以我只编辑 SendBird.min.js 文件。换句话说,替换:
if(!Array.isArray(e)||"boolean"!=typeof n||"string"!=typeof t&&null!==t&&void 0!==t||"string"!=typeof r&&h(r)&&null!==r&&void 0!==r||"string"!=typeof a&&null!==a&&void 0!==a||"string"!=typeof i&&null!==i&&void 0!==i)return void U(null,new p("Invalid arguments.",J.INVALID_PARAMETER),s);
与:
if(!Array.isArray(e)||"boolean"!=typeof n||"string"!=typeof t&&null!==t&&void 0!==t||"string"!=typeof a&&null!==a&&void 0!==a||"string"!=typeof i&&null!==i&&void 0!==i)return void U(null,new p("Invalid arguments.",J.INVALID_PARAMETER),s);
在当前版本(v3.0.41)中,您会发现上述代码有两个巧合:一个是createChannel
,另一个是createChannelWithUserIds
,您可以将两者替换。
当然,编辑 .js 文件很烦人,因为每次升级 SendGrid 时都需要注意替换代码。你可以在你的 CI 管道中创建一个自动任务来为你做这件事,我想。
希望 SendGrid 开发人员能够确认您的问题并在未来的版本中修复它。
关于javascript - SendBird 以文件为封面创建 GroupChannel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036724/
我正在 Xamarin.iOS 应用程序上实现 Sendbird,并且我已经在 OnMessageReceived 处理程序上接收消息。 但是我无法接收推送通知,GetPendingPushToken
我在 5 分钟后收到错误描述。这是因为 sendbird sdk 自动重新连接。那么,有没有办法停止自动连接或减少错误消息到达时间。 这是我尝试过的, let preSendMessage = ch
我只是遇到了 SendBird 问题。当我发送消息时,SendBird回调到onMessagingChannelUpdated,但是当我发送文件时,回调不起作用。 我已经为 SendBird Regi
我正在使用 Sendbird 构建聊天应用程序和 cordova,但是他们似乎为所有平台提供了推送通知的 api,来自 Javascript 的平台除外。 .他们有 Android 的推送通知, io
我正在尝试创建一个带有封面照片的群组 channel , this.sendBirdInstance.GroupChannel.createChannelWithUserIds(userIds, tr
总是在我尝试加入群组 channel 时出现此错误 code: 800101 message: "Connection should be made first." name: "SendBirdEx
有没有办法使用 SendBird API 列出特定应用程序中所有可用的开放 channel /组。我能够找到创建 channel 和删除 channel 的功能,但没有列出特定应用中的所有可用 cha
我已经按照文档进行操作并成功注册了 Sendbird 的推送通知(上传的 .p12 开发证书 + 使用 Sendbird SDK 注册设备 token 等),但没有收到任何通知。 func appli
当我发送新消息时,它会转到所有不同的组 channel ,默认情况下不应该是这样的。任何建议表示赞赏。 对于消息传递部分,我必须使用数组来存储以前和新的消息并在需要时加载它。 使用的语言是 react
我正在尝试使用 SendBirdSDK 创建一个聊天应用程序.但是我在文档中找不到任何方法来开始与用户聊天。我下载了示例项目并检查了它,但它只包含组 channel 和开放 channel 。 是否有
我们正在制作一款具有聊天功能的应用,我们正在使用 SendBird Android SDK 来实现这一目标。 当用户登录时,我们向 SendBird 查询该用户的 GroupChannels,这将返回
我正在尝试从 sendbird 消息中获取字符串格式的消息发送日期,但不知道如何反序列化消息。 目前我得到的是一堆乱七八糟的数字,如下所示: 1506267806611 我目前将序列化日期存储在下面的
我正在尝试使用 SendBird API 为演示创建一个简单的聊天,但我似乎无法让 Channel Handler 正常工作。我不知道我应该把它放在哪里,但似乎我尝试的任何地方都不起作用。任何帮助将不
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我刚刚开始在 Android 上使用 SendBird。我想进行一对一聊天,因此我将用户连接到 SendBird,设置处理程序,创建 channel 并发送消息,但是 onMessageReceive
我在我的项目中使用 Sendbird android SDK(https://docs.sendbird.com/android)。它的库托管在 GitHub 上,问题是每次我在 gradle 中更改
当我尝试从该方法加载 Sendbird SDK 中的群组 channel 时,出现以下错误: self.groupChannelListQuery?.loadNextPage(completionHa
我正在使用 SendBird 向我的应用添加发送图片功能。 在 - (void)imagePickerController:(UIImagePickerController *)picker didF
我正在尝试使用 sendbird iOS SDK 对用户进行身份验证。 语法如下: SBDMain.connect(withUserId: "123456", completionHandler: {
我正在按照 sendbird 的教程使用 react-native 构建聊天应用程序,当我尝试导入 sendbird sdk 时出现以下错误: Unable to resolve module htt
我是一名优秀的程序员,十分优秀!