Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 基于GCM客户端的设备组管理_Android_Google Cloud Messaging - Fatal编程技术网

Android 基于GCM客户端的设备组管理

Android 基于GCM客户端的设备组管理,android,google-cloud-messaging,Android,Google Cloud Messaging,我在Android应用程序中将GCM注册ID添加到设备组客户端时遇到问题。我已经遵循了来自的所有说明,但不断得到401HTTP响应。我找到了以下帖子,但没有人有答案 我成功地从Google Signinapi和Google的说明中提供的方法获得了一个auth令牌,但都返回了401个响应。我已经确保在我的GoogleDeveloper控制台中使用Web应用程序的客户端ID,但仍然没有成功。这是我的代码片段 URL url = new URL("https://android.googl

我在Android应用程序中将GCM注册ID添加到设备组客户端时遇到问题。我已经遵循了来自的所有说明,但不断得到401HTTP响应。我找到了以下帖子,但没有人有答案

我成功地从Google Signinapi和Google的说明中提供的方法获得了一个auth令牌,但都返回了401个响应。我已经确保在我的GoogleDeveloper控制台中使用Web应用程序的客户端ID,但仍然没有成功。这是我的代码片段

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 post请求无关,但我也确保了正确的项目和客户端ID(android)存储在我的google-services.json中。是否有人成功地在客户端管理设备组?如果是这样的话,我的代码与您的代码有什么不同?

我不确定在没有服务器API密钥的情况下是否可以做到这一点。401错误表明,如果URL用于设备组设置,则应包含某种HTTP授权头

我的最佳建议是使用客户端密钥库机制()将服务器API密钥隐藏好

有关如何使用SERVER_API密钥执行整个操作的详细信息,请参见此处:


希望这有帮助。:-)

我不确定在没有服务器API密钥的情况下是否可以执行此操作。401错误表明,如果URL用于设备组设置,则应包含某种HTTP授权头

我的最佳建议是使用客户端密钥库机制()将服务器API密钥隐藏好

有关如何使用SERVER_API密钥执行整个操作的详细信息,请参见此处:


希望这有帮助。:-)

在设备组点击这里,尝试一下这个官方的repo:并获取一些想法。这个演示使用了服务器端的方法,其中使用了API密钥。出于安全原因,我希望避免在客户端上使用该密钥。我也遇到了同样的问题,您找到解决方案了吗?看起来通知\u密钥\u名称需要是获取您的id \u令牌的用户的电子邮件,请参阅。可能重复在设备组上尝试此官方repo点击此处:并获取一些想法。演示使用了使用API密钥的服务器端方法。出于安全原因,我希望避免在客户端上使用该密钥。我也遇到了同样的问题,您找到解决方案了吗?看起来通知密钥名称需要是获取您的id令牌的用户的电子邮件,请参阅。即使在客户端上,我也尝试使用api密钥,但响应始终是来自服务器的401。似乎设备组的客户端已完全断开。我甚至尝试在客户端上使用api密钥,但响应总是来自服务器。设备组的客户端似乎已完全断开。