3

私はiPhone用のxmppクライアントを開発しています。メッセージを送受信できます。ユーザーにプロンプ​​トを表示せずに、バディリクエストを自動的に受け入れたい。どの機能でリクエストを受け取りますか。ヒントを教えてください。

前もって感謝します。

4

3 に答える 3

7

わかりました、私はあなたに完璧な答えを持っています!

コードは次のとおりです。

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {

    // a buddy went offline/online

    NSString *presenceType = [presence type];            // online/offline
    NSString *myUsername = [[sender myJID] user];
    NSString *presenceFromUser = [[presence from] user];

    if (![presenceFromUser isEqualToString:myUsername]) {

        if ([presenceType isEqualToString:@"available"]) {

            [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]];
               NSLog(@"presence user is %@",presenceFromUser);

        } 

        else if  ([presenceType isEqualToString:@"unavailable"]) {

            [_chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]];
            NSLog(@"presence user is invisible %@",presenceFromUser);

        }
        else if  ([presenceType isEqualToString:@"subscribe"]) {

            [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]];
                        NSLog(@"presence user wants to subscribe %@",presenceFromUser);

        }

    }
}

理解を深めるために、DidReceivePresence メソッドの完全なコードを提供しました。

それでは、コードで説明しましょう。else if 条件で気付いた場合は、受け取った値 (要素) を比較しています。そのため、サブスクライブとして文字列を取得したとき (ユーザーが友達リクエストを送信したとき)、その特定のユーザーをテーブルビューの仲間リストに追加するだけです。

「presenceFromUser」からユーザー名を取得できます。

これ以上理解が必要な場合は、blueobaid@gmail.com にメールしてください。私の回答に返信してもアラートが届かないためです。ただし、他の人にも役立つように、ここに戻って返信します。すぐにhttp://Czartechnogeeks.com/iSolutionsにチュートリアルを掲載する予定です。

ユーザーにとって価値のあるものをstackoverflowで共有できて、とても助かりました。

于 2012-05-23T06:06:02.433 に答える
4

別の関数でリクエストを受け取ることはありません。バディがオンラインになるか、リクエストを送信するたびに、didReceivePresence デリゲート関数が呼び出されます。プレゼンス タイプ = サブスクリプションを取得した場合、それはバディ リクエストです。これがお役に立てば幸いです。

于 2012-03-14T16:24:04.913 に答える
2

関数didReceivePresenceでサブスクリプションを受け取ります。

サブスクリプションを受け入れるには、次のコードを使用できます。

  NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];
  [presence addAttributeWithName:@"type" stringValue:@"subscribed"];
  [presence addAttributeWithName:@"to" stringValue:[presence fromStr]];
  [presence addAttributeWithName:@"from" stringValue:@"you@host"];
  [[self xmppStream] sendElement:presence];

役に立ちますように:)

于 2012-08-01T03:39:48.183 に答える