我对注册ID和令牌之间的关系感到困惑。在Google的GCM教程中,我们在开始时注册一个注册ID。然而,我们也获得了一个令牌。现在,在图表中,我们将注册ID发送到目标服务器。但是,我们是否也发送令牌?我知道令牌是从注册ID派生出来的。令牌是否用作GCM和应用程序之间的身份验证机制,而服务器不知道令牌的存在?
Project Number
,它将用作客户端项目中的SENDER_ID
;以及在Credentials中创建的API服务器密钥
,它将用作服务器项目中的API_KEY
。CLIENT_REGISTRATION_TOKEN
变量中(或编写代码将此令牌发送到服务器应用程序)。更多信息请参见:
Google Cloud Messaging: 概述中的关键概念
凭据
- 发送者 ID:在配置 API 项目时创建的唯一数字值(在 Google 开发者控制台中表示为“项目编号”)。发送者 ID 在注册过程中用于标识允许向客户端应用程序发送消息的应用程序服务器。
- API 密钥:保存在应用程序服务器上的 API 密钥,使应用程序服务器有权访问 Google 服务。在 HTTP 中,API 密钥包含在发送消息的 POST 请求的头部中。在 XMPP 中,API 密钥作为密码用于 SASL PLAIN 认证请求来验证连接。您在配置 API 项目时获取 API 密钥。
- 注册令牌:由 GCM 连接服务器发放给客户端应用程序的 ID,允许它接收消息。请注意,注册令牌必须保密。
希望这可以帮到您!
GCM现在使用InstanceID的概念来表示设备(Android或iOS)上应用程序的单个安装。每个InstanceID可以发出多个令牌。这些令牌用于标识InstanceID,可以过期和刷新。
在客户端设备上,您初始化一个InstanceID,然后使用该InstanceID生成令牌(注册令牌)。您将该令牌发送到您的服务器,服务器使用该令牌向InstanceID(已安装的应用程序)发送消息。如果由于任何原因使该令牌失效,例如卸载应用程序或令牌受到威胁,则应生成新令牌并发送到您的服务器。
我仍然成功地使用注册ID方法进行注册,直到2016年5月11日。
if (checkPlayServices()) {
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);
if (regid.isEmpty()) {
registerInBackground();
}
} else {
Log.i(TAG, "No valid Google Play Services APK found.");
}
APA91bHLUfr71D6K7VTrRH3LGiLFxGNr3qRi3xOB_yNl0fLYsqhlgYXxHzOhQx2WKgqZI3sqxa1ZPORa0-5YBZ1_OFLm9cEg1bTh7wtrpCsHW91MSs2BMIXrHEqyjj2TeoVxnAzA5U8s
google-services.json
文件?将其保存在YourProject\app
路径下。 - BNK