Не удается отправить уведомление с помощью GCM для приложения Chrome, появляется сообщение "Недостаточно прав доступа"
Вот полные шаги, которым я следовал:
- Зарегистрировано приложение в Google Dev Console, включены API для
Google+ API
а такжеGoogle Cloud Messaging for Chrome
, - В разделе Credentials создан новый клиент типа
Web Application
, - Установите URI перенаправления обратно на мой сервер (работает на моем VPS). Теперь у меня есть
Client ID
а такжеClient Secret
- Использовал это
Client ID
а такжеClient Secret
чтобы получитьrefresh token
(отправивaccess_type=offline
) Используя это
refresh token
получил новыйaccess token
запустив следующее на моей локальной машине:curl -s https://accounts.google.com/o/oauth2/token -d "client_secret=<your client secret here>&grant_type=refresh_token&refresh_token=<your refresh token here>&client_id=<your client id here>" | grep "access_token" | awk -F\" '{print $4}'
Я установил официальный пример приложения на свою машину и после запуска показал мне идентификатор канала. Теперь я попытался отправить push-уведомление с
access token
приобрел ранее и егоchannel id
curl -s -H "Authorization: Bearer <ACCESS TOKEN HERE>" -H "Content-Type: application/json" https://www.googleapis.com/gcm_for_chrome/v1/messages -d "{'channelId': '<CHANNEL ID HERE>', 'subchannelId': '0', 'payload': 'Hello World'}"
Я получаю следующий ответ:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}
],
"code": 403,
"message": "Insufficient Permission"
}
}
Почему так? Как мне решить это? И я не внес никаких изменений в пример приложения Chrome. Я дважды искал инструкции и в коде, если я должен был упомянуть мой client id
, но, кажется, его не требуется. Значит ли это, что я могу отправить уведомление любому, если у меня есть их channel id
?
Идентификатор электронной почты, который я использовал для создания нового приложения, и адрес электронной почты, на котором я подписан в Chrome, такой же, если это имеет значение.
1 ответ
Процитирую из моей следующей книги: "Если вы боретесь с идентификаторами клиентов, секретами клиентов, URI перенаправления, токенами обновления и токенами доступа, у вас неправильный API". Используйте Google Cloud Messaging для Android. Не включайте Google Cloud Messaging для Chrome, так как это для старого API pushMessaging. Вы хотите использовать более новый GCM API. Документация по API GCM содержит ссылки на другую документацию, которую необходимо очень внимательно прочитать и точно следовать инструкциям. К счастью, GCM API примерно в 1000 раз проще в настройке и использовании, чем старый pushMessaging API.
Я не знаю, в какой степени примеры Google были обновлены, и даже для тех, которые были, терминология, использованная в примере, может быть устаревшей. Здесь есть еще один вопрос, возможно от вас, в котором пример смешивает ключ приложения с ключом API. Это беспорядок.