微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在ejabberd上使用FCM连接和发送推送通知?

如何解决如何在ejabberd上使用FCM连接和发送推送通知?

我正在尝试使用FCM向Android客户端发送推送通知。我点击了以下链接 https://github.com/vkatsuba/epns ,但收到以下错误异常错误:未定义的函数epns:push / 2 这是我的代码:```

-behavIoUr(gen_mod).
-export([start/2,stop/1,mod_options/1,mod_doc/0,depends/2,create_message/1,post_offline_message/3]).
-include("/home/faiqkhan/ejabberd-20.07/lib/fast_xml-1.1.43/include/fxml.hrl").
-include("/home/faiqkhan/ejabberd-20.07/lib/ejabberd-20.07/include/logger.hrl").
-include("/home/faiqkhan/ejabberd-20.07/lib/ejabberd-20.07/include/translate.hrl").
start(_Host,_Opt) -> 
    ?INFO_MSG("mod_http_offline loading",[]),ejabberd_hooks:add(offline_message_hook,_Host,?MODULE,create_message,0).
stop (_Host) -> 
    ?INFO_MSG("stopping mod_http_offline",ejabberd_hooks:delete(offline_message_hook,0).
create_message({_Action,Packet} = Acc) ->
    % ?INFO_MSG("Packet details: ~p",[Packet]),EncodedData = xmpp:encode(Packet),% ?INFO_MSG("Encoded Packet: ~p",[EncodedData]),{value,To} = fxml:get_tag_attr(<<"to">>,EncodedData),From} = fxml:get_tag_attr(<<"from">>,Body = fxml:get_path_s(EncodedData,[{elem,<<"body">>},cdata]),To_id = lists:nth(1,string:lexemes(To,"@")),From_id = lists:nth(1,string:lexemes(From,?INFO_MSG("To id: ~p",[To_id]),?INFO_MSG("From id: ~p",[From_id]),?INFO_MSG("PacketsBody ~p",[Body]),post_offline_message(From_id,To_id,Body),Acc.
post_offline_message(From,To,Body) ->
    ?INFO_MSG("Posting From ~p To ~p Body ~p~n",[From,Body]),?INFO_MSG("post request sent (not really yet)",FCMData = #{
      key => "fcm-key",url => "https://fcm.googleapis.com/fcm/send",playload => #{
        to => <<"rid">>,priority => <<"high">>,data => #{
             <<"title">> => <<"Some Title">>,<<"some_custom_field">> => true
            }
        }
    },epns:push(fcm,FCMData).

解决方法

异常错误:未定义的功能epns:push / 2

这意味着Erlang找不到具有定义的功能push/2的文件epns.beam。

据我所见,该模块定义并正确导出了功能,https://github.com/vkatsuba/epns/blob/master/src/epns.erl

所以可能的问题是您忘记了一些步骤:

  1. 使用与运行ejabberd相同的Erlang版本编译该epns库
  2. 将* .beam文件复制到erlang可以找到它们的路径(例如,将这些文件与所有其他ejabberd * .beam文件一起复制)
,

如果尝试将epns库作为依赖项添加到项目中,则还需要更新rebar.config*.app.src文件。因此,这里是rebar3项目的步骤:

步骤1 -在项目中编辑文件rebar.config

...
{deps,[
  ...
  {epns,{git,"git://github.com/vkatsuba/epns.git",{branch,"master"}}},...
]}.
...

步骤2 -编辑文件*.app.src

...
  {applications,[
    ...,epns,...
   ]},...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。