2011-12-20 18 views
6

Tôi đang phát triển một ứng dụng iOS. Có các 'khu vực' khác nhau đối với ứng dụng và người dùng có thể đăng 'những thứ' cho họ. Những người dùng khác đang xem cùng một khu vực phải có nội dung được gửi tới điện thoại của họ (nhưng chỉ khi ứng dụng đang chạy).Sử dụng XMPP để gửi thông tin thời gian thực-ish để chạy ứng dụng iOS

Tôi đã bắt đầu làm việc trên một phụ trợ Django với API RESTful. Tôi có kế hoạch lưu trữ backend trên Amazon Web Services, và mỗi lần một thứ gì đó được thêm vào một 'khu vực', đặt thời gian cập nhật và 'khu vực' vào hàng đợi, sử dụng Amazon Simple Queue Service. Tôi sẽ tạo ứng dụng Python xử lý các mục trong hàng đợi, truy vấn cơ sở dữ liệu để xem người dùng nào có 'thứ' mới mà họ có thể tải xuống - hiện tại phần này được lên kế hoạch để gửi Apple Push Notification tới điện thoại và nếu ứng dụng đang chạy nó có thể thực hiện một yêu cầu RESTful đơn giản để lấy dữ liệu mới ở định dạng JSON.

Tuy nhiên tôi tin rằng XMPP sẽ là giải pháp tốt hơn (sử dụng XMPPFramework ở phía iOS) và sẽ làm cho nó có thể hỗ trợ Android trong tương lai.


Tôi đã thực hiện rất nhiều nghiên cứu về cách sử dụng XMPP cho mục đích này, nhưng tài liệu cho thấy bạn sẽ sử dụng mạng XMPP công khai, người dùng sẽ phải thiết lập tài khoản XMPP và không rõ cách gửi thông tin không phải trò chuyện.

Dự án này yêu cầu sử dụng XMPP hoàn toàn để gửi thông tin từ máy chủ đến thiết bị của người dùng. Vì vậy nó phải là một mạng XMPP tư nhân, nếu người dùng cần thiết có thể được đăng ký một tài khoản XMPP trên mạng riêng này (nhưng đằng sau hậu trường, họ nên không biết những gì công nghệ được cung cấp năng lượng ứng dụng.)


Có thể sử dụng XMPP chỉ để gửi thông tin đến ứng dụng dành cho thiết bị di động không? Rất nhiều câu trả lời/hướng dẫn trên internet về cơ bản chỉ đề xuất sử dụng máy chủ XMPP và ứng dụng khách - không đề cập đến cách bạn có thể kết nối hai mạng trên một mạng riêng để gửi dữ liệu được xác định bởi máy chủ XMPP.

Cảm ơn sự giúp đỡ của bạn trước :)

Trả lời

15

Có, có thể. Hơn thế nữa, bạn hoàn toàn có thể gửi và nhận bất cứ thứ gì bạn muốn thông qua XMPP.

Nói chung XMPP được sử dụng cho các tài khoản trò chuyện jabber. Điều này có nghĩa là một vài điều.

  1. Mỗi người dùng cần được thiết lập làm người dùng trên máy chủ. Điều này là để máy chủ biết khách hàng nào sẽ đẩy thư đến. Nó không khó chỉ để thiết lập một người dùng ngẫu nhiên/vượt qua và liên kết trực tiếp với ứng dụng.

  2. Việc gửi thông tin trò chuyện chỉ có nghĩa là có người gửi và người nhận. Trong trường hợp của bạn, bạn có thể bỏ qua người gửi, nhưng nó có thể hữu ích nếu bạn có nhiều nơi mà thông điệp có thể đến.

  3. Thư có thể chứa bất kỳ thông tin nào bạn muốn. Tôi không thể nhớ hoàn toàn (nó đã được một thời gian kể từ khi tôi đã sử dụng XMPP) nhưng tôi nghĩ rằng bạn có thể gửi XML bên trong thông điệp thực tế (hoặc json hoặc bất cứ điều gì) hoặc bạn có thể ATTACH thêm XML vào tin nhắn và chỉ để lại bản thân thông báo trống (hoặc có giá trị danh nghĩa).

