c2dm:如何在设备中接收消息? (使用PHP)
作者:互联网
我有c2dm的注册ID和身份验证令牌.然后我将这些值存储在db中.并使用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时,将显示Toast消息.但是仍然存在一些问题.
标题和msg值在此处为空.
我的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;
}
实际上,我不确定应该为崩溃_密钥和data.message变量使用哪种类型的值.
请帮我…
谢谢…
解决方法:
最终,我找到了提供crash_key和and数据的方法.
crash_key应该是一个字符串,它是一组消息的名称或特定类型的消息.如果我们使用相同的crash_key发送多个消息,则最新消息将从c2dm服务器发送到设备.
例如:$collapse_key =“ important”;
和数据.是重要的这将包含我们要发送的消息.
例如:如果我们要发送消息“祝您有愉快的一天”,那么我应该给它起一个关键的名字.
data.=“祝您有美好的一天”;
这里的“愿望”是关键.在接收器中,我应该检索具有相同键名的消息.
private void handleMessage(Context context, Intent intent)
{
String mywish= intent.getStringExtra("wishes");
Toast.makeText(context,"my wishes : "+mywish,1).show();
}
对不起.
标签:android,php,android-c2dm 来源: https://codeday.me/bug/20191011/1891103.html