2011-12-20 7 views
6

Pracuję nad aplikacją na iOS. Istnieją różne "obszary" do aplikacji, a użytkownicy mogą wysyłać do nich "rzeczy". Inni użytkownicy oglądający ten sam obszar powinni wysłać wysłaną rzecz na swój telefon (ale tylko wtedy, gdy aplikacja jest uruchomiona).Używanie XMPP do wysyłania informacji w czasie rzeczywistym do działającej aplikacji na iOS

zacząłem pracę nad Django backend z relaksującego API. Planuję hosting zaplecza na Amazon Web Services, i za każdym razem coś jest dodawane do "obszaru", umieszczając czas aktualizacji i "obszar" w kolejce, używając Amazon Simple Queue Service. Zamierzam utworzyć aplikację Python, która przetwarza elementy w kolejce, wysyłając zapytanie do bazy danych, aby zobaczyć, którzy użytkownicy mają nowe "rzeczy", które mogą pobrać - obecnie ta część jest planowana, aby następnie wysłać telefonowi Apple Push Notification, a jeśli aplikacja działa, może wykonać proste żądanie RESTful, aby uzyskać nowe dane w formacie JSON.

Jednak wierzę, że XMPP będzie lepszym rozwiązaniem (używając XMPPFramework po stronie iOS) i umożliwi obsługę Androida w przyszłości.


Robiłem wiele badań w jaki sposób używać XMPP do tego celu, ale dokumentacja wskazuje, że chcesz być z wykorzystaniem sieci XMPP publiczną, że użytkownicy muszą założyć konto XMPP i jest niejasne, jak wysyłać informacje nie będące czatami.

Ten projekt wymaga użycia XMPP wyłącznie do wysyłania informacji z serwera do urządzenia użytkownika. Tak więc powinno to być prywatna sieć XMPP, w razie potrzeby użytkownik może zostać zarejestrowany dla konta XMPP w tej sieci prywatnej (ale za kulisami, nie powinny wiedzieć, co technologia zasilania app.)


Czy można używać XMPP tylko do wysyłania informacji do aplikacji mobilnej? Wiele odpowiedzi/samouczków w Internecie po prostu sugeruje użycie serwera XMPP i klienta - bez wzmianki o tym, w jaki sposób można je połączyć w sieci prywatnej, aby przesłać dane określone przez coś innego niż serwer XMPP.

Dziękuję za pomoc z góry :)

Odpowiedz

15

Tak, jest to możliwe. Co więcej, jest całkowicie możliwe wysyłanie i otrzymywanie wszystkiego, co chcesz, za pośrednictwem XMPP.

Ogólnie XMPP jest używany do kont czatów Jabber. Oznacza to kilka rzeczy.

  1. Każdy użytkownik musi być skonfigurowany jako użytkownik na serwerze. Jest tak, aby serwer wiedział, do których klientów przekazywać wiadomości. Nie jest trudno po prostu ustawić losowego użytkownika/przepustkę i połączyć go bezpośrednio z aplikacją.

  2. Wysłanie informacji czatu po prostu oznacza, że ​​nie jest nadawca i odbiornik. W twoim przypadku możesz prawdopodobnie zignorować nadawcę, ale może się przydać, jeśli masz wiele miejsc, z których wiadomości mogą pochodzić.

  3. Wiadomość może zawierać dowolne informacje. Nie pamiętam kompletnie (minęło trochę czasu odkąd używam XMPP), ale myślę, że możesz wysyłać XML w samej wiadomości (lub json lub cokolwiek innego) lub możesz dołączyć dodatkowy XML do wiadomości i po prostu wyjść sama wiadomość jest pusta (lub ma wartość nominalną).

Co trzeba zrobić, to serwer XMPP.Możesz zainstalować to na swoim serwerze sieciowym (zakładam, że prawdopodobnie możesz zainstalować go na AWS, ale nie jestem pewien). Jest to serwer, z którego zawsze korzystam, Openfire, jest bardzo prosty w konfiguracji i użyciu (i ma ładny interfejs sieciowy, za pomocą którego można ustawić wszystko). Pozwala to na wysyłanie otrzymanych wiadomości i sprawia, że ​​całość jest "prywatna". Oznacza to, że mimo że możesz potencjalnie łączyć się z publicznymi sieciami Jabber, możesz również ograniczyć dostęp do serwera.

Następnie potrzebujesz api z interfejsem WWW. Istnieje dobry framework php, xmpphp, który pomoże ci skonfigurować api. Ten api pozwoli Ci wysyłać wiadomości ze skryptu Pythona (np. Post req do curl) do serwera xmpp, który dostarczy go do iphone. Jeśli nie chcesz wysyłać wiadomości, to wszystko gotowe. Słuchanie wiadomości XMPP za pomocą php to zupełnie inny czajnik!

Należy pamiętać, że będziesz musiał wysyłać informacje o stanie z aplikacji, aby serwer wiedział, czy jesteś zalogowany i "słuchasz", czy nie. Ponownie, wszystko to jest właściwie dobrze udokumentowane w Internecie, jeśli go szukasz (nie potrafię dokładnie zapamiętać dokładnych informacji). Tak więc w twoim skrypcie python/php możesz przetestować, czy użytkownik, do którego próbujesz wysłać wiadomość, jest aktualnie "zalogowany" i "słuchanie", jak to było wcześniej. Jeśli nie, musisz wdrożyć powiadomienie push i wysłać powiadomienie push. Jeśli nie masz pewności, jest fantastyczna usługa o nazwie urban airship, którą polecam. Wysyłają do 1 000 000 powiadomień push miesięcznie za darmo (a późniejsze powiadomienia są całkiem rozsądne). W przeciwnym razie przygotuj się na świat, w którym boli Cię konfiguracja usługi! (Słyszałem!)

Mam nadzieję, że odpowiedź na większość twoich pytań. Jest to dość specjalistyczny temat (wiele osób nie wie o XMPP - jest to jedna z tych rzeczy, o których będziesz wiedzieć tylko, jeśli chcesz o tym wiedzieć). XMPP jest jednak bardzo wydajny i znacznie lepszym rozwiązaniem niż powtarzanie żądań HTTP i wszelkiego rodzaju. W Internecie można znaleźć wiele informacji, ale może być trochę sprytnie, jeśli chodzi o interpretację informacji, która jest jedną z tych rzeczy, która nie została jeszcze przeniesiona na iPhone'a w głównym nurcie (w mojej opinii).

EDIT ... jeszcze jedno

Strzeż porzucania - drop out internet i takie. Brzmi to oczywiste, ale zawsze mnie gryzie! Zawsze zapominaj, że czasami internet się przerywa i moje połączenia XMPP muszą zostać ponownie połączone. Esp, jeśli ludzie umieszczają aplikację w tle, a później wracają do niej. :) Pamiętaj, aby połączyć się, gdy trzeba.

+0

Dziękuję bardzo, to była najlepsza i najbardziej przydatna odpowiedź, jaką kiedykolwiek czytałem na temat SO. Bardzo wyraźnie wyjaśnił wszystko, czego nie rozumiałem ani nie wiedziałem o korzystaniu z XMPP i aplikacji mobilnych: D –

+0

Cóż, bardzo się cieszę, dzięki za komentarze. :) Minęło trochę czasu (uważam, że tak naprawdę nie używasz XMPP na co dzień! Lol), ale jeśli mogę pomóc więcej, to daj mi znać, możesz mnie znaleźć na Twitterze (@tclayson). –

+0

@ ThomasClayson - Czy możesz przesłać obraz i wideo przez XMPP przy użyciu XEP-0234 – iEinstein