У меня возникли проблемы с добавлением идентификаторов регистрации GCM на клиентскую сторону группы устройств в приложении для Android. Я выполнил все инструкции от https://developers.google.com/cloud-messaging/android/client-device-group, но продолжаю получать ответ HTTP 401. Я нашел следующие должности, но ни у кого нет ответа ...Управление группами устройств на основе клиентских устройств GCM
- get notification key error 401 gcm https://android.googleapis.com/gcm/googlenotification
- Google Cloud Messaging, returning 401 Unauthorized
- Google Cloud Messaging, 401 Unauthorized is returned when creating notification key from client
- How to successfully "Generate a Notification Key on the Client" with GCM?
Я успешно получаю маркер аутентификации из GoogleSignInApi и метод, указанный в инструкциях Google, но оба дают 401 ответ. Я убедился, что я использую идентификатор клиента для веб-приложения в своей консоли разработчика Google и все равно не повезло. Вот мой фрагмент кода ...
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, но я также обеспечил правильный проект и идентификатор клиента (Android) хранятся в моем Google-сервисах. JSON. Кто-нибудь имел успех в управлении группами клиентов устройств? Если да, то что в моем коде отличается от вашего?
Попробуйте это официальное репо в группе устройств, нажмите здесь: https://github.com/google/gcm/tree/master/samples/android/gcm-demo и захватите некоторые идеи. – bjiang
К сожалению, демонстрация использует на стороне сервера, где используется ключ API. Я хочу избежать использования этого ключа на клиенте по соображениям безопасности. –
У меня такая же проблема, нашли ли вы решение? – greywolf82