2011-03-10 38 views
8

Tôi đã tạo một ứng dụng trò chuyện bằng cách sử dụng khung XMPP .. khi tôi thoát ứng dụng (nhập chế độ nền) Tôi muốn nhận tin nhắn trò chuyện..và cũng cần hiển thị biểu tượng huy hiệu ... Làm thế nào có thể Tôi làm việc này?iphone XMPP Ứng dụng chạy nền

Trả lời

11

Bạn thực sự có thể chạy một ứng dụng XMPP Khung dựa trên nền iOS4 bằng cách gọi nó là một ứng dụng VoIP. (Tuy nhiên, Apple sẽ từ chối nó từ App Store trừ khi nó cũng thực sự VoIP).

Bạn cần phải đặt cờ VoIP trong ứng dụng của bạn (appname) tập tin -info.plist, và sau đó trong

(void)xmppStream:(XMPPStream *)sender socketWillConnect:(AsyncSocket *)socket 

Bạn sẽ cần phải thiết lập các cờ dòng ổ cắm để bao gồm kCFStreamNetworkServiceTypeVoIP:

CFReadStreamSetProperty([socket getCFReadStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 
CFWriteStreamSetProperty([socket getCFWriteStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 

Sau đó, ứng dụng của bạn sẽ được đánh thức nhanh khi có thông báo XMPP mới. Trong bình thường handler

(void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message 

bạn, bạn sẽ muốn tạo một thông báo địa phương để thông báo nếu bạn đang backgrounded (bạn có thể theo dõi tình trạng nền qua UIApplicationDidEnterBackgroundNotificationUIApplicationWillEnterForegroundNotification). Trình xử lý thông báo cục bộ có thể đặt số hiệu huy hiệu ứng dụng, v.v. (giống như bạn sẽ gửi thông báo đẩy).

EDIT

Mới hơn phiên bản của Khung XMPP (đặc biệt là GCDAsyncSocket) bây giờ hỗ trợ một cuộc gọi để đảm này dễ dàng hơn, vì vậy bạn chỉ có thể có:

- (void)xmppStream:(XMPPStream *)sender socketWillConnect:(GCDAsyncSocket *)socket 
{ 
    // Tell the socket to stay around if the app goes to the background (only works on apps with the VoIP background flag set) 
    [socket performBlock:^{ 
      [socket enableBackgroundingOnSocket]; 
    }]; 
} 
+0

cảm ơn bạn Jeff, Điều này làm việc tốt cho tôi .. cảm ơn rất nhiều :-) – Raj

+0

kiểm soát sẽ không phải là "socketWillConnect: (AsyncSocket *) socket" phương pháp. Vui lòng giúp đỡ – iphonedev23

+0

Điều khiển nên đi đến socketWillConnect: miễn là bạn đã gọi addDelegate: trên đối tượng XMPPStream của bạn. Lưu ý rằng socketWillConenct: call bây giờ đang mong đợi một tham số GCDAsyncSocket * thay vì AsyncSocket * (như của XMPPFramework 3) –

6

Có một số chương trình giới hạn có thể chạy ẩn mà không có giới hạn, đây là các chương trình VOIP, chương trình phát nhạc và những chương trình theo dõi vị trí của người dùng. Nếu bạn không thực hiện bất kỳ điều nào trong số này một cách hợp pháp thì bạn bị giới hạn trong mười phút hoạt động nền. Lưu ý rằng Apple sẽ từ chối các ứng dụng thử các thủ thuật ngớ ngẩn như chơi âm thanh 'trống' để giữ cho ứng dụng hoạt động.

Bạn có thể tìm thông tin về các tác vụ đang chạy trong nền ở đây: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

tùy chọn khác của bạn tôi sẽ đoán là phải có các chương trình chat hoạt động bằng cách liên hệ một máy chủ, và để có mà phản ứng máy chủ hàng đợi khi người dùng đang ngoại tuyến rồi phân phối chúng khi họ đăng nhập lần tiếp theo. Không phải là một lập trình viên bản thân mình tôi không biết làm thế nào khả thi này là, nhưng tôi nghĩ rằng đó là cách duy nhất để làm điều này vô thời hạn nếu bạn chỉ cung cấp trò chuyện văn bản. Lựa chọn tốt hơn là làm cho ứng dụng VOIP của bạn được bật bằng hướng dẫn ở trên.

EDIT Kể từ ngày phát hành iOS 5.0, bạn cũng có thể đăng ký ứng dụng Newsstand dưới dạng ứng dụng Newsstand để tải xuống, cùng với nhiều tính năng thú vị khác cũng chỉ có Newsstand.

-Ash

+0

trước hết cảm ơn bạn cho bạn replay..i không muốn đẩy ứng dụng này để appstore.using tệp IPA để phân phối..i đọc liên kết bạn đã cung cấp và thêm VOIP trong info.plist..cần thêm bất kỳ thay đổi nào trong mã..bử dụng nó vẫn không hoạt động trong backkground .. – Raj

+0

Tôi nghĩ bạn đã đọc lướt qua tài liệu tôi chỉ cho bạn; bạn cần phải làm nhiều hơn là chỉ cần thêm VOIP vào info.plist để làm cho nó hoạt động. Nhìn xa hơn trang dưới "Thực hiện một ứng dụng VOIP" – Ash

+0

Ứng dụng của tôi được đặt làm ứng dụng dựa trên Vị trí, nhưng sau 3 giờ trong nền, nó ngắt kết nối khỏi máy chủ XMPP của tôi. Bên cạnh việc thiết lập info.plist như là vị trí có cái gì khác để thiết lập trong xmppframework để nó không bao giờ ngắt kết nối? – subharb

5

Trong khung XMPP mới nhất bạn không cần sửa đổi các tệp khuôn khổ.

Chỉ cần thực hiện việc này: 1.Thêm phần này vào phương pháp kết nối của bạn

#if !TARGET_IPHONE_SIMULATOR 
{ 
    self.xmppStream.enableBackgroundingOnSocket = YES; 
} 
#endif 

2. Add key voip đến file plist thông tin của bạn:

enter image description here

+2

nhưng quả táo từ chối theo cách này ...... – Raju

Các vấn đề liên quan