PHP支持友盟消息推送踩坑記錄

公司客戶端選定的友盟消息推送,PHP文檔不多,本身踩坑很多:php

代碼

<?php

namespace Notification;

//引入核心文件
require_once('./Application/Common/Lib/notification/android/AndroidBroadcast.php');
require_once('./Application/Common/Lib/notification/android/AndroidFilecast.php');
require_once('./Application/Common/Lib/notification/android/AndroidGroupcast.php');
require_once('./Application/Common/Lib/notification/android/AndroidUnicast.php');
require_once('./Application/Common/Lib/notification/android/AndroidCustomizedcast.php');
require_once('./Application/Common/Lib/notification/android/AndroidListcast.php');
require_once('./Application/Common/Lib/notification/ios/IOSBroadcast.php');
require_once('./Application/Common/Lib/notification/ios/IOSFilecast.php');
require_once('./Application/Common/Lib/notification/ios/IOSGroupcast.php');
require_once('./Application/Common/Lib/notification/ios/IOSUnicast.php');
require_once('./Application/Common/Lib/notification/ios/IOSCustomizedcast.php');
require_once('./Application/Common/Lib/notification/ios/IOSListcast.php');


class Sms
{
    protected $appkey = NULL;
    protected $appMasterSecret = NULL;
    protected $timestamp = NULL;
    protected $validation_token = NULL;

    function __construct($key, $secret)
    {
        //android
        $this->andkey          = 'andriodkey';
        $this->andMasterSecret = 'andriodsecret';
        //ios
        $this->ioskey          = 'ioskey';
        $this->iosMasterSecret = 'iossecret';

        $this->timestamp = strval(time());
    }

    /**
     * Android推送—廣播
     * @param $title   string 推送消息標題
     * @param $content string 推送消息內容
     * @return mixed
     */
    function sendAndroidBroadcast($title, $content)
    {
        try {
            $brocast = new \AndroidBroadcast();
            $brocast->setAppMasterSecret($this->andMasterSecret);
            $brocast->setPredefinedKeyValue("appkey", $this->andkey);
            $brocast->setPredefinedKeyValue("timestamp", $this->timestamp);
            $brocast->setPredefinedKeyValue("ticker", "Android broadcast ticker");
            $brocast->setPredefinedKeyValue("title", $title);
            $brocast->setPredefinedKeyValue("text", $content);
            $brocast->setPredefinedKeyValue("after_open", "go_app");
            $brocast->setPredefinedKeyValue("production_mode", "true");
            $brocast->setExtraField("test", "helloworld");
            return $brocast->send();
        } catch (Exception $e) {
            print("Caught exception: " . $e->getMessage());
        }
    }

    /**
     * Android推送—單播
     * @param $title   string 推送消息標題
     * @param $content string 推送消息內容
     * @param $tokens  array 設備的token值
     * @return mixed
     */
    function sendAndroidUnicast($title, $content, $tokens)
    {
        try {
            $unicast = new \AndroidUnicast();
            $unicast->setAppMasterSecret($this->andMasterSecret);
            $unicast->setPredefinedKeyValue("appkey", $this->andkey);
            $unicast->setPredefinedKeyValue("mipush", true);
            $unicast->setPredefinedKeyValue("mi_activity", 'cn.weidijia.pccm.ui.activity.SplashActivity');
            $unicast->setPredefinedKeyValue("timestamp", $this->timestamp);
            $unicast->setPredefinedKeyValue("device_tokens", $tokens);
            $unicast->setPredefinedKeyValue("ticker", "Android unicast ticker");
            $unicast->setPredefinedKeyValue("title", $title);
            $unicast->setPredefinedKeyValue("text", $content);
            $unicast->setPredefinedKeyValue("after_open", "go_app");
            $unicast->setPredefinedKeyValue("production_mode", "true");
            $unicast->setExtraField("test", "helloworld");
            return $unicast->send();
        } catch (Exception $e) {
            print("Caught exception: " . $e->getMessage());
        }
    }

