2016-10-19 12 views
1

私はQuickBlox-iOS SDKをチャットに使用しています。ログイン/サインアップは完全に機能しています。また、私はchatDidReceiveMessageメソッドが呼び出されていないQuickBlox

- (void)chatDidReceiveMessage:(QBChatMessage *)message;

メッセージを送信することができていますが、デリゲートメソッドと呼ば取得されていません。チャットをセットアップするために使用しているコードは次のとおりです。 appDelegateに次のコードを追加:

// connect to Chat 
    [[QBChat instance] addDelegate:self]; 

    QBUUser *currentUser = [QBUUser user]; 
    currentUser.ID = [Global sharedInstance].currentUser.ID; 
    currentUser.password = @"password"; 
    [[QBChat instance] connectWithUser:currentUser completion:^(NSError * _Nullable error) { 
     NSLog(@"connect to chat error %@",error); 
    }]; 

そして、私がメッセージを送信するために使用しています以下のコード:

QBChatMessage *message = [QBChatMessage message]; 
message.recipientID=[Global sharedInstance].QBUserID; 
      message.senderID=[Global sharedInstance].currentUser.ID; 
      [message setText:messageTextView.text]; 

      message.dateSent = [NSDate date]; 
      NSMutableDictionary *params = [NSMutableDictionary dictionary]; 
      params[@"save_to_history"] = @YES; 
      [message setCustomParameters:params]; 
      [QBRequest createMessage:message successBlock:^(QBResponse *response, QBChatMessage *createdMessage) { 
       NSLog(@"success: %@", createdMessage); 
      } errorBlock:^(QBResponse *response) { 
       NSLog(@"ERROR: %@", response.error); 
      }] 

私はQuickBloxダッシュボード上で確認。送受信されたすべてのメッセージを表示します。しかし、私は別のユーザーにメッセージを送信するときに代理人が呼び出されていません。私は、彼らのExample Projectで使用しているような追加サービスクラス(QMServices)を使用していません。どんな助けもありがとう。ありがとう

答えて

3

[QBRequest createMessage:successBlock:errorBlock:]メソッドを使用して別のユーザーにメッセージを送信する理由を理解できません。あなたがサーバー上でダイアログを作成するために、Quickbloxメソッドを呼び出すことができ、

QBChatDialog *dialog = [[QBChatDialog alloc] initWithDialogID:nil 
                 type: QBChatDialogTypePrivate]; 
dialog.occupantIDs = @[@([Global instance].QBUserID), 
         @([Global instance].currentUser.user.ID)]; 

をその後:常に働いていたものを私のために

はそうのように、あなたがメッセージにしようとしているユーザーとchatDialogを作成することでした

if (dialog.ID == nil) { 
    [QBRequest createDialog:dialog successBlock:^(QBResponse *response, QBChatDialog *createdDialog) { 

     [self sendMessageToDialog: dialog withText:@"Hello friend!"]; 

    } errorBlock:^(QBResponse *response) { 
     NSLog(@"dialog creation err: %@", response); 
    }]; 
} 

メッセージを作成します。

- (QBChatMessage *) createMessageWithText: (NSString *)text andDialog: (QBChatDialog*)dialog { 
    QBChatMessage *message = [QBChatMessage message]; 
    message.text = text; 
    message.senderID = [Global instance].currentUser.ID; 
    message.markable = YES; 
    message.deliveredIDs = @[@([Global instance].currentUser.ID)]; 
    message.readIDs = @[@([Global instance].currentUser.ID)]; 
    message.dialogID = dialog.ID; 
    message.dateSent = [NSDate date]; 
    message.recipientID = dialog.recipientID; 
    message.customParameters = [NSMutableDictionary dictionary]; 

    message.customParameters[kQMCustomParameterDialogID] = dialog.ID; 
    message.customParameters[kQMCustomParameterDialogType] = [NSString stringWithFormat:@"%lu",(unsigned long)dialog.type]; 
    message.customParameters[@"application_id"] = @"<your-application-id>"; 
    message.customParameters[@"save_to_history"] = @"1"; 

    if (dialog.lastMessageDate != nil){ 
     NSNumber *lastMessageDate = @((NSUInteger)[dialog.lastMessageDate timeIntervalSince1970]); 
     message.customParameters[kQMCustomParameterDialogRoomLastMessageDate] = [lastMessageDate stringValue]; 
    } 
    if (dialog.updatedAt != nil) { 
     NSNumber *updatedAt = @((NSUInteger)[dialog.updatedAt timeIntervalSince1970]); 
     message.customParameters[kQMCustomParameterDialogRoomUpdatedDate] = [updatedAt stringValue]; 
    } 

    return message; 
} 

をそしてにメッセージを送信ダイアログ:

- (void) sendMessageToDialog: (QBChatDialog *)dialog withText: (NSString *)text { 

    QBChatMessage *message = [[ChatService shared] createMessageWithText:text andDialog:self.dialog]; 

    [dialog sendMessage:message completionBlock:^(NSError * _Nullable error) { 
     if (error != nil) { 
      NSLog(@"error creating message %@", error); 
     } else { 
      NSLog(@"message sent!"); 
     } 
    }]; 
} 

私はデリゲートを通してコールバックを受け取ることができると思います。

EDIT - 私は上記のコードで使用constsを言及するのを忘れては以下のとおりです。

NSString const *kQMCustomParameterDialogID = @"dialog_id"; 
NSString const *kQMCustomParameterDialogRoomName = @"room_name"; 
NSString const *kQMCustomParameterDialogRoomPhoto = @"room_photo"; 
NSString const *kQMCustomParameterDialogRoomLastMessageDate = @"room_last_message_date"; 
NSString const *kQMCustomParameterDialogUpdatedDate = @"dialog_updated_date"; 
NSString const *kQMCustomParameterDialogType = @"type"; 
NSString const *kQMCustomParameterDialogRoomUpdatedDate = @"room_updated_date"; 
+0

答えをありがとう。 'kQMCustomParameterDialogID'、' kQMCustomParameterDialogRoomUpdatedDate'、 'kQMCustomParameterDialogRoomLastMessageDate'、' kQMCustomParameterDialogType'とは何ですか? –

+0

ありがとうございます。デリゲートが呼び出されています。メッセージはダッシュボードの履歴に保存されません。最後のメッセージに表示されます。しかし、ビュー履歴をクリックすると。メッセージは表示されません。私は自分のアプリでユーザーのコアデータを必要としませんでした。 –

+0

@SushilSharmaヒストリを制御する変数はカスタムパラメータ 'save_to_history'です。この例では、そこに配置します。カスタムパラメータを消去しましたか? – gaskbr

0

<QBChatDelegate>を.hファイルに追加しましたか?

+0

はい、私は実装クラスでそれを追加しました。 –

+0

Bro、このリンクをチェック:http://stackoverflow.com/questions/33697942/voidchatdidreceivemessageqbchatmessage-message-not-working –

+0

返信いただきありがとうございます。私は答えに与えられた方法を試しました。しかしそれはうまくいかなかった。 'sendMessage'メソッドを使って、私はメッセージを送ることさえできません。 –

関連する問題