ejabberd mod_offline push-уведомления для iphone

В настоящее время я занимаюсь разработкой приложения для чата на iPhone и пока хорошо подходит для обычной конфигурации сервера ejabberd. Я хочу реализовать Push-уведомление, когда пользователь находится в автономном режиме, и для этого мне просто нужно запустить PHP-скрипт, который получает устройство Token и текстовое сообщение для доставки через SSL на серверы Apple (часть Apple готова), Моя проблема начинается с того, что я понятия не имею, как реализовать это действие на моем сервере ejabberd? в основном мне просто нужно создать действие для полученного сообщения офлайн, это возможно. Может кто-нибудь направить меня в правильном направлении. Мне удалось начать писать некоторый код для нового модуля, но я получаю ту же ошибку все время, когда этот модуль вызывается автономными сообщениями, вот код и ошибка.

module.erl

-module(mod_offline_push).
-behaviour(gen_mod).
-include("ejabberd.hrl").

-export([start/2, stop/1, send_notice/1]).

start(VHost,_Opts) ->
 ?INFO_MSG("Starting mod_offline_push Host: ~p", [VHost]),
 inets:start(),
    ssl:start(),
 ejabberd_hooks:add(offline_message_hook, VHost, ?MODULE,send_notice, 50), 
 ok.


stop(VHost) ->
    ?INFO_MSG("mod_offline_push stopping Host: ~p", [VHost]),
    ejabberd_hooks:delete(offline_message_hook, VHost, ?MODULE, send_notice, 50),
    ok.

send_notice(Packet) ->
 ?INFO_MSG("after http:",[]),
 Type = xml:get_tag_attr_s("type", Packet),
 FromS = xml:get_tag_attr_s("from", Packet),
 ToS   = xml:get_tag_attr_s("to", Packet),
 Body = xml:get_path_s(Packet, [{elem, "body"}, cdata]),
 if
 (Type == "chat") and (Body /= "") ->
 Sep = "&",
 Post = [
 "application=",ToS, Sep,
 "event=", FromS,Type, Sep,
 "description=", Body, Sep,
 "priority=-1" ],
 httpc:request(post, {"http://pushNotification/push", [], "application/x-www-form-urlencoded", list_to_binary(Post)},[],[]),
  ok;
 true ->
   ok
    end.

ОШИБКА

=ERROR REPORT==== 2010-08-26 16:53:19 ===
E(<0.370.0>:ejabberd_hooks:190) : {undef,
                                   [{mod_offline_push,send_notice,
                                     [{jid,"userA","198.165.211.1",
                                       "2121731711282852044419503",
                                       "userA","198.165.211.206",
                                       "2121731711282852044419503"},
                                      {jid,"userB","198.165.211.1",
                                       [],"userB","198.165.211.1",[]},
                                      {xmlelement,"message",
                                       [{"type","chat"},
                                        {"to","userb@198.165.211.1"}],
                                       [{xmlelement,"body",[],
                                         [{xmlcdata,<<"Hello">>}]}]}]},
                                    {ejabberd_hooks,run1,3},
                                    {ejabberd_sm,route,3},
                                    {ejabberd_local,route,3},
                                    {ejabberd_router,route,3},
                                    {ejabberd_c2s,session_established,2},
                                    {p1_fsm,handle_msg,10},
                                    {proc_lib,init_p,5}]}
running hook: {offline_message_hook,
                  [{jid,"userA","198.165.211.1",
                       "2121731711282852044419503","userA",
                       "userA","2121731711282852044419503"},
                   {jid,"userB","198.165.211.1",[],"userB",
                       "198.165.211.1",[]},
                   {xmlelement,"message",
                       [{"type","chat"},{"to","userB@198.165.211.1"}],
                       [{xmlelement,"body",[],[{xmlcdata,<<"Hello">>}]}]}]}
6
задан Jesse 7 May 2013 в 03:35
поделиться