curl を使用して典型的な php バックエンドを使用して、Android デバイスに GCM プッシュ通知を送信しようとしています。php スクリプトは次のとおりです。
<?php
//request url
$url = 'https://android.googleapis.com/gcm/send';
//your api key
$apiKey = 'AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA';
//registration ids
$registrationIDs = array('APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...');
//payload data
$data = array('score' => '1-0', 'scorer' => 'Ronaldo', 'time' => '44');
$fields = array('registration_ids' => $registrationIDs,
'data' => $data);
//http header
$headers = array('Authorization: key=' . $apiKey,
'Content-Type: application/json');
//curl connection
$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);
curl_close($ch);
echo $result;
?>
クライアント アプリでブロードキャスト レシーバーを使用します。
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String newMessage = intent.getExtras().getString("score");
// Waking up mobile if it is sleeping
WakeLocker.acquire(getApplicationContext());
// Showing received message
lblMessage.append(newMessage + "\n");
Toast.makeText(getApplicationContext(), " New Message: " + newMessage, Toast.LENGTH_LONG).show();
// Releasing wake lock
WakeLocker.release();
}
};
php スクリプトの結果から、json メッセージが適切に送信されていることは確かです。登録したデバイスにも通知が届きます。しかし、問題は、「null」メッセージが表示されることです。受け取った文字列を印刷しようとしているだけなので、「null」が印刷されます。このステートメントに何か問題がありますか : String newMessage = intent.getExtras().getString("score");
? または、メッセージを取得するために json をデコードする必要がありますか?