• thinkphp整合系列之友盟消息推送


    上篇文章 thinkphp集成系列之phpmailer批量发送邮件讲过的;

    邮件有着零成本、内容丰富的优点;

    但是一个非常硬的硬伤;这家伙的及时性太差了;

    尤其是随着90、00后的崛起;从上网开始体验的就是QQ、微信的即时通讯;

    唯一有的邮箱也还是自动开通的QQ邮箱;然而还是一连串的未读;

    那么有木有一种零成本、但是及时性比较好的方案呢?

    有的;那就是消息推送;当然;前提是用户已经安装了app;

    今个先就友盟的推送来讲解下;http://push.umeng.com/

    依然是以开源项目示例:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin

    一:注册应用

    工欲善其事必先注其key;

    找到消息推送、添加应用;获得key和secret;

    白俊遥博客

    这里面有2个坑;

    1:安卓要用的是Appkey和App Master Secret;不是Umeng Message Sercet;

    2:一定要添加 服务器ip地址、如果是在本地测试;那直接百度下ip;把查出的ip填上即可;

    白俊遥博客

    添加测试设备的Device Token;这个是需要由移动端获取的;

    白俊遥博客

    二:创建表

    下载示例项目;安装后会有users表和oauth_user表;

    users表用来存放用户的账号密码之类的;

    oauth_user表用来存放移动端发送过来的Device Token;

    当然;自己设计表也是可以的;主要就是让用户id和Device Token关联起来;

    三:集成友盟sdk

    sdk目录:/ThinkPHP/Library/Vendor/Umeng

    当然;这个sdk也是被我修改过的;具体修改了那些地方;同样也年代久远;没有记录了;

    配置项:/Application/Common/Conf/config.php

        'UMENG_IOS_APP_KEY'      => '', //友盟ios AppKey
        'UMENG_IOS_SECRET'       => '', //友盟ios App Master Secret
        'UMENG_ANDROID_APP_KEY'  => '', //友盟android AppKey
        'UMENG_ANDROID_SECRET'   => '', //友盟android App Master Secret
    

    函数:/Application/Common/Common/function.php

    /**
     * 发送友盟推送消息
     * @param  integer  $uid   用户id
     * @param  string  $title  推送的标题
     * @param  integer $type   1:官方小秘书   2:我的评论
     * @return boolear       是否成功
     */
    function umeng_push($uid,$title){
        // 获取token
        $device_tokens=D('OauthUser')->getToken($uid,2);
        // 如果没有token说明移动端没有登录;则不发送通知
        if (empty($device_tokens)) {
            return false;
        }
        // 导入友盟
        Vendor('Umeng.Umeng');
        // 自定义字段   根据实际环境分配;如果不用可以忽略
        $status=1;
        // 消息未读总数统计  根据实际环境获取未读的消息总数 此数量会显示在app图标右上角
        $count_number=1;
        $data=array(
            'key'=>'status',
            'value'=>"$status",
            'count_number'=>$count_number
            );
        // 判断device_token  64位表示为苹果 否则为安卓
        if(strlen($device_tokens)==64){
            $key=C('UMENG_IOS_APP_KEY');
            $timestamp=C('UMENG_IOS_SECRET');
            $umeng=new Umeng($key, $timestamp);
            $umeng->sendIOSUnicast($data,$title,$device_tokens);
        }else{
            $key=C('UMENG_ANDROID_APP_KEY');
            $timestamp=C('UMENG_ANDROID_SECRET');
            $umeng=new Umeng($key, $timestamp);
            $umeng->sendAndroidUnicast($data,$title,$device_tokens);
        }
        return true;
    }
    

    调用:

    umeng_push('1','测试')
    

    本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客http://baijunyao.com                        

  • 相关阅读:
    ECMAScript 6学习笔记(二):let和块级作用域
    ECMAScript 6学习笔记(一):展开运算符
    JavaScript的作用域和闭包
    HTML中行内元素的竖直方向的padding和margin是否真的无效
    <input type="text"/>未输入时属性value的默认值--js学习之路
    Matlab 之 FFT的理解和应用
    .NET 5.0实现Consul服务注册
    面向对象编程思想(OOP)
    又再回归一次
    阿里云的OCS缓存机制
  • 原文地址:https://www.cnblogs.com/shuaibai123/p/5576232.html
Copyright © 2020-2023  润新知