2016-05-14 7 views
0

メッセージが実際に読み取られているにもかかわらず、Quickbloxで読み取られたメッセージに問題があります。Quickblox iOS - メッセージが読み取られない

最新のQuickblox iOS SDKで読んだダイアログのすべてのメッセージを簡単にマークすることはできますか?

答えて

2

Quickbloxは、メッセージクライアントアプリケーションの読み込み状態を維持するためには、それ自身:)に自動的にメッセージの状態を読んで処理しないだけでなく協働するように持っている:)

リードステータスを受信するためにあなたがリードステータスがマーキング可能としてマークする必要があります期待しているため、あなたが送信するすべてのメッセージ:)

ここでは、QBのドキュメント

QBChatMessage *message = [QBChatMessage markableMessage]; 
[message setText:@"Hi there!"]; 
[message setRecipientID:1022725]; 

からのサンプルコードは、そのユーザ1がユーザにそここんにちは送り出すと仮定しています2 :) Uのコードser2のデバイスは、ユーザー2がquickbloxサーバーにメッセージを読んだり、読み取ったことを通知する必要があります。Qbサーバーは、特定のQBChatMessageからQuickbloxサーバーにステータスを通知すると、ユーザー2にユーザー2がメッセージを読んだことを通知する通知を、 :)

を使用してステータスについてQBサーバに通知しなければならないメッセージのユーザー2を受信する

ユーザー2は、リードステータスについてQBサーバに通知した後、QBサーバがどのできる、同じことを認めるユーザー1への通知を送信し
if([message markable]){ 
     [[QBChat instance] readMessage:message completion:^(NSError * _Nullable error) { 

     }]; 
    } 

:)を使用してキャプチャされる

- (void)chatDidReadMessageWithID:(NSString *)messageID dialogID:(NSString *)dialogID readerID:(NSUInteger)readerID 
{ 

} 

一度あなたがそのメッセージの見ステータスを表示するUIを更新することができ、特定のQBChatMessage用リードステータスを受信:)

TIP

を今、あなたは気づいているかもしれないと、ステータスはメッセージごとに動作読みますあなたは

[QBRequest messagesWithDialogID:@"54fda689535c125b0700bbfa" extendedRequest:nil forPage:resPage successBlock:^(QBResponse *response, NSArray *messages, QBResponsePage *responcePage) { 

} errorBlock:^(QBResponse *response) { 
    NSLog(@"error: %@", response.error); 
}]; 

を使用してメッセージの全体の多くを受け取ったときに、これは非常に刺激性と、すべてのメッセージに1つずつ読み取り、ステータスを送信するために、複雑なロジックにつながることができますので、簡単な解決策は以下のとおりです。

むしろあなたは、ユーザがその中にメッセージを表示するには、ダイアログ上でタップしたときにのみメッセージを最後に見たメッセージを送ることができるもので、アレイ1内のすべてのメッセージにリードステータスを送信するよりも:)

ユーザーがチャット画面に入ると、そのダロッグに属するすべてのメッセージが読み込まれたとみなされます(whatsAppを含むすべてのメッセージングアプリケーションがどのように振る舞うか)

最後のメッセージのみに送信ステータスが表示されます:)そして特定のメッセージの表示状態を受信すると、表示された状態は、表示された状態を受信したメッセージよりも少ない送信日時のすべてのメッセージに変更されます。

EDIT

とにかくすべてがあなたは自分の未読メッセージ数が同様にリードステータスに依存する特定のダイアログに属するすべてのメッセージにリードステータスを送信する必要のあるシナリオがあるとされている:)例えば

あなたはこのAPIを利用することができ、すべての100 :)

に見える状態を送信するので、そのadvicableない100から0など、特定のダイアログの未読メッセージ数を更新する場合。あなただけのメッセージIDを送信いけない特定のダイアログに属するすべてのメッセージにリードステータスを設定することができますドキュメントは明確に述べている(と私も私のアプリでそれを使用しています):)

ここでAPIが

curl -X PUT \ 
-H "Content-Type: application/json" \ 
-H "QB-Token: eddf864695d72d33b959eec2ae6c640d817dfada" \ 
-d '{"read": "1", "chat_dialog_id": "53a99a7be4b094c7c6d31b41"}' \ 
https://api.quickblox.com/chat/Message/53aabe15e4b077ddd43e7fd3.json 
ですここ

は、あなたがしなければならないのは、

1にあるドキュメントへのリンク:) http://quickblox.com/developers/Chat#Update_message

です> APIへのWebサービスの呼び出し "https://api.quickblox.com/chat/Message"

0を作ります

お知らせ 53aabe15e4b077ddd43e7fd3は、あなたのメッセージIDです:)あなたが特定のダイアログに属するすべてのメッセージに見える状態を送信する場合はURLに追加していけない:)

2>ヘッダフィールドでのContent-Typeを送信する:アプリケーション/ JSONとQB-トークン:

3をcurrent_user_token>と体に1 =読み、chat_dialog_id = dialog_id送ってください:)それは、このダイアログに属するすべてのメッセージを読んで、それゆえ未読として更新されます

ザッツをダイアログのメッセージ数は0になります。

私はあなたの質問に答え:)

ハッピー:)

コーディングを願っ0
NSURL *url = [NSURL URLWithString:@"https://api.quickblox.com/chat/Message"]; 
NSMutableURLRequest *mutableRequest=[NSMutableURLRequest requestWithURL:url]; 
[mutableRequest setHTTPMethod:@"PUT"]; 
[mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[mutableRequest setValue:[QBSession currentSession].sessionDetails.token forHTTPHeaderField:@"QB-Token"]; 
NSString *jsonString=[NSString stringWithFormat:@"{\"read\": \"1\", \"chat_dialog_id\": \"%@\"}",dialogToSendReadStatus.id]; 
[mutableRequest setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]]; 
NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *uploadTask = [session dataTaskWithRequest:mutableRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    if(error){ 
      DLog(@"Error"); 
    } 
    else{ 
     DLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 
    } 
}]; 
[uploadTask resume]; 

関連する問題