#firebase-cloud-messaging #erlang #ejabberd
#firebase-облако-обмен сообщениями #эрланг #ejabberd #firebase-cloud-messaging #erlang
Вопрос:
Я пытаюсь отправить push-уведомление клиенту Android с помощью FCM. Я перешел по ссылке ниже: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, _Host, ?MODULE, create_message, 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),
{value, From} = fxml:get_tag_attr(<<"from">>, EncodedData),
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, To, 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).
Ответ №1:
ошибка исключения: неопределенная функция epns: push/2
Это означает, что Erlang не смог найти файл epns.beam с определенной функцией push/2
.
Из того, что я вижу, этот модуль определяет и экспортирует эту функцию правильно, https://github.com/vkatsuba/epns/blob/master/src/epns.erl
Так что, вероятно, проблема в том, что вы забыли какой-то шаг:
- скомпилируйте эту библиотеку epns с той же версией Erlang, что и вы запускаете ejabberd
- скопируйте файлы *.beam в путь, по которому erlang сможет их найти (например, скопируйте эти файлы со всеми другими файлами ejabberd *.beam)