我正在使用C2DM开发android推送通知应用程序,我在我的应用程序中遇到了一些问题。 当我在i-e服务器和客户端应用程序上使用相同的电子邮件地址时,该应用程序正在运行,
任何人都可以告诉我会出现什么问题。
阿尔塔夫
答案 0 :(得分:1)
您似乎错误地认为,应在注册意图中更改为使用C2DM服务识别应用程序而创建的角色电子邮件帐户。
您必须将该角色的电子邮件与服务器上的电子邮件相同,否则Google将无法将您的应用程序识别为此c2dm邮件的发件人/收件人。 样本注册意图:
Intent registrationIntent = new Intent(
C2DMessaging.REQUEST_REGISTRATION_INTENT);
registrationIntent.setPackage(C2DMessaging.GSF_PACKAGE);
registrationIntent.putExtra(
C2DMessaging.EXTRA_APPLICATION_PENDING_INTENT,
PendingIntent.getBroadcast(context, 0, new Intent(), 0));
registrationIntent.putExtra(C2DMessaging.EXTRA_SENDER, senderId);
context.startService(registrationIntent);
此处的变量senderId应该包含您在Google C2DM signup Page
上创建并注册C2DM的角色帐户此同一封电子邮件用于从google服务器获取身份验证令牌,该令牌稍后用于发送C2DM邮件
获取身份验证密钥的示例服务器代码:
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("Email",
senderId));
nameValuePairs.add(new BasicNameValuePair("Passwd", "testpassword"));
nameValuePairs.add(new BasicNameValuePair("accountType", "GOOGLE"));
nameValuePairs.add(new BasicNameValuePair("source",
"Fleet Tracker Pro"));
nameValuePairs.add(new BasicNameValuePair("service", "ac2dm"));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
if (line.startsWith("Auth=")) {
String auth = line.substring(5);
System.out.println("Auth token = " + auth);
return auth;
}
}
注意变量senderId这应该还包含您在Google C2DM signup Page上创建并注册C2DM的角色帐户 任何其他电子邮件都可以更改为您喜欢的任何内容,但这些电子邮件必须保持相同
以下是Google代码中google C2DM page的定义:
发件人ID与应用程序关联的电子邮件帐户 开发商。发件人ID用于注册过程 识别允许发送消息的Android应用程序 装置。此ID通常基于角色,而不是a 个人帐户 - 例如,my-app @ gmail.com。
我希望我有一个美好的一天。
如果您包含代码段或有关您正在谈论的电子邮件的更多信息,那么会很不错。