阿里云 安卓push无法收到消息

官方给的demo代码如下:

    request = PushMessageToAndroidRequest.PushMessageToAndroidRequest()
    request.set_AppKey(appKey)
    request.set_Target('ALL')
    request.set_TargetValue('ALL')
    request.set_Title("PushMessageToAndroid title")
    request.set_Body("Message from ali push Open Api2.0 : PushMessageToAndroid")

    request.add_query_param('AndroidNotificationChannel', '1')

    result = clt.do_action(request)
    print result

这个代码有两个问题,如果和另外一份demo代码中的:

clt = client.AcsClient(properties.accessKeyId,properties.accessKeySecret,properties.regionId)

request = PushMessageToAndroidRequest.PushMessageToAndroidRequest()
request.set_AppKey(properties.appKey)
request.set_Target('ALL')
request.set_TargetValue('ALL')
request.set_Title("PushMessageToAndroid title")
request.set_Body("Message from ali push Open Api2.0 : PushMessageToAndroid")
result = clt.do_action(request)

很可能会出现下面的错误信息:



    EABF26DA-89EA-44BA-B16E-117FE03D29C7
    cloudpush.aliyuncs.com
    Throttling.User
    Request was denied due to user flow control.

这个错误信息按照官方的解释是限流了,但是实际并不是,可以尝试分开调用,不要连续进行push message和push notice。

另外一个问题是: 这份代码在对于最新的安卓8.0以上系统的消息无法正常弹出,按照文档解释需要设置NotificationChannel(文档链接:https://help.aliyun.com/knowledge_detail/67398.html)。

但是上层的封装并没有这个属性,有两个解决方法:

  1. 修改源代码增加NotificationChannel 对应的字段
  2. 使用下面的代码来进行发送(代码是直接拷贝过来的,增加了request.set_AndroidNotificationChannel(‘1’))
  3. def push_notice_to_android(device_list_string, title, body, popup_title, popup_body, ex_paramters, target='ALL',
                               bar_type=1, notice_type='SOUND'):
        request = PushRequest.PushRequest()
        request.set_AppKey(appKey)
        # 推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送  TAG:按标签推送; ALL: 广播推送
        request.set_Target(target)
        # 根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        request.set_TargetValue(device_list_string)
        # 设备类型 ANDROID iOS ALL
        request.set_DeviceType("ANDROID")
        # 消息类型 MESSAGE NOTICE
        request.set_PushType("NOTICE")
        # 消息的标题
        request.set_Title(title)
        # 消息的内容
        request.set_Body(body)
        # 通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
        request.set_AndroidNotifyType(notice_type)
        # 通知栏自定义样式1-100
        request.set_AndroidNotificationBarType(bar_type)
        # 点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
        # Android通知声音
        request.set_AndroidMusic("default")
        # 设置辅助弹窗通知标题
        request.set_AndroidPopupTitle(popup_title)
        # 设置辅助弹窗通知内容
        request.set_AndroidPopupBody(popup_body)
        # 设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
        request.set_AndroidExtParameters(ex_paramters)
    
        request.set_AndroidNotificationChannel('1')
        request.set_StoreOffline(True)
        try:
            result = clt.do_action_with_exception(request)
            return result
        except:
            return 'Push failed'
    
    
☆版权☆

* 网站名称:obaby@mars
* 网址:https://lang.ma/
* 个性:https://oba.by/
* 本文标题: 《阿里云 安卓push无法收到消息》
* 本文链接:https://baby.lc/2019/11/6594
* 短链接:https://oba.by/?p=6594
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注