Я пытаюсь интегрировать чат SendBird SDK с Rubymotion (через его CocoaPod).SendBird chat SDK Rubymotion integration
Начальные шаги работают нормально, и я смог добавить pod в мой Rakefile (используя motion-cocoapods) и скомпилировать без проблем, войти в систему и создать канал обмена сообщениями. Однако обработчик событий меня насторожил.
Эти шаги, я смог перевести из SendBird документы:
Initialize в приложение делегата
SendBird Objective C:
#import <SendBirdSDK/SendBirdSDK.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ...
NSString *APP_ID = @"<YOUR_APP_ID>"; // You could get it from SendBird Dashboard.
[SendBird initAppId:APP_ID];
// ...
return YES;
}
Rubymotion:
APP_ID = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
SendBird.initAppId(APP_ID)
Войти в SendBird при подписании в/регистрации в мое приложение
SendBird Objective C:
- (void)viewDidLoad
{
// other setup code
[SendBird loginWithUserId:USER_ID andUserName:USER_NICKNAME];
}
Rubymotion:
(I хранится информация о пользователях в Auth.current_user хэша после входа в)
SendBird.loginWithUserId(Auth.current_user["id"],andUserName:Auth.current_user["name"])
Создание канала обмена сообщениями и настройка обработчика событий
SendBird Objective C:
[SendBird startMessagingWithUserId:targetUserId]; // 1 on 1 channel
// In your event handler
[SendBird setEventHandlerConnectBlock:^(SendBirdChannel *channel) {
// Callback for [SendBird connectWithTS:] or [SendBird connect:]
} errorBlock:^(NSInteger code) {
// Error occured due to bad APP_ID (or other unknown reason)
} channelLeftBlock:^(SendBirdChannel *channel) {
// Callback for [SendBird leaveChannel:]
} messageReceivedBlock:^(SendBirdMessage *message) {
// Received a regular chat message
} fileReceivedBlock:^(SendBirdFileLink *fileLink) {
// Received a file
} messagingStartedBlock:^(SendBirdMessagingChannel *channel) {
// Callback for [SendBird startMessagingWithUserId:] or [SendBird inviteMessagingWithChannelUrl:]
} messagingUpdatedBlock:^(SendBirdMessagingChannel *channel) {
// Callback for [SendBird inviteMessagingWithChannelUrl:]
} messagingEndedBlock:^(SendBirdMessagingChannel *channel) {
// Callback for [SendBird endMessagingWithChannelUrl:]
} allMessagingEndedBlock:^ {
// Callback for [SendBird endAllMessaging:]
} readReceivedBlock:^(SendBirdReadStatus *status) {
// When ReadStatus has been received
} messageDeliveryBlock:^(BOOL send, NSString *message, NSString *data, NSString *tempId{
// To determine the message has been successfully sent.
} mutedMessagesReceivedBlock:^(SendBirdMessage *message) {
// When soft-muted messages have been received
} mutedFileReceivedBlock:^(SendBirdFileLink *message) {
// When soft-muted files have been received
}];
Rubymotion:
Здесь я попасть в беду. Я могу создать канал обмена сообщениями, но я не знаю, как написать этот обработчик событий Objective-C в Rubymotion. Онлайн-переводчик на http://objc2rubymotion.herokuapp.com/ терпит неудачу из-за синтаксиса^и *. Любая помощь приветствуется.
SendBird.startMessagingWithUserId(id_of_target_user)
#Event Handler
EDIT:
Друг, который знает больше Rubymotion, чем я указал мне в правильном направлении, и теперь у меня есть следующий обработчик события:
SendBird.startMessagingWithUserId(2)
SendBird.setEventHandlerConnectBlock(
-> (channel) {
# handle connect
},
messagingStartedBlock: -> (channel) {
mp "channel created:" + channel.to_s
})
Однако это терпит неудачу с NoMethodError:
2016-08-03 19:48:58.711 faces_ios_v1[75673:798798] chat_screen.rb:24:in `on_load': undefined method `setEventHandlerConnectBlock:messagingStartedBlock:' for SendBird:Class (NoMethodError)
from screen_module.rb:39:in `view_did_load'
from view_controller.rb:15:in `viewDidLoad'
2016-08-03 19:48:58.723 faces_ios_v1[75673:798798] *** Terminating app due to uncaught exception 'NoMethodError', reason: 'chat_screen.rb:24:in `on_load': undefined method `setEventHandlerConnectBlock:messagingStartedBlock:' for SendBird:Class (NoMethodError)
from screen_module.rb:39:in `view_did_load'
from view_controller.rb:15:in `viewDidLoad'
I е я не включаю messagingStartedBlock
в обработчике событий я получаю следующее сообщение об ошибке:
2016-08-03 19:35:20.120 faces_ios_v1[74958:793380] chat_screen.rb:14:in `on_load': undefined method `setEventHandlerConnectBlock' for SendBird:Class (NoMethodError)
from screen_module.rb:39:in `view_did_load'
from view_controller.rb:15:in `viewDidLoad'
2016-08-03 19:35:20.132 faces_ios_v1[74958:793380] *** Terminating app due to uncaught exception 'NoMethodError', reason: 'chat_screen.rb:14:in `on_load': undefined method `setEventHandlerConnectBlock' for SendBird:Class (NoMethodError)
from screen_module.rb:39:in `view_did_load'
from view_controller.rb:15:in `viewDidLoad'
Это не имеет никакого смысла, так как setEventHandlerConnectBlock
должны четко представлять собой метод класса SendBird.
Соответствующая документация SendBird SDK можно найти здесь:
https://docs.sendbird.com/ios#messaging_channel