2014-02-18 31 views
1

我覺得冠軍是說明就夠了,但這裏的故事:XMPPFramework - 自動接受狀態訂閱的請求

我是新來XMPPFramework爲iOS和我想設置我的客戶端自動接受任何預訂請求它收到。以便其他客戶可以在他們請求時看到此客戶的在線狀態。

根據開發者的意見在XMPPRoster.h文件,有這種方法中,接收訂閱請求時被調用:

/** 
* Sent when a presence subscription request is received. 
* That is, another user has added you to their roster, 
* and is requesting permission to receive presence broadcasts that you send. 
* 
* The entire presence packet is provided for proper extensibility. 
* You can use [presence from] to get the JID of the user who sent the request. 
* 
* The methods acceptPresenceSubscriptionRequestFrom: and rejectPresenceSubscriptionRequestFrom: can 
* be used to respond to the request. 
**/ 
- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence; 

但它不是在XMPPRoster.m實現。所以我實現它如下:

- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence 
{ 
    [self acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES]; 
} 

由於我是新來XMPPFramework我不知道如果我做錯了什麼,但我還是不能讓該客戶在其他客戶端存在。

我也看過類似的主題,如Accept buddy request in xmpp client iphoneXmpp Accepting buddy request,但解決方案似乎甚至沒有關聯!

任何建議真的很感激。 謝謝。

+0

你試過用'revokePresencePermissionFromUser'嗎? –

+0

不!我應該嗎?我應該怎麼做?我是新來的XMPPFramework –

+0

而不是acceptPresence只是嘗試revokePresencePermissionFromUser,看看它是否工作 –

回答

2

你做錯了。您不必在XMPPRoster.m或其他庫文件中實現某些內容。 此功能

- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence; 

是當你的XMPP客戶端接收存在訂閱請求發射回調。如果你想在這個回調觸發時執行一些代碼,你必須實現一個名爲XMPPRosterDelegate的協議。 Protocol是Java和C#中的接口或類似於C++中的抽象類的功能。你必須有一個繼承自這個XMPPRosterDelegate的類,並最終實現這個功能(和其他功能,如果你想的話)。

如果要自動接受,你必須實現你的協議功能的實現這樣所有的請求:

-(void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence{ 
    [sender acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES]; 
} 

而且名冊對象才知道誰是它的委託(誰實現XMPPRosterDelegate的對象),因爲如果你想要向某人發送一條消息,你必須知道兩件事:目標和選擇器。選擇器在協議中指定。目標是delegate屬性。您必須在其初始化期間設置名單的委託。在我的代碼添加的行

[xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()]; 

前行

[xmppRoster   activate:xmppStream]; 

當然self都實現XMPPRosterDelegate,特別是有這樣一段代碼

-(void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence{ 
    [sender acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES]; 
} 

祝你好運,遺憾的長期職位。