一个简单的问题,一个更难:
1)发件人ID(Gmail帐户)可以与我们需要在设置 - >帐户下添加的电话号码不同吗?
2)我必须自动添加一个帐户(编码..),我正在尝试解决它,但是可以隐藏我想在“设置” - >“帐户”下添加的帐户的邮件吗?我不希望人们知道电子邮件地址。
感谢。
答案 0 :(得分:1)
电话上的GMail帐户在内部用于识别C2DM消息的收件人。首先,客户端注册自己,然后(当发送C2DM消息时)所有注册的客户端都接收C2DM消息。不止一个客户端可以自己注册它们作为C2DM消息的配方。
来自Google C2DM网站(请参阅Registering):
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent.putExtra("sender", emailOfSender);
startService(registrationIntent);
参数应用程序使用发件人ID(在var emailOfSender上方的代码中)标识注册过程使用的包名称。您看到设备上的GMail帐户未在代码中使用,但将在内部用于识别C2DM服务器上的移动设备(Android实施直接提供客户端GMail帐户或链接到GMail帐户的ID )。
Google表示:它要求运行Android 2.2或更高版本的设备也安装了Market应用程序。这是因为Market应用程序维护与C2DM服务器的连接。所有设备的注册ID都不同。在从服务器发送C2DM消息之前,客户端必须告知服务器注册ID。
如果要创建用于发送C2DM消息的应用程序(在服务器端),还需要一个GMail帐户(我们在设备上使用的SenderID)。通常使用“每个应用程序一个GMail帐户”模式。当您注册C2DM时,您必须在注册表中输入SenderID和接收Android应用程序的命名空间 - 与客户端上用于注册设备的信息完全相同。
两个GMail帐户都不公开。关系是n-1-m,这意味着n个客户端和m服务器在一个C2DM服务器上自己注册它们。只有Google(C2DM服务器)知道使用了哪些GMail帐户。
我有一个真实的GMail地址,在我的手机上使用。我有调试我在模拟器上使用的GMail地址。然后我为我写的每个支持C2DM的应用程序都有3个GMail帐户。
答案 1 :(得分:0)
对不起,如果我的问题有点(甚至很多)愚蠢,但据我所知:
registrationIntent.putExtra("sender", emailOfSender);
而不是emailOfSender我应该为C2DM需要提供一些真实的电子邮件地址,但是如果这封电子邮件对于安装在不同设备上的每个应用程序都不同,我的意思是我应该从设备设置的某个地方收取此电子邮件,还是我可以对其进行硬编码? / p>
我正在重复http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.html的教程并注意到:
// Sender currently not used
intent.putExtra("sender", "nonsenses@gmail.com");
所以我就这样离开了它,在开发服务器测试部分之后,我把它放在了:
public class SecureStorage {
public static final String USER = "your_registeredUser";
public static final String PASSWORD = "your_password";
}
真实的凭证在这里,当我尝试向应用程序发送消息时,我收到了响应200但设备上没有消息,只要我将nonsenses@gmail.com更改为服务器端应用程序中使用的电子邮件帐户 - 我收到了通知马上。