• python


    1. 小米文档及SDK下载

    1.文档介绍
    https://dev.mi.com/console/doc/detail?pId=863
    sdk说明:
    2.开发者需要登录开发者网站(申请AppID, AppKey, AppSecret)。
    3.访问开发者网站下载SDK。
    地址:http://admin.xmpush.xiaomi.com/zh_CN/mipush/downpage
    4. 创建应用
    http://admin.xmpush.xiaomi.com/zh_CN/app/nav
    
    

    2.业务场景

    小程序端在访问app端分享的商品后,app接收消息,某用户访问了某商品
    

    3. 推送demo在实际项目中应用

    3.1 判断设备表消息,调对应的(ios,android)方法

    from django.conf import settings as project_settings
    # 引入sdk
    # -----------------------------
    from xmpush.base.APIConstants import *
    from xmpush import APISender
    from xmpush.base.APIMessage import *
    #------------------------------
    
    from common.core.http.response import JSONResponse
    from push.models import PushDevice
    from account.models import OAuthUser
    from push import settings
    import copy
    
    class PushService(object):
        @staticmethod
        def push_to_user(user_id, message):
            u"""
            推送消息给指定的用户的设备
            :param user_id: app端用户id
            :param message: 要推送给app端的消息
            :return:
            """
    
            record = PushDevice.objects.filter(user_id=user_id, app_name=settings.AppNameEnum.QQC).order_by('-modify_time').first()
            if not record:
                error = copy.deepcopy(qqc.ERROR["NOT_EXIST_ERR"])
                error["msg"] = u"用户设备信息不存在"
                return JSONResponse(error=error)
    
            os_type = record.os_type
            # 别名推送
            alias_id = u'QQC_%s' % user_id
            ret = None
            # 如果设备是ios
            if os_type == settings.DeviceOSEnum.iOS:
                ret = push_to_ios_user(alias_id, message)
            
            # 如果是Android
            elif os_type == settings.DeviceOSEnum.Android:
                ret = push_to_android_user(alias_id, message)
    
            return ret
    

    3.2 不同系统对应的推送demo

    # android 系统
    def push_to_android_user(alias_id, msg):
        """
        :param alias_id:
        :type alias_id str
        :param msg:
        :type msg AppPushMessage
        :return:
        """
    
        # android 不支持测试环境
        Constants.use_official()
    
        message = PushMessage() 
            # 创建应用时的包名
            .restricted_package_name("") 
            .title(msg[0]).description(msg[1]) 
            .pass_through(0).payload('')
            
        # 通过extra中数据,app端扩展额外的判断
        message.extra(msg[2])
        
        # android key and secret
        sender = APISender("")
    
        recv = sender.send_to_alias(message.message_dict(), alias_id)
        return recv
    
    
    # ios系统
    def push_to_ios_user(alias_id, msg):
        """
        :param alias_id:
        :type alias_id str
        :param msg:
        :type msg AppPushMessage
        :return:
        """
        
        #  环境判断
        if project_settings.QQC_PUSH_MODE == 'production':
            Constants.use_official()
        else:
            Constants.use_sandbox()
        message = PushMessage() 
            .description(msg[1]) 
            
            # 创建应用时的bundle_id
            .restricted_package_name("") 
            .badge(1)
            
        # 通过extra中数据,app端扩展额外的判断
        message.extra(msg[2])
        
        # ios key and secret
        sender = APISender("")
        return sender.send_to_alias(message.message_dict_ios(), alias_id)
     
    demo地址(里面有详细说明):   
    https://dev.mi.com/console/doc/detail?pId=1788
    

    3.3 拼接要推送的消息

    # 访问商品时推送的消息
    def goods_visit_message(user_id,name):
        """
        :param user_id: 用户id
        :param name: 商品名
        :return: title, description
        """
        user = OAuthUser.objects.filter(user_id=user_id).first()
        user_name = user.nickname
        title = u'您有一条新消息~'
        description = u'【%s】刚刚浏览了您的商品【%s】~' % (user_name, name)
        
        # 自己可定义type的用途
        type = {"type": 2}
        return title, description, type
    
    

    3.4 在项目的其他接口中调用推送方法

    PushService.push_to_user(app_user_id, goods_visit_message(wx_user_id,goods_name))
    
    打印对象返回:
    {'info': u'Received push messages for 1 ALIAS',
     'code': 0, 
     'description': u'u6210u529f', 
     'trace_id': u'Xdm03290562213241158in', 
     'result': u'ok', 
     'data': {'id': u'adm03290562213241161sM'}}
     
     如上格式,消息已推送到小米服务器,app端设置后即可接收
    

    • 更多推送姿势,有待在更多的业务场景中解锁!!!
  • 相关阅读:
    《RocketMQ源码系列》心跳机制
    《RocketMQ源码系列》broker是如何注册到nameserver的
    使用redis客户端工具RedisClient连接windows和linux下的redis并解决无法连接redis的问题
    windows下安装Linux
    redis客户端工具RedisClient的使用
    redis哨兵机制配置
    redis数据的两种持久化方式rdb和aof对比(二)
    redis数据的两种持久化方式rdb和aof对比(一)
    windows下的redis主从复制
    redis持久化配置:rdb和aof
  • 原文地址:https://www.cnblogs.com/quqinchao/p/11229172.html
Copyright © 2020-2023  润新知