【问题标题】:ejabberd mod_offline iphone pushed notificationsejabberd mod_offline iphone 推送通知
【发布时间】:2011-04-05 20:03:17
【问题描述】:

我目前正在开发一个聊天 iPhone 应用程序,到目前为止对于 ejabberd 服务器的常规配置非常有用。我想在用户“离线”时实现推送通知,为此我只需要运行一个 PHP 脚本,该脚本获取一个令牌设备和通过 SSL 将文本消息传递到 Apple 的服务器(Apple 部分已完成),我的问题开始是我不知道如何对我的 ejabberd 服务器执行此操作?基本上我只需要在可能的情况下对收到的离线消息创建一个操作。有人可以指出我正确的方向。我已经设法开始为一个新模块编写一些代码,但是当离线消息调用这个模块时,我总是遇到同样的错误,这是代码和错误。

模块.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">>}]}]}]}

【问题讨论】:

  • 你解决了吗?我也在做同样的事情。

标签: iphone module xmpp push-notification ejabberd


【解决方案1】:

stacktrace 说的是mod_offline_push 中没有send_notice 函数接受三个 参数(两个JID 和数据包本身)。您的函数的签名不匹配,因为它只需要 1 个参数。

钩子需要三个参数的回调,所以试试

send_notice(_From, _To, Packet).

【讨论】:

    【解决方案2】:

    请使用下面的博客,信息量很大。他们的代码对我来说很好。

    http://symmetricinfinity.com/2013/01/23/ios-push-notifications-from-ejabberd.html

    【讨论】:

      【解决方案3】:

      确保删除源文件中的 INFO_MSG 行。然后重新编译并替换 ejabberd 文件夹中的梁文件。不要忘记重新启动 ejabberd。

      【讨论】:

        【解决方案4】:

        我使用了 mod_interact,它在离线时调用 api。我已经设置了 api 来发送推送通知。

        【讨论】:

          猜你喜欢
          • 2013-04-17
          • 2015-05-26
          • 2016-05-05
          • 2017-03-26
          • 2014-02-06
          • 2011-10-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多