From 6b129048d21c4757184eec683da46c42db34110a Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Thu, 26 Jun 2025 12:54:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8E=89=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E7=9B=B4=E6=8E=A5=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/dimension_apn/src/api_handler.erl | 10 ---- apps/dimension_apn/src/dimension_apn.app.src | 1 - apps/dimension_apn/src/dimension_apn_app.erl | 5 +- .../src/dimension_apn_worker.erl | 49 ++++++++----------- .../src/dimension_mnesia_manager.erl | 27 ---------- .../dimension_apn/src/mnesia_device_token.erl | 42 ---------------- 6 files changed, 21 insertions(+), 113 deletions(-) delete mode 100644 apps/dimension_apn/src/dimension_mnesia_manager.erl delete mode 100644 apps/dimension_apn/src/mnesia_device_token.erl diff --git a/apps/dimension_apn/src/api_handler.erl b/apps/dimension_apn/src/api_handler.erl index cdf1869..d2c91cd 100644 --- a/apps/dimension_apn/src/api_handler.erl +++ b/apps/dimension_apn/src/api_handler.erl @@ -85,16 +85,6 @@ read_body(Req, AccData) -> %% helper methods %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% 更新token信息 -handle_request("POST", "/api/device_token", _, #{<<"user_id">> := UserId, <<"token">> := Token}) -> - case mnesia_device_token:insert(UserId, Token, dimension_utils:current_time()) of - ok -> - {ok, 200, dimension_utils:json_data(<<"success">>)}; - {error, Reason} -> - lager:notice("[api_handler] insert user_id: ~p, token: ~p, error: ~p", [UserId, Token, Reason]), - {ok, 200, dimension_utils:json_error(-1, <<"更新token失败"/utf8>>)} - end; - %% 向用户推送数据 handle_request("POST", "/api/push", _, Notifications) -> {ok, Pid} = dimension_apn_worker:start_link(), diff --git a/apps/dimension_apn/src/dimension_apn.app.src b/apps/dimension_apn/src/dimension_apn.app.src index 7107762..55bf54a 100644 --- a/apps/dimension_apn/src/dimension_apn.app.src +++ b/apps/dimension_apn/src/dimension_apn.app.src @@ -13,7 +13,6 @@ ssl, jiffy, apns, - mnesia, kernel, stdlib ]}, diff --git a/apps/dimension_apn/src/dimension_apn_app.erl b/apps/dimension_apn/src/dimension_apn_app.erl index f4231cf..c01a28f 100644 --- a/apps/dimension_apn/src/dimension_apn_app.erl +++ b/apps/dimension_apn/src/dimension_apn_app.erl @@ -13,8 +13,6 @@ start(_StartType, _StartArgs) -> io:setopts([{encoding, unicode}]), %% 加速内存的回收 erlang:system_flag(fullsweep_after, 16), - %% 启动mnesia - ok = mnesia:start(), %% 启动http服务 start_http_server(), dimension_apn_sup:start_link(). @@ -34,8 +32,7 @@ start_http_server() -> Dispatcher = cowboy_router:compile([ {'_', [ - {"/api/[...]", http_protocol, [api_handler]}, - {"/ws", ws_channel, []} + {"/api/[...]", http_protocol, [api_handler]} ]} ]), diff --git a/apps/dimension_apn/src/dimension_apn_worker.erl b/apps/dimension_apn/src/dimension_apn_worker.erl index b4d9767..1a98031 100644 --- a/apps/dimension_apn/src/dimension_apn_worker.erl +++ b/apps/dimension_apn/src/dimension_apn_worker.erl @@ -32,15 +32,12 @@ test() -> {ok, Pid} = start_link(), - UserId = <<"9df4dbb1-aff7-4caa-9adb-cb426a7dbcca">>, DeviceToken = <<"b48b911e85874b403ce80cbb33864e8ed6f06455e80310b0f6b95e672a3e39dc">>, Title = <<"动物狂响曲"/utf8>>, Body = <<"第7集(校服与被毛更深处),bilibili已更新"/utf8>>, - - mnesia_device_token:insert(UserId, DeviceToken, dimension_utils:current_time()), push(Pid, [ #{ - <<"user_id">> => UserId, + <<"device_token">> => DeviceToken, <<"title">> => Title, <<"body">> => Body, <<"custom_data">> => #{ @@ -107,8 +104,8 @@ handle_call(_Request, _From, State) -> {noreply, NewState :: #state{}, timeout() | hibernate} | {stop, Reason :: term(), NewState :: #state{}}). handle_cast({push, Notifications}, State = #state{apns_pid = ApnsPid, headers = Headers}) -> - lists:foreach(fun(#{<<"user_id">> := UserId, <<"title">> := Title, <<"body">> := Body, <<"custom_data">> := CustomData}) -> - PushResult = push_task(ApnsPid, UserId, Title, Body, CustomData, Headers), + lists:foreach(fun(#{<<"device_token">> := DeviceToken, <<"title">> := Title, <<"body">> := Body, <<"custom_data">> := CustomData}) -> + PushResult = push_task(ApnsPid, DeviceToken, Title, Body, CustomData, Headers), lager:debug("[dimension_apn_pusher] push result is: ~p", [PushResult]) end, Notifications), {noreply, State}; @@ -147,30 +144,24 @@ code_change(_OldVsn, State = #state{}, _Extra) -> %%% Internal functions %%%=================================================================== -push_task(ApnsPid, UserId, Title, Body, CustomData, Headers) - when is_pid(ApnsPid), is_binary(UserId), is_binary(Title), is_binary(Body), is_map(CustomData), is_map(Headers) -> - - case mnesia_device_token:get_token(UserId) of - error -> - ok; - {ok, DeviceToken} -> - Notification = #{ - aps => #{ - alert => #{ - title => Title, - body => Body - }, - 'mutable-content' => 1, - % 播放默认声音 - sound => <<"default">>, - % App 图标角标 - badge => 1 - % category => <<"HUB_MESSAGE">> - }, - custom_data => CustomData +push_task(ApnsPid, DeviceToken, Title, Body, CustomData, Headers) + when is_pid(ApnsPid), is_binary(DeviceToken), is_binary(Title), is_binary(Body), is_map(CustomData), is_map(Headers) -> + Notification = #{ + aps => #{ + alert => #{ + title => Title, + body => Body }, - apns:push_notification(ApnsPid, DeviceToken, Notification, Headers) - end. + 'mutable-content' => 1, + % 播放默认声音 + sound => <<"default">>, + % App 图标角标 + badge => 1 + % category => <<"HUB_MESSAGE">> + }, + custom_data => CustomData + }, + apns:push_notification(ApnsPid, DeviceToken, Notification, Headers). -spec parse_headers(Headers :: list()) -> map(). parse_headers(Headers) -> diff --git a/apps/dimension_apn/src/dimension_mnesia_manager.erl b/apps/dimension_apn/src/dimension_mnesia_manager.erl deleted file mode 100644 index 84cc95a..0000000 --- a/apps/dimension_apn/src/dimension_mnesia_manager.erl +++ /dev/null @@ -1,27 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author anlicheng -%%% @copyright (C) 2025, -%%% @doc -%%% -%%% @end -%%% Created : 07. 4月 2025 15:47 -%%%------------------------------------------------------------------- --module(dimension_mnesia_manager). --author("anlicheng"). - -%% API --export([init_database/0]). - -%% 只能调用一次 -init_database() -> - %% 清理掉以前的schema - mnesia:stop(), - mnesia:delete_schema([node()]), - - %% 创建schema - ok = mnesia:create_schema([node()]), - ok = mnesia:start(), - %% 创建数据库表 - mnesia_device_token:create_table(), - - ok. \ No newline at end of file diff --git a/apps/dimension_apn/src/mnesia_device_token.erl b/apps/dimension_apn/src/mnesia_device_token.erl deleted file mode 100644 index 821a866..0000000 --- a/apps/dimension_apn/src/mnesia_device_token.erl +++ /dev/null @@ -1,42 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author anlicheng -%%% @copyright (C) 2025, -%%% @doc -%%% -%%% @end -%%% Created : 07. 4月 2025 14:33 -%%%------------------------------------------------------------------- --module(mnesia_device_token). --author("anlicheng"). --include("dimension_tables.hrl"). - -%% API --export([create_table/0, insert/3, get_token/1]). - -create_table() -> - %% id生成器 - mnesia:create_table(device_token, [ - {attributes, record_info(fields, device_token)}, - {record_name, device_token}, - {disc_copies, [node()]}, - {type, set} - ]). - --spec insert(UserId :: binary(), DeviceToken :: binary(), Timestamp :: integer()) -> ok | {error, Reason :: any()}. -insert(UserId, DeviceToken, Timestamp) when is_binary(UserId), is_binary(DeviceToken), is_integer(Timestamp) -> - Record = #device_token{user_id = UserId, token = DeviceToken, timestamp = Timestamp}, - case mnesia:transaction(fun() -> mnesia:write(device_token, Record, write) end) of - {'atomic', Res} -> - Res; - {'aborted', Reason} -> - {error, Reason} - end. - --spec get_token(UserId :: binary()) -> error | {ok, Token :: binary()}. -get_token(UserId) when is_binary(UserId) -> - case mnesia:dirty_read(device_token, UserId) of - [] -> - error; - [#device_token{token = Token} | _] -> - {ok, Token} - end. \ No newline at end of file