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版本 ...
随机推荐
- 微服务优化之使用gRPC做微服务的内部通信
使用gRPC做微服务的内部通信 gRPC是一个由Google开源的远程服务调用框架,具有多路复用和双向流式通信的特性. 大家好,在本文中将为大家介绍为什么我们应该使用gRPC代替RESTful或JSO ...
- GPS授时器简介
GPS授时器简介 GPS是全球定位系统的简称.GPS定位卫星在全球范围内进行定位.导航的系统.GPS所具有的全天候.高精度和自动测量的特点,已经融入到国民经济建设.国防建设和社会发展的各个领域.而在授 ...
- js数组方法全
js数组方法大全 一:前言 转载 作者:九夏 出处:https://www.cnblogs.com/jiuxia/ 我们在学到js中数组的时候,我们会接触到js中数组 ...
- 第四篇(1):企业常用Linux web环境安装配置(apache、php、mysql)
上篇我们讲了基本的软件包管理和文件操作什么的,现在也要动手安装点有用的东西了吧! 本篇我会写出一个用yum安装apache.php.mysql的方法,最后再运行phpMyAdmin来管理数据库. 1. ...
- 《前端之路》 - 初试 TypeScript(一)基础数据类型
一.先讲讲 TypeScript 什么是 typeScript ? typeScript 是 Javascript 的超集 我们用一张图来简单介绍下 ts 和 js 清清楚楚明明白白的关系- 为什么会 ...
- C++ 动态链接库 dll的加载
//首先生成一个my.dll项目,在cpp中添加如下代码 //导出函数 _declspec(dllexport) int test(int a, int b) { return a + b; } // ...
- mybatis返回自增主键踩坑记
背景 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map ...
- Spyder——科学的Python开发环境
刚开始接触Python的时候,网上找到的资料基本上上来就是介绍Python语言,很少有对开发环境进行讲解的,但如果在学习的过程中不断练习,这样效率会更高,所以特意将一个Python的开发环境Spyde ...
- Python Django撸个WebSSH操作Kubernetes Pod
优秀的系统都是根据反馈逐渐完善出来的 上篇文章介绍了我们为了应对安全和多分支频繁测试的问题而开发了一套Alodi系统,Alodi可以通过一个按钮快速构建一套测试环境,生成一个临时访问地址,详细信息可以 ...
- Journal of Proteomics Research | 自动的、可重复的免疫多肽数据分析流程MHCquant
题目:MHCquant: Automated and reproducible data analysis for immunopeptidomics 期刊:Journal of Proteome R ...