PHP:将数组传递给函数时GCM无效注册
Posted
技术标签:
【中文标题】PHP:将数组传递给函数时GCM无效注册【英文标题】:PHP: GCM Invalid Registration when passing array to function 【发布时间】:2016-02-17 03:01:05 【问题描述】:我为谷歌云消息设置设置的 php 代码遇到了一个非常奇怪的问题。
目前我有以下功能来发送推送通知:
function sendPushNotification($user_token_list, $message)
global $gcm_api_key, $errors;
$data = array('message' => $message);
$url = 'https://android.googleapis.com/gcm/send';
$post_data = array (
"registration_ids" => $user_token_list,
"data" => array("message" => $message)
);
$header = array (
'Authorization: key='.$gcm_api_key,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
$result = curl_exec($ch);
if (curl_errno($ch)) $errors[] = array('PUSH_NOTIFICATION_FAILURE' => curl_error($ch));
curl_close($ch);
echo $result;
$message
是要包含在下游的消息,$user_token_list
是数组类型,其元素包含有效的注册ID。
我用来构造$user_token_list
数组的函数如下:
function getDeviceTokensFromUserList($recipients, $website)
$token_list = array();
for ($i = 0; $i < count($recipients); ++$i)
$token_list[] = getDeviceTokenFromUserid($recipients[$i], $website);
return $token_list;
但是,在发送下游请求时,我收到错误:
无效注册
但是,当我在 $user_token_list
上执行 var_dump
时,它会给我一个注册 ID
duICFkjL5I4:APA91bF_asp9iDmNvMWUX58nPU8bj8kWua8ISiAoUw0KvYai5n37yp-qRlQrl2jPhTPY-a8KMq-XXXXXXXXX
如果我将注册 ID 硬编码到 sendPushNotification
函数中,它不会给我一个错误
即
$post_data = array (
"registration_ids" => array("duICFkjL5I4:APA91bF_asp9iDmNvMWUX58nPU8bj8kWua8ISiAoUw0KvYai5n37yp-qRlQrl2jPhTPY-a8KMq-XXXXXXXXX"),
"data" => array("message" => $message)
);
表示注册id有效,并在gcm上注册。
有什么想法吗?
【问题讨论】:
你能确定key的长度和你需要的一样吗?确保没有空格等... 只是为了确定,如果$user_token_list
真的是一个数组,var_dump
将输出它的数组结构,而不仅仅是你显示的字符串值。
是的,var_dump 输出数组结构...字符串长度完全相同..
【参考方案1】:
根据 Android GCM 的架构概述,您在以下情况下会遇到 invalidRegistration 错误:
无效的注册 ID 检查您传递给服务器的注册 ID 的格式。确保它与手机在 com.google.android.c2dm.intent.REGISTRATION 意图中收到的注册 ID 匹配,并且您没有截断它或添加其他字符。当错误代码为 InvalidRegistration 时发生。
已检查接收下游消息的部分:https://developers.google.com/cloud-messaging/
这是一个相关的堆栈溢出票:How to parse GCM respond to remove invalid registration id from server with php
【讨论】:
以上是关于PHP:将数组传递给函数时GCM无效注册的主要内容,如果未能解决你的问题,请参考以下文章