GCM и канонические идентификаторы при переустановке приложения без выхода из системы

Я реализовал push-уведомление в своем приложении для Android.

Теперь я сталкиваюсь со знаменитой проблемой канонических идентификаторов.
Если я удалю приложение без выхода из системы, то без удаления device_ids из моей базы данных, когда я переустанавливаю приложение, я получаю уведомление, которое не для нового пользователя.

Google предлагает использовать канонические идентификаторы для этой проблемы, но я не понимаю, где я должен перехватить это и изменить идентификатор в моей базе данных.
У меня есть эта страница PHP, которая отправляет уведомление:

    $gcm=new GCM();
//get the array of all id associated to the user
$row= (query to get registration_ids from my database);
while($row = mysql_fetch_assoc($result)){
array_push($registration_ids, $row['id_device']);
}
//create a message to send
$mymessage="my message";
$message=array("message"=>$mymessage);
//send the notification and take the result
$result_android=$gcm->send_notification($registration_ids,$message);
echo $result_android;//class that send the notification
class GCM{
function __construct(){}
public function send_notification($registatoin_ids,$message){
// GOOGLE API KEY
define("GOOGLE_API_KEY","xxxxxxxxxxxxxxxxx");
$url="https://android.googleapis.com/gcm/send";
$fields=array(
"registration_ids"=>$registatoin_ids,
"data"=>$message,
);
var_dump($fields);
$headers=array(
"Authorization: key=".GOOGLE_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,$headers);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($fields));
$result=curl_exec($ch);
if($result===FALSE){
die("Curl failed: ".curl_error($ch));
}
curl_close($ch);
echo $result;
}

Где я должен взять canonical_ids и вставить его в мою базу данных? Сторона сервера или сторона клиента? Я очень смущен.

0

Решение

Теперь, когда я отправляю push-уведомление на устройство с несколькими идентификаторами регистрации, результат страницы php, которая отправляет запрос, выглядит так:

array(2) { ["registration_ids"]=> array(1) { [0]=> string(162) "XXXXXX(old reg id)XXXXXXX" } ["data"]=> array(1) { ["price"]=> string(24) "Hi, I’m a push notification!" } }
{"multicast_id":7004172909649400096,"success":1,"failure":0,"canonical_ids":1,"results":[{"registration_id":" XXXXXX(canonical reg id)XXXXXXX ","message_id":"0:1428420202799897%73660ba9f9fd7ecd"}]}

Что я должен сделать, чтобы не отправить неправильное уведомление?

0

Другие решения

Вы должны прочитать эту работу пример решить ваш ответ. В основном мы должны обновить канонический идентификатор с существующим дублирующим идентификатором регистрации. В ответе на уведомление GCM одна вещь похожа, то есть позиция массива, которая помогает обновить канонический идентификатор с существующим регистрационным идентификатором, чтобы избежать дублирования сообщений.

0

По вопросам рекламы [email protected]