我在向我的Android应用中的设备组客户端添加GCM注册ID时遇到问题。我已按照https://developers.google.com/cloud-messaging/android/client-device-group的所有说明操作,但仍然获得了401 HTTP响应。我找到了以下帖子,但没有人有答案......
我已成功从GoogleSignInApi获取身份验证令牌以及Google的说明中提供的方法,但两者都回复了401回复。我已确保在Google Developer Console中使用客户端ID作为Web应用程序但仍然没有运气。这是我的代码片段......
URL url = new URL("https://android.googleapis.com/gcm/googlenotification");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
// HTTP request header
con.setRequestProperty("project_id", getString(R.string.gcm_defaultSenderId));
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");
con.connect();
String accountName = getAccount();
//Initialize the scope using the client ID you got from the Console.
final String scope = "audience:server:client_id:"
+ "MY_WEB_APP_CLIENT_ID";
String idToken = "";
try {
idToken = GoogleAuthUtil.getToken(this, sharedPref.getString("googleEmail", ""), scope);
} catch (Exception e) {
e.printStackTrace();
}
// HTTP request
JSONObject data = new JSONObject();
data.put("operation", "add");
data.put("notification_key_name", "my_group_name");
data.put("registration_ids", new JSONArray(Arrays.asList(registrationId)));
data.put("id_token", idToken);
OutputStream os = con.getOutputStream();
os.write(data.toString().getBytes("UTF-8"));
os.close();
int responseCode = con.getResponseCode();
我不认为这个HTTP帖子请求很重要,但我也确保正确的项目和客户端ID(android)存储在我的google-services.json中。管理设备组的客户端是否有任何成功?如果是这样,我的代码与您的代码有什么不同?
答案 0 :(得分:0)
如果没有服务器API密钥,我不确定是否可以这样做。 401错误表示如果该URL用于设备组设置,则应包含某种HTTP授权标头。
我最好的建议是使用客户端密钥库机制(http://developer.android.com/training/articles/keystore.html)很好地隐藏服务器API密钥。
有关如何使用SERVER_API键执行整个操作的详细信息,请参阅此处:Google Cloud Messaging (GCM) with local device groups on Android gives HTTP Error code 401
希望这会有所帮助。 : - )