使用GCM和ASP.NET的Android推送通知仅由一台设备接收

时间:2013-01-10 13:15:18

标签: android asp.net notifications push-notification

根据Google Cloud Messaging For Android (GCM) Simple Tutorial,我使用GCM服务创建了一个推送通知的Android应用程序。现在我成功地在设备或模拟器中获取通知,但问题是我只在一个设备(用于测试目的的设备)中获得,而不是在其他应用程序安装的设备中。

final String regId = GCMRegistrar.getRegistrationId(this);

使用此代码我获得了注册ID,我从logcat窗口复制的输出并手动发送给我的.Net开发人员。他在服务器端复制了该id,因此对于该设备我收到了通知。请帮我将该注册ID动态发送到服务器端(Asp.net服务器)。这样他就可以将这些ID存储在数据库中并将注册ID数组传递给Google GCM Server。我认为只有我们才能获得所有设备(已安装的应用程序)的通知。因为现在在服务器端,我们以这种方式将数据传递给GCM服务器:

string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + deviceIDs + "";

如果我的程序在某处出错,请纠正我。

1 个答案:

答案 0 :(得分:1)

基本上你要做的就是打开一个到你的网络服务器的数据连接,然后用你想要做的手机的其他识别因素(例如用户ID或手机ID)发送你的gcmid这在GCMIntentService类的OnRegistered方法中。我向网络服务器发送Form Post请求。在Web服务器上,您可能希望将信息存储在数据库中。 我为表单变量使用多维数组

public String formPost(String[][] Vars) {

    String url = "put url of web server here";
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);
    String tmp = null;
    String rturn = null;
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        for (int i = 0; i < Vars.length; i++) {
            nameValuePairs.add(new BasicNameValuePair(Vars[i][0], Vars[i][1]));
        }
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        String ttmp = parseISToString(response.getEntity().getContent());
        Log.i("test", ttmp);
        if (ttmp.contains("Success")) {
            rturn = ttmp;
            Log.i("test", "Success:" + ttmp);
        } else {
            rturn = ttmp;
            Log.i("test", "Fail:" + ttmp);
        }

    } catch (ClientProtocolException e) {

    } catch (IOException e) {
    } /*
     * catch (RuntimeException e){ Context context =
     * getApplicationContext(); CharSequence text =
     * "There was an error try again later."; int duration =
     * Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text,
     * duration);toast.show(); Log.i("test",e.getMessage()); finish(); }
     */
    return rturn;

}