编程语言
首页 > 编程语言> > c2dm:如何在设备中接收消息? (使用PHP)

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