PHP极光接口推送,可以收到通知,但没有角标和提示音,求解


(kankantushu) #1

极光推送参数说明:
| sound | 表示通知提示声音,默认填充为空字符串 |
| badge | 表示应用角标,把角标数字改为指定的数字;为 0 表示清除,支持 ‘+1’,’-1’ 这样的字符串,表示在原有的 badge 基础上进行增减,默认填充为 ‘+1’ |

根据参数说明,我把每个badge的参数都设置为了+1,但通过接口推送的消息,只能收到通知,但没有角标和提示音,现在已经能做到推送唤醒屏幕。安卓一切正常,就是IOS的角标没有反应,没有提示音,但从官方后台推送,就有角标和提示音。
请问官方如何设置参数。
手机系统:IOS
PHP环境5.3.28
通过接口推送的内容,到官方后台,无法查找历史记录。


#2

1.查看历史记录_筛选web/api,选择api。
2.请提供你api推送的消息的msgID,我看一下你实际推送的数据是什么。
3.声音:


5.角标:


(kankantushu) #3

Message ID 7389259706


#4
 "notification": {"android": {"alert": "1", "extras": [], "title": "消息通知"}, "ios": {"alert": "1", "extras": [], "title": "消息通知"}}

你这条消息Notification-iOS里面并没有写sound和badge。


(kankantushu) #5

应该怎么写?写在哪里!


#6

这里已经很清楚了


(kankantushu) #7

请问写在哪里,哪个文件?


#8

在你的请求推送的代码里面写。
请点击链接,参考SDK的example


(kankantushu) #9

就是说,不是修改接口文件里的参数,而是改我自己的PHP文件参数?


(kankantushu) #10

我qq2443246006,可以付费咨询


#11

修改你自己的推送的代码= =像上面example里面的那些代码你写在哪里的?你就去哪里改。


#12

其实你只要跑一下example看看效果,复制下example的代码就行了


(kankantushu) #13

我再试试,谢谢群组


#14

你试一下,还有什么问题把出现的问题描述下,贴下代码、消息的msgid什么的。


(kankantushu) #15
<?php
define('IN_ECS',true);
require(dirname(__FILE__) . '/includes/init.php');
require_once ROOT_PATH.ADMIN_PATH.'/includes/jpush/vendor/autoload.php';

use JPush\Model as M;
use JPush\JPushClient;
use JPush\JPushLog;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

use JPush\Exception\APIConnectionException;
use JPush\Exception\APIRequestException;
if($_REQUEST['act'] == 'setting')
{
	admin_priv('app_setting');
    $push_setting = get_push_setting();
    $smarty->assign('push_setting',$push_setting);
    $smarty->display('app_push_setting.htm');
}
elseif($_REQUEST['act'] == 'save_setting')
{
	admin_priv('app_setting');
    $app_names = $_REQUEST['app_name'];
    $app_keys = $_REQUEST['app_key'];
    $app_secrets = $_REQUEST['app_secret'];
    
    if(count($app_names) == count($app_keys) && count($app_keys) == count($app_secrets))
    {
		$push_setting = array();
		foreach($app_names as $key => $val)
		{
			$push_setting[$key]['app_name'] = $app_names[$key];
			$push_setting[$key]['app_key'] = $app_keys[$key];
			$push_setting[$key]['app_secret'] = $app_secrets[$key];
		}
		$sql = 'UPDATE '.$ecs->table('shop_config').' SET value= \''.serialize($push_setting).'\' WHERE code="push_setting"';
		if($db->query($sql))
		{
			sys_msg('成功修改推送配置!',0,array(array('text'=>'返回推送设置','href'=>'app_push.php?act=setting')));
		}
		else
		{
			sys_msg('修改失败!',1);
		}
    }
    else
    {
        sys_msg('数据格式错误',1);
    }
}
elseif($_REQUEST['act'] == 'push_message')
{
	admin_priv('push_message');
    $push_setting = get_push_setting();
    $smarty->assign('push_setting',$push_setting);
    $smarty->display('app_push_message.htm');
}
elseif($_REQUEST['act'] == 'do_push_message')
{
	admin_priv('push_message');
    $ids = empty($_REQUEST['ids']) ? array() : $_REQUEST['ids'];
	$content  = empty($_REQUEST['content']) ? '' : $_REQUEST['content'];
	$extra_type  = empty($_REQUEST['extra_type']) ? '' : $_REQUEST['extra_type'];
	$extra_value  = empty($_REQUEST['extra_value']) ? '' : $_REQUEST['extra_value'];
	if(!empty($extra_type) && !empty($extra_value))
	{
		$extras = array($extra_type => $extra_value);
	}
    else{
		$extras = array();
	}
	if(empty($ids))
    {
        sys_msg('请至少选择一个APP!',1);
    }
	if(empty($content))
	{
		sys_msg('推送内容不能为空!',1);
	}
	$exception = '';
	$push_setting = get_push_setting();
	$apps = array();
	foreach($ids as $key => $val)
	{
		$apps[$key] = $push_setting[$val];
	}
	if(!do_app_push($content,$extras,$apps))
    {
        sys_msg($exception,1,array(array('text'=>'返回推送消息','href'=>'app_push.php?act=push_message')));
    }
    else
    {
        sys_msg('发送成功!',0,array(array('text'=>'返回推送消息','href'=>'app_push.php?act=push_message')));
    }
}

