Erlang实现的百度云推送Android服务端实例

(编辑:jimmy 日期: 2024/11/8 浏览:2)

百度云推送官方地址http://developer.baidu.com/wiki/index.php"http://developer.baidu.com/wiki/index.php">http://developer.baidu.com/wiki/index.php"codetitle">复制代码 代码如下:
start() ->

    inets:start(),

    {Mega,Sec,_} = now(),

    ApiKey = "apikey=aghjklpoikmnbhjklpoijnbfd",%%用户的APIkey
    %% 我的设备
    % Channel_Id = "channel_id=1234567890098765432",%% 用户的某一设备channelid,也就是客户端demo安装在的手机的channelid
    %% 模拟器
    Channel_Id = "channel_id=3959774938927755088",%%客户端模拟器的channelid
    Device_Type = "device_type=3",%%类型,细节在官方文档中查看,1:浏览器设备;2:PC设备;3:Android设备;4:IOS设备;5:Windows phone设备
    Message_Type = "message_type=1",%% 0:消息;1:通知;默认为0
    TitleStr = " :kkkk,嘎嘎嘎阿 达航空 件阿 斯顿,,,,哈哈哈,erlang",
    DescriptionStr = "行不:行啊!",
    Messages0 = "messages={\"title\":\"",
    Messages1 = TitleStr,
    Messages2 = "\",\"description\":\"",
    Messages3 = DescriptionStr,
    Messages4 = "\",\"notification_builder_id\":0,"
    ++ "\"notification_basic_style\":2,\"open_type\":2,\"url\":\"\",\"user_confirm\":0,\"pkg_content\":\"\",\"custom_content\":\"\"}",
    Messages = Messages0 ++ Messages1 ++ Messages2 ++ Messages3 ++ Messages4,
    Method = "method=push_msg",
    Msg_keys= "msg_keys=erlang_keys",
    Push_Type = "push_type=1",
    Time = "timestamp="++ integer_to_list((Mega * 1000000 + Sec)),
    User_Id = "user_id=213123123",%%用户的userid
    Url = "http://channel.api.duapp.com/rest/2.0/channel/channel",
    Http_Method = "POST",
    SecretKey = "123weqwe12wq12eqweqweqwe",%%用户的secretekey
    Str0 = Http_Method ++ Url ++ ApiKey ++ Channel_Id ++ Device_Type ++ Message_Type ++ Messages0,
    Str1 = Messages2,
    Str2 = Messages4 ++ Method ++ Msg_keys ++ Push_Type ++ Time ++ User_Id ++ SecretKey,
    TitleBin = list_to_binary(TitleStr),
    TIntegerU = unicode:characters_to_list(TitleBin,utf8),
    TChanges = utf8(TIntegerU,[]),
    Title_Utf8 =
      lists:foldl(fun(Change,Acc) ->
        case Change of
          [Term] when Term >= $a, Term =< $z ->
            Acc ++ Change;
          [Term] when Term >= $A, Term =< $Z ->
            Acc ++ Change;
          [Term] when Term >= $0, Term =< $9 ->
            Acc ++ Change;
          [Term] when Term =:= $. ->
            Acc ++ Change;
          [Term] when Term =:= $_ ->
            Acc ++ Change;
          [Term] when Term =:= $- ->
            Acc ++ Change;
          [Term] when Term =:= 32 ->
            Acc ++ [43];
          _ ->
            Acc ++ list_to_hex_s(Change)
        end
      end,[],TChanges),
    DesBin = list_to_binary(DescriptionStr),
    DIntegerU = unicode:characters_to_list(DesBin,utf8),
    DChanges = utf8(DIntegerU,[]),
    Des_Utf8 =
      lists:foldl(fun(Change,Acc) ->
        case Change of
          [Term] when Term >= $a, Term =< $z ->
            Acc ++ Change;
          [Term] when Term >= $A, Term =< $Z ->
            Acc ++ Change;
          [Term] when Term >= $0, Term =< $9 ->
            Acc ++ Change;
          [Term] when Term =:= $. ->
            Acc ++ Change;
          [Term] when Term =:= $_ ->
            Acc ++ Change;
          [Term] when Term =:= $- ->
            Acc ++ Change; 
          _ ->
            Acc ++ list_to_hex_s(Change)
        end
      end,[],DChanges),
    StrValue = escape_uri(Str0) ++ Title_Utf8 ++ escape_uri(Str1) ++ Des_Utf8 ++ escape_uri(Str2),
    Md5Str = md5_hex(StrValue),
    Sign = "sign=" ++ Md5Str,
    PostInfo = ApiKey ++ "&" ++ Sign ++ "&" ++ User_Id ++ "&"
    ++ Channel_Id ++ "&" ++ Device_Type ++ "&" ++ Message_Type ++ "&" ++ Messages
    ++ "&" ++ Method ++ "&" ++ Msg_keys ++ "&" ++ Push_Type ++ "&" ++ Time,
    timer:sleep(30*1000),
    Result = httpc:request(post,{Url,[],"application/x-www-form-urlencoded",PostInfo},[],[]),
    case Result of
      {ok,{{"HTTP/1.1",200,"OK"},_,_}} ->
        nothing;
      _ ->
        io:format("Result:~p~n",[Result])
    end.