Những gì bạn cần để bắt đầu là máy chủ XMPP.Bạn có thể cài đặt nó trên máy chủ web của bạn (tôi cho rằng bạn có thể cài đặt nó trên AWS, nhưng tôi không chắc chắn). Đây là máy chủ tôi luôn sử dụng, Openfire, nó rất đơn giản để thiết lập và sử dụng (và có một giao diện web đẹp mà bạn có thể sử dụng để thiết lập mọi thứ). Điều này cho phép bạn gửi một tin nhắn nhận được, và làm cho toàn bộ điều "tư nhân". Điều này có nghĩa rằng, mặc dù bạn có khả năng có thể kết nối với các mạng jabber công cộng, bạn cũng có thể hạn chế quyền truy cập vào máy chủ.

Tiếp theo bạn muốn có api dựa trên web. Có một khung php tốt, xmpphp sẽ giúp bạn thiết lập api. Api này sẽ cho phép bạn gửi tin nhắn từ kịch bản python của bạn (ví dụ: req bài để curl) đến máy chủ xmpp mà sẽ cung cấp nó cho iphone. Nếu bạn không muốn gửi tin nhắn thì bạn đã hoàn tất. Lắng nghe các tin nhắn XMPP bằng cách sử dụng php là một ấm đun nước khác của cá!

Một điều cần lưu ý là bạn sẽ cần gửi trạng thái từ ứng dụng để máy chủ biết nếu bạn đã đăng nhập và "đang nghe" hay không. Một lần nữa, đây là tất cả các tài liệu hợp lý tốt trên internet nếu bạn tìm kiếm nó (tôi không thể khá nhớ chính xác ins and outs). Vì vậy, trong kịch bản python/php của bạn, bạn có thể kiểm tra xem liệu người dùng bạn đang cố gắng gửi một tin nhắn đến hiện tại là "đăng nhập" và "nghe" như nó đã được. Nếu không, bạn sẽ cần triển khai thông báo đẩy và gửi thông báo đẩy. Nếu bạn không chắc chắn về điều này, có một dịch vụ tuyệt vời được gọi là urban airship mà tôi sẽ giới thiệu lại. Họ gửi tối đa 1.000.000 thông báo đẩy một tháng miễn phí (và các thông báo tiếp theo là khá hợp lý). Nếu không, hãy chuẩn bị sẵn sàng cho một thế giới tổn thương tự thiết lập dịch vụ! (Tôi đã nghe!)

Tôi hy vọng điều đó sẽ trả lời hầu hết các câu hỏi của bạn. Một chủ đề khá chuyên môn của nó (rất nhiều người sẽ không biết về XMPP - một trong những thứ mà bạn sẽ chỉ biết nếu bạn cần biết về nó). XMPP là rất mạnh mẽ mặc dù, và một giải pháp tốt hơn nhiều so với lặp đi lặp lại yêu cầu http và tất cả các loại. Có rất nhiều thông tin trên internet nếu bạn có thể tìm thấy nó, nhưng bạn có thể phải thông minh một chút về cách diễn giải thông tin, một trong những thứ chưa chuyển sang iPhone trong dòng chính (theo ý kiến ​​của tôi).

EDIT ... một điều nữa

Cẩn thận với outs thả - thả internet outs và như vậy. Nghe có vẻ hiển nhiên, nhưng nó luôn cắn tôi! Luôn luôn quên rằng đôi khi internet bị cắt và kết nối XMPP của tôi cần được kết nối lại. Esp nếu mọi người đang đặt ứng dụng ở chế độ nền và sau đó quay lại sau. :) Hãy nhớ kết nối lại khi bạn cần.

+0

Cảm ơn bạn rất nhiều, đó là câu trả lời hay nhất và hữu ích nhất mà tôi từng đọc trên SO. Nó rất rõ ràng giải thích tất cả mọi thứ mà tôi không hiểu hoặc biết về cách sử dụng XMPP và các ứng dụng di động: D –

+0

Vâng, tôi rất vui mừng, cảm ơn cho các ý kiến. :) Nó được một thời gian (tôi thấy rằng bạn không thực sự sử dụng XMPP trên một cơ sở hàng ngày! Lol) nhưng nếu tôi có thể giúp đỡ nhiều hơn sau đó cho tôi biết, bạn có thể tìm thấy tôi trên twitter (@tclayson). –

+0

@ ThomasClayson-Bạn có thể gửi hình ảnh và video qua XMPP bằng XEP -0234 không – iEinstein