function get_push_setting()
{
    global $db,$ecs;
    $sql = 'SELECT value FROM '.$ecs->table('shop_config').' WHERE code="push_setting"';
    $data = $db->getOne($sql);
    return unserialize($data);
}

function do_app_push($content,$extras,$apps)
{
	global $exception;
    $jpush_post_data = array();
    $notification = array();
	$title = '消息通知';
	foreach($extras as $key => $val)
	{
		if($key == 'goods')
		{
			$title = '商品推荐';
		}
		else if($key == 'article')
		{
			$title = '文章推荐';
		}
		else if($key == 'url')
		{
			$title = '链接推荐';
		}
	}
    
    $android = array();
	$android['title'] = $title;
    $android['alert'] = $content;
    $android['extras'] = $extras;
	$ios = array();
	$ios['title'] = $title;
    $ios['alert'] = $content;
    $ios['extras'] = $extras;

	
    $notification['ios'] = $ios;
	
    $notification['android'] = $android;
	
    $message = array();
	$message['title'] = $title;
    $message['msg_content'] = $content;
    $message['extras'] = $extras;
	
    $jpush_post_data['paltform'] = 'all';
    $jpush_post_data['message'] = $message;
    $jpush_post_data['notification'] = $notification;
    $br = '</br>';
    foreach($apps as $key=>$val)
    {
        $app_key = $val['app_key'];
        $master_secret = $val['app_secret'];
        $client = new JPushClient($app_key, $master_secret);
        try {
        $result = $client->push()
            ->setPlatform(M\all)
            ->setAudience(M\all)
            ->setNotification($notification)
            ->setMessage($message)
            ->send();
			
        } catch (APIRequestException $e) {
            $exception .= 'Push Fail.' . $br;
            $exception .= 'Http Code : ' . $e->httpCode . $br;
            $exception .= 'code : ' . $e->code . $br;
            $exception .= 'Error Message : ' . $e->message . $br;
            $exception .= 'Response JSON : ' . $e->json . $br;
            $exception .= 'rateLimitLimit : ' . $e->rateLimitLimit . $br;
            $exception .= 'rateLimitRemaining : ' . $e->rateLimitRemaining . $br;
            $exception .= 'rateLimitReset : ' . $e->rateLimitReset . $br;
        } catch (APIConnectionException $e) {
            $exception .= 'Push Fail: ' . $br;
            $exception .= 'Error Message: ' . $e->getMessage() . $br;
            //response timeout means your request has probably be received by JPUsh Server,please check that whether need to be pushed again.
            $exception .= 'IsResponseTimeout: ' . $e->isResponseTimeout . $br;
        }
    }
    if(!empty($exception))
    {
		return false;
    }
    else
    {
		return true;
    }
}

以上代码是我程序的推送代码,我尝试着加了很多次,都没有成功,失败的反馈就是我推送的操作页面空白。
我的程序是ecshop小京东,已经更新了phpsdk版本。


#16

不是很能理解你的代码,为何不仿照 SDK的example来写呢,example的写法比较清晰明了。
按照个人理解

应是在这里加上sound 和badge,sound赋值为1007或者default或者你自己的声音文件名都可,badge赋值为1或者+1均可。


(kankantushu) #17

$ios[‘sound’] = ‘sound.caf’;
$ios[‘badge’] = ‘+1’;
按照您的指示,终于成功了,太谢谢了。


#18

:smiley:搞定就好~


(kankantushu) #19

群主,今天推送信息,发现发送失败(errcode:1009,errmsg:)
按你在社区里其他类似的帖子里的建议,在我的推送代码里加了
$android = array();
$android[‘title’] = $title;
$android[‘alert’] = $content;
$android[‘extras’] = $extras;
$android[‘builder_id’] = ‘1’;
结果还是报同样的1009错误,
请问,您的建议是什么?


(kankantushu) #20

推送的内容,可以推送到极光的后台,
Message ID 6020309565