У меня есть регистрационный идентификатор и токен авторизации для c2dm. И тогда я передаю сохранить эти значения в БД. и используя php, я мог бы отправить одно сообщение на сервер c2dm. Но моя проблема в том, что я не знаю, как получить сообщение в приложении. Я не уверен, правильный ли мой способ получения сообщения или нет. В любом случае я дам это ниже.
У меня есть одно действие, которое регистрируется в c2dm, используя намерение регистрации. и один получатель для получения reg_id и уведомления. он регистрируется с помощью c2dm и не получает сообщения.
манифест
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"></action>
<category android:name="my.android.c2dm"></category>
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"></action>
<category android:name="my.android.c2dm"></category>
</intent-filter>
</receiver>
</application>
C2dmRegistration.class (деятельность)
Intent objRegIntnet=new Intent("com.google.android.c2dm.intent.REGISTER");
objRegIntnet.putExtra("app",PendingIntent.getBroadcast(this,0,new Intent(),0));
objRegIntnet.putExtra("sender","mymail@gmail.com");
startService(objRegIntnet);
c2dmReceiver
public class c2dmReceiver extends BroadcastReceiver
{
private static String KEY = "c2dmPref";
private static String REGISTRATION_KEY = "registrationKey";
private Context context;
@Override
public void onReceive(Context context, Intent intent)
{
this.context = context;
if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION"))
{
handleRegistration(context, intent);
}
else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE"))
{
handleMessage(context, intent);
}
}
private void handleRegistration(Context context, Intent intent)
{
//handles registeration
}
private void handleMessage(Context context, Intent intent)
{
String title= intent.getStringExtra("title");
String message= intent.getStringExtra("msg");
Toast.makeText(context,"title : "+title+"\n message : "+message,1).show();
//Do whatever you want with the message
}
скажите, пожалуйста, какую ошибку я совершил ...
UPDATE
Привет всем, тот же код беспокоит меня сегодня. Ошибка, которую я сделал, с кодом PHP. вместо передачи значений как POST, я отправил его как GET. Когда я изменил его на POST, появляется сообщение о тосте. но все же есть некоторые проблемы.
Здесь заголовок и значения сообщения равны нулю.
мой php код:
function sendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText)
{
//$messageText="have a nice day";
//$msgtype="important";
$headers = array('Authorization: GoogleLogin auth=' . $authCode);
$data = array(
'registration_id' => $deviceRegistrationId,
'collapse_key' => $msgType,
'data.message' => $messageText
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send");
if ($headers)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
На самом деле я не уверен, какой тип значений следует использовать для переменных collapse_key и data.message.
Пожалуйста, помогите мне ...
Спасибо ...