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
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 UIApplicationDidEnterBackgroundNotification
và UIApplicationWillEnterForegroundNotification
). 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];
}];
}
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
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
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
Ứ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
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:
nhưng quả táo từ chối theo cách này ...... – Raju
- 1. VOIP sử dụng XMPP Framework trong iPhone
- 2. XMPP framework - Ứng dụng dựa trên vị trí được kết nối trong nền
- 3. Cách tạo ứng dụng Cocoa chạy nền?
- 4. Dừng ứng dụng chạy trong nền?
- 5. Rails + XMPP bot ở chế độ nền
- 6. ứng dụng trò chuyện: pubsubhubbub vs xmpp
- 7. Ứng dụng iPhone nên đóng, không chuyển đến nền
- 8. Thư viện XMPP cho iOS (iPhone/iPad)
- 9. làm thế nào để chạy ứng dụng của tôi trong nền trong iphone?
- 10. Cách chạy một quá trình 30 giây trong nền sau mỗi giờ (ứng dụng iphone)
- 11. Làm thế nào tôi có thể chạy ổ cắm UDP trong nền trong ứng dụng iPhone?
- 12. AudioQueueStart không thành công khi ứng dụng iphone chạy trong nền iOS4.0
- 13. Thực tiễn tốt nhất - Chế độ ứng dụng nền iPhone
- 14. Ứng dụng khách Android Jabber (XMPP)
- 15. Sử dụng XMPP để gửi thông tin thời gian thực-ish để chạy ứng dụng iOS
- 16. Lặp lại hình nền trong ứng dụng iPhone gốc
- 17. đặt hình nền cho toàn bộ ứng dụng iPhone/iPad
- 18. đặt nền trong suốt cho UILabel cho ứng dụng iphone
- 19. Ứng dụng iPhone trên iPhone vào Android
- 20. để chạy ứng dụng liên tục trong nền
- 21. Làm thế nào để chạy ứng dụng android trong nền
- 22. giữ ứng dụng đang chạy ở chế độ nền
- 23. Ứng dụng đang chạy ở chế độ nền
- 24. Cách lấy tên của ứng dụng chạy nền
- 25. Chạy ứng dụng Java console làm daemon (nền)
- 26. Làm thế nào để chạy ứng dụng J2ME trong nền?
- 27. Khởi chạy ứng dụng iPhone từ liên kết trong email
- 28. Chạy ứng dụng IPhone khi đang ở chế độ ngủ
- 29. Thư viện ứng dụng Python Jabber/XMPP cho Twisted
- 30. cách chạy ứng dụng android phonegap ở chế độ nền (sau khi đóng ứng dụng)?
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
kiểm soát sẽ không phải là "socketWillConnect: (AsyncSocket *) socket" phương pháp. Vui lòng giúp đỡ – iphonedev23
Đ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) –