    /*
     * android自定義
     * */
    function sendAndroidCustomizedcast($alias, $alias_type, $ticker, $title, $text)
    {
        try {
            $customizedcast = new \AndroidCustomizedcast();
            $customizedcast->setAppMasterSecret($this->andMasterSecret);
            $customizedcast->setPredefinedKeyValue("appkey", $this->andkey);
            $customizedcast->setPredefinedKeyValue("timestamp", $this->timestamp);
            $customizedcast->setPredefinedKeyValue("alias", $alias);
            $customizedcast->setPredefinedKeyValue("alias_type", $alias_type);
            $customizedcast->setPredefinedKeyValue("ticker", $ticker);
            $customizedcast->setPredefinedKeyValue("title", $title);
            $customizedcast->setPredefinedKeyValue("text", $text);
            $customizedcast->setPredefinedKeyValue("after_open", "go_app");
            return $customizedcast->send();
        } catch (Exception $e) {
            print("Caught exception: " . $e->getMessage());
        }
    }

    /**
     * IOS推送—廣播
     * @param $title   string 推送消息標題
     * @param $content string 推送消息內容
     * @return mixed
     */
    function sendIOSBroadcast($title, $content)
    {
        try {
            $brocast = new \IOSBroadcast();
            $brocast->setAppMasterSecret($this->iosMasterSecret);
            $brocast->setPredefinedKeyValue("appkey", $this->ioskey);
            $brocast->setPredefinedKeyValue("timestamp", $this->timestamp);
            $brocast->setPredefinedKeyValue("alert", $title);
            $brocast->setPredefinedKeyValue("badge", 0);
            $brocast->setPredefinedKeyValue("sound", "chime");
            $brocast->setPredefinedKeyValue("production_mode", "false");
            $brocast->setCustomizedField("test", $content);
            return $brocast->send();
        } catch (Exception $e) {
            print("Caught exception: " . $e->getMessage());
        }
    }

    /**
     * IOS推送—單播
     * @param $title   string 推送消息標題
     * @param $content string 推送消息內容
     * @param $tokens  array 設備的token值
     * @return mixed
     */
    function sendIOSUnicast($title, $content, $tokens)
    {
        try {
            $unicast = new \IOSUnicast();
            $unicast->setAppMasterSecret($this->iosMasterSecret);
            $unicast->setPredefinedKeyValue("appkey", $this->ioskey);
            $unicast->setPredefinedKeyValue("timestamp", $this->timestamp);
            $unicast->setPredefinedKeyValue("device_tokens", $tokens);
            $unicast->setPredefinedKeyValue("alert", $title);
            $unicast->setPredefinedKeyValue("badge", 0);
            $unicast->setPredefinedKeyValue("sound", "chime");
            $unicast->setPredefinedKeyValue("production_mode", "false");
            $unicast->setCustomizedField("test", $content);
            return $unicast->send();
        } catch (Exception $e) {
            print("Caught exception: " . $e->getMessage());
        }
    }

    /*
     * IOS自定義
     * */
    function sendIOSCustomizedcast($alias, $alias_type, $ticker, $title, $text)
    {
        $alert = [
            "title"    => $title,
            "subtitle" => $ticker,
            "body"     => $text
        ];
        try {
            $customizedcast = new \IOSCustomizedcast();
            $customizedcast->setAppMasterSecret($this->iosMasterSecret);
            $customizedcast->setPredefinedKeyValue("appkey", $this->ioskey);
            $customizedcast->setPredefinedKeyValue("timestamp", $this->timestamp);
            $customizedcast->setPredefinedKeyValue("alias", $alias);
            $customizedcast->setPredefinedKeyValue("alias_type", $alias_type);
            $customizedcast->setPredefinedKeyValue("alert", $alert);
            $customizedcast->setPredefinedKeyValue("badge", 0);
            $customizedcast->setPredefinedKeyValue("sound", "chime");
            $customizedcast->setPredefinedKeyValue("production_mode", "false");
            return $customizedcast->send();
        } catch (Exception $e) {
            print("Caught exception: " . $e->getMessage());
        }
    }

}

andriod和ios使用不一樣的key和secret,申請就好.下載的demo裏面沒有列播,網上也沒有資料,客服就更別說了...android

  1. ios的自定義播送的alert要傳遞數組
  2. 離線推送這兩個字段須要在UmengNotification.php文件內添加這兩個字段,不然會報錯.
protected $DATA_KEYS = array("appkey", "timestamp", "type", "device_tokens", "alias", "alias_type", "file_id", "filter", "production_mode",
        "feedback", "description", "thirdparty_id", "mipush", "mi_activity");

clipboard.png

友盟U-push參數解析ios

3.使用下載的官方demo必定要吧print都註釋掉.c#

第一篇寫的很亂,很差意思api

相關文章
相關標籤/搜索