PHP友盟推送消息踩坑及处理
公司的客户端的推送选用友盟推送,但是友盟的官方文档描述很少,对新手很不友好,所以特写此采坑纪录,废话不多说上代码。
公司业务只涉及单播和广播。所以只提供了单播和广播,业务拓展的话会补充其余部分。
消息推送代码:
<?php
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/android/AndroidBroadcast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/android/AndroidFilecast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/android/AndroidGroupcast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/android/AndroidUnicast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/android/AndroidCustomizedcast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/ios/IOSBroadcast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/ios/IOSFilecast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/ios/IOSGroupcast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/ios/IOSUnicast.php');
require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/ios/IOSCustomizedcast.php'); class Be_Libs_UmengMsg {
protected static $appkey = '';
protected static $appMasterSecret = '';
protected static $validation_token = NULL;
protected static $device_tokens = '';
public static function __init($type) {
$configs = Be_Config::k('umeng.'.$type); //根据IOS/Android获取appkey和密钥
self::$appkey = $configs['appkey'];
self::$appMasterSecret = $configs['appMasterSecret'];
}
//Android 单播
public static function sendAndroidUnicast($data) {
self::__init('android');
try {
$unicast = new AndroidUnicast();
$unicast->setAppMasterSecret(self::$appMasterSecret);
$unicast->setPredefinedKeyValue("appkey",self::$appkey);
$unicast->setPredefinedKeyValue("timestamp",strval(time()));
$unicast->setPredefinedKeyValue("device_tokens",$data['token']);
$unicast->setPredefinedKeyValue("ticker",$data['title']);
$unicast->setPredefinedKeyValue("title",$data['title']);
$unicast->setPredefinedKeyValue("text",$data['content']);
$unicast->setPredefinedKeyValue("after_open","go_app");
$unicast->setPredefinedKeyValue("production_mode", "false");
$unicast->setPredefinedKeyValue("mipush",true);
$unicast->setPredefinedKeyValue("mi_activity",'xxx');
$unicast->setExtraField("scheme",$data['scheme']);
$unicast->setExtraField("badge",$data['badge']);
$unicast->send();
} catch (Exception $e) {
return $e->getMessage();
}
return true;
}
//Android广播
public static function sendAndroidBroadcast($data) {
self::__init(strtolower($data['platform']));
try {
$brocast = new AndroidBroadcast();
$brocast->setAppMasterSecret(self::$appMasterSecret);
$brocast->setPredefinedKeyValue("appkey", self::$appkey);
$brocast->setPredefinedKeyValue("timestamp", strval(time()));
$brocast->setPredefinedKeyValue("ticker", '测试副标题');
$brocast->setPredefinedKeyValue("title", '测试标题');
$brocast->setPredefinedKeyValue("text", '测试描述');
$brocast->setPredefinedKeyValue("after_open", "go_url");
$brocast->setPredefinedKeyValue("url", 'http://www.baidu.com');
$brocast->setPredefinedKeyValue("production_mode", "false");
$brocast->setExtraField("scheme", "xxxx");
$brocast->send();
} catch (Exception $e) {
return $e->getMessage();
}
return true;
}
//IOS单播
public static function sendIOSUnicast($data) {
self::__init(strtolower('ios'));
$alert = array(
"title" => $data['title'],
"subtitle" => $data['subtitle'],
"body" => $data['content'],
"url" => $data['url'],
"scheme" => $data['scheme'],
);
try {
$unicast = new IOSUnicast();
$unicast->setAppMasterSecret(self::$appMasterSecret);
$unicast->setPredefinedKeyValue("appkey",self::$appkey);
$unicast->setPredefinedKeyValue("timestamp",strval(time()));
$unicast->setPredefinedKeyValue("device_tokens",$data['token']);
$unicast->setPredefinedKeyValue("badge",$data['badge']);
$unicast->setPredefinedKeyValue("sound", "default");
$unicast->setPredefinedKeyValue("alert", $alert);
$unicast->setPredefinedKeyValue("production_mode", "false");
$unicast->send();
} catch (Exception $e) {
return $e->getMessage();
}
return true;
}
//IOS广播
public static function sendIOSBroadcast($data) {
self::__init(strtolower($data['platform']));
$alert = array(
"title" => '测试标题',
"subtitle" => '测试副标题',
"body" => '测试描述',
"url" => 'http://www.baidu.com',
"scheme" => "xxxx",
);
try {
$brocast = new IOSBroadcast();
$brocast->setAppMasterSecret($this->appMasterSecret);
$brocast->setPredefinedKeyValue("appkey", $this->appkey);
$brocast->setPredefinedKeyValue("timestamp", strval(time()));
$brocast->setPredefinedKeyValue("alert", $alert);
$brocast->setPredefinedKeyValue("badge", 0);
//$brocast->setPredefinedKeyValue("sound", "chime");
// Set 'production_mode' to 'true' if your app is under production mode
$brocast->setPredefinedKeyValue("production_mode", "false");
// Set customized fields
//$brocast->setCustomizedField("test", "helloworld");
$brocast->send();
} catch (Exception $e) {
return $e->getMessage();
}
return true;
} }
采坑纪录:
1.IOS传值问题
IOS传自定义参数的方式与Android不同,需要使用alert参数,自定义参数使用数组方式。详见IOS单播。
2.Android设置 MIUI、EMUI、Flyme系统设备离线转为系统下发 报错
$unicast->setPredefinedKeyValue("mipush",true);
$unicast->setPredefinedKeyValue("mi_activity",'xxx');
直接在代码中添加这两个参数会报错。处理方法:
需要在UmengNotification.php文件内添加两个字段,否则会报错。
原代码:
protected $DATA_KEYS = array("appkey", "timestamp", "type", "device_tokens", "alias", "alias_type", "file_id", "filter", "production_mode",
"feedback", "description", "thirdparty_id");
改为:
protected $DATA_KEYS = array("appkey", "timestamp", "type", "device_tokens", "alias", "alias_type", "file_id", "filter", "production_mode",
"feedback", "description", "thirdparty_id", "mipush", "mi_activity");
详情的参数不知道的小伙伴可以私聊~
PHP友盟推送消息踩坑及处理的更多相关文章
- 友盟推送SDK集成测试、常见问题以及注意事项总结
最近为了解决公司APP在一些手机出现的推送问题重新集成了最新版的友盟推送SDK,花费了几天时间终于把集成和测试工作完成,最终在华为,Nexus,三星,小米,HTC,魅族等10多部手机上测试并达到了预想 ...
- 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)
为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守 ...
- 友盟推送里面的Alias怎么用?可以理解成账号吗?
友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...
- iOS app 集成友盟推送问题
之前做app推送主要是集成友盟SDK,在程序获取deviceToken时,老是提示如下错误: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用 ...
- AppDelegate减负之常用三方封装 - 友盟推送篇
之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...
- iOS 友盟推送,应用内推送启动图推送闪动黑屏,插屏推送方法报错
以前都是用的极光推送,应公司需求要求使用友盟推送,为了以后是有分享都适用,,, 友盟推送文档,下载demo 感觉比极光用着要简单顺手 一切就绪后,开始发送消息测试,,,,,搞了半天没有发过来消息 原来 ...
- java 集成友盟推送
原文:https://blog.csdn.net/Athena072213/article/details/83414743 最近应公司业务需求需要完善友盟推送,认真看了官方文档后其实很简单,只需要细 ...
- 极光推送和友盟推送,ios端和安卓端的后端调试设置
我是最后端的,这两天搞了一个app项目,前端安卓使用友盟很方便,调试比较顺利,然后ios就遇到各种问题了,证书.发送成功推送不成功,测试时用的TestMode(),ios上架之后就必须用product ...
- 友盟推送 .NET (C#) 服务端 SDK rest api 调用库
友盟推送 .NET SDK rest api 介绍 该版本是基于友盟推送2.3版本封装的,网上查询了下发现没有.NET版本的调用库,官方也没有封装.NET的版本,只有python.java.php版本 ...
随机推荐
- Django中的session的使用
一.Session 的概念 cookie 是在浏览器端保存键值对数据,而 session 是在服务器端保存键值对数据 session 的使用依赖 cookie:在使用 Session 后,会在 Coo ...
- Python基础-检测密码,一些网站会给密码强加一些规则。
输入一个字符串,检测是否是合法的密码:1)密码必须包含8个字符2)密码只能包含英文字母和数字3)密码至少包含两个数字 首先我讲一下用到的方法 s为字符串 len(s) 求出字符串的长度. list(s ...
- 微信小程序结构目录、配置介绍、视图层(数据绑定,运算,列表渲染,条件渲染)
目录 一.小程序结构目录 1.1 小程序文件结构和传统web对比 1.2 基本的项目目录 二.配置介绍 2.1 配置介绍 2.2 全局配置app.json 2.3 page.json 三.视图层 3. ...
- elasticsearch 单机安装
一.elasticsearch下载 1.elastic 官网:https://www.elastic.co/cn/ 2.elasticsearch 下载地址:https://www.elastic.c ...
- Vue Snackbar 消息条队列显示,依次动画消失的实现
效果预览 思路 封装 Snackbar 组件: 在根路由页面下建立全局 Snackbar 控制器,统一管理 Snackbar: 通过事件通知全局 Snackbar 控制器显示消息: 实现 1. 封装 ...
- Mysql(Mariadb)数据库之Information Schema 库中GLOBAL_VARIABLES表 and SESSION_VARIABLES 表分析
Information Schema GLOBAL_VARIABLES and SESSION_VARIABLES Tables The Information Schema GLOBAL_VARIA ...
- 01-初识InfluxDB
初识InfluxDB 1. InfluxDB介绍 时间序列数据库,简称时序数据库,Time Series Database,一个全新的领域,最大的特点就是每个条数据都带有Time列. 时序数据库到底能 ...
- 使用StreamHttpResponse和FileResponse下载文件的注意事项及文件私有化
为什么需要编写下载视图方法? 你或许知道,我们上传的文件默认放在media文件夹中的,且Django会为每个上传的静态文件分配一个静态url.在模板中,你可以使用{{ mymodel.file.url ...
- TCP建立连接(三次握手)
TCP的三次握手 TCP作为可靠稳定的传输方式要建立会话,会话的发起者是请求者(客户机),下文中A为客户机,B为服务器. 1.客户机(A)从closed状态转化为主动打开,服务器(B)此时从close ...
- Stress-induced changes in the S-palmitoylation and S-nitrosylation of synaptic proteins (解读人:陈凌云)
文献名:Stress-induced changes in the S-palmitoylation and S-nitrosylation of synaptic proteins (压力诱导突触蛋 ...