2015-11-24 2 views
1

У меня возникли проблемы с добавлением идентификаторов регистрации GCM на клиентскую сторону группы устройств в приложении для Android. Я выполнил все инструкции от https://developers.google.com/cloud-messaging/android/client-device-group, но продолжаю получать ответ HTTP 401. Я нашел следующие должности, но ни у кого нет ответа ...Управление группами устройств на основе клиентских устройств 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. Кто-нибудь имел успех в управлении группами клиентов устройств? Если да, то что в моем коде отличается от вашего?

+0

Попробуйте это официальное репо в группе устройств, нажмите здесь: https://github.com/google/gcm/tree/master/samples/android/gcm-demo и захватите некоторые идеи. – bjiang

+0

К сожалению, демонстрация использует на стороне сервера, где используется ключ API. Я хочу избежать использования этого ключа на клиенте по соображениям безопасности. –

+0

У меня такая же проблема, нашли ли вы решение? – greywolf82

ответ

0

Я не уверен, что это возможно сделать это без ключа сервера API. Ошибка 401 указывает, что какой-то заголовок HTTP-авторизации должен быть включен, если этот URL-адрес используется для настройки группы устройств.

Мое лучшее предложение - сохранить ключ API сервера хорошо скрытым с помощью клиентского механизма хранилища ключей (http://developer.android.com/training/articles/keystore.html).

Для получения дополнительной информации о том, как делать делать все это с помощью ключа SERVER_API, пожалуйста, смотрите здесь: Google Cloud Messaging (GCM) with local device groups on Android gives HTTP Error code 401

Надеется, что это помогает. :-)

+0

Я пытался использовать ключ апи даже на клиенте, но ответ всегда 401 с сервера. Кажется, клиентская сторона группы устройств полностью сломана. – greywolf82

Смежные вопросы