Меню

Отправка сообщения 1 через gcm завершилась ошибкой error deprecatedendpoint

Ошибка при вызове метода контекста отправить GCM

В 1С толстом клиенте, пользователь нажимает кнопку «Отправить уведомление участникам бонусной системы», далее 1С-конфигурация отправляет сообщение через сервис «Google Cloud Messaging» на приложение, установленное на устройстве, которое выводит «Push». 

Вот такой ранее работающий код отправки сообщений из 1С 8.3:

Ключ  = "2323423"; //id полученный на developers.google.com, он намного сложней, это пример

Уведомление = Новый ДоставляемоеУведомление;
DeviceId = Выборка.DeviceId; //переданное с устройства, такое же сложный как на сервере
Если Не ПустаяСтрока(DeviceId) Тогда
      Получатель = ПолучитьПолучателя(DeviceId);
      Уведомление.Получатели.Добавить(Получатель); //Вот здесь был массив получателей
Иначе
       продолжить;
КонецЕсли;
Уведомление.Заголовок = "Message";
Уведомление.Текст = Заголовок;;
Уведомление.Данные = Сообщение;
Если Уведомление.Получатели.Количество() > 0 Тогда
Попытка
   ОтправкаДоставляемыхУведомлений.Отправить(Уведомление,Ключ);

Исключение

КонецПопытки;

КонецЕсли;

//Взята из публикации http://info.capitally.ru/public/394486/ замена для GCM
Функция ПолучитьПолучателя(DeviceID,_Тип = "GCM") Экспорт

xdtoПодписчик = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.3/data/ext","DeliverableNotificationSubscriberID"));
xdtoПодписчик.DeviceID = DeviceID;
xdtoПодписчик.SubscriberType = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.3/data/ext","DeliverableNotificationSubscriberType"), _Тип);
НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
Подписчик = НовыйСериализаторXDTO.ПрочитатьXDTO(xdtoПодписчик);

Возврат Подписчик;

КонецФункции

Вывел вот такую ошибку

oshibka-pri-vyzove-metoda-konteksta-otpravit-gcm

Полный текст:

Ошибка при вызове метода контекста (Отправить): Отправка  сообщения 1 через GCM завершилась ошибкой

С чем связано ошибка, предположения:

  • превышение длины сообщения
  • выпали device из установленных
  • при тестировании количество устройств было меньше
  • удален, аннулирован ключ в  Api гугл, изменены права

Решение проблемы отправки:

Банально переписан код на отправку одного сообщения каждому устройству. 

  • Грозит, залипанием интерфейса при больших списках устройств, но, если это гарантирует отправку, это нормальное решение.
  • При этом ошибка не вылетела ни на одном устройстве — происходит только при пакетной отправке.
  • Также  этот алгоритм позволяет отслеживать надолго выпадающие устройства и убирать их из рассылки (если ошибка все-таки будет возникать)

Вести бизнес без рекламы все равно, что подмигивать девушкам в полной темноте

I am getting DeprecatedEndPoint error when I am trying to send notification from PHP server.

I am using ‘com.google.firebase:firebase-messaging:11.8.0’ for FCM.

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    //noinspection GradleCompatible
//    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    //noinspection GradleCompatible
    implementation 'com.google.firebase:firebase-auth:11.8.0'
    implementation 'com.google.firebase:firebase-core:11.8.0'
    implementation 'com.google.firebase:firebase-messaging:11.8.0'

    implementation 'com.google.android.gms:play-services-auth:8.3.0'
    //noinspection GradleCompatible
    implementation "com.google.android.gms:play-services-gcm:9.2.1"
}

and below is my firebase java class which i have declared in my manifest file:

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();
    private String CHANNEL_ID = "1234";
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        final Uri alarmSound = Uri.parse("android.resource://com.clickaway.notificationdemo.pushnotificationdemo/raw/customsound");

        NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this, CHANNEL_ID)
                .setContentTitle(remoteMessage.getNotification().getTitle())
                .setContentText(remoteMessage.getNotification().getBody())
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setStyle(new NotificationCompat.BigTextStyle())
                .setDefaults(DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setAutoCancel(true);
        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());      
    }
}

<?php // Полная загрузка сервисных книжек, создан 2023-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='

Related Posts

  • Получение логина и пароля техподдержки 1С из базы
  • Класс для вывода отчета в ExcelКласс для вывода отчета в Excel
  • Счет-фактура для УПП
  • Библиотека классов для создания внешней компоненты 1С на C#
  • Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
  • Прайс-лист с артикулом в отдельной колонке

90 Comments

  1. Быстро пробежался, может, не заметил… Какие преимущества у этого сервиса по сравнению с тем, что предоставляет сама 1С?

    Reply

  2. А какой сервис у самой 1С? На сколько мне известно, то такого нет. Обращение идет к серверам гугла, эпла и т.д. Наоборот есть возможность это миновать, в менеджере отправки в методе Отправить есть возможность указать, что используется промежуточный сервис, но как это работает — не разбирался.

    Еще можно напрямую через http-запрос отправить через любой сторонний сервис, но опять же не сервера 1С. Или быть может речь про локальные уведомления самой мобильной платформы?

    Reply

  3. (2) Я говорю про этот сервис —

    https://pushnotifications.1c.com

    Да, это промежуточный сервис, который обращается к нативным сервисам платформ.

    Просто его настройка и использование намного проще, чем рассказано у вас в статье. Вот и интересуюсь, стоит ли оно того?

    Reply

  4. (3) не знал про такой сервис от 1С, будет нужно — разберусь как им пользоваться. А так, мне думается, что все будет тоже самое, кроме получения ключа сервера и номера проекта. Если так, то в чем сложность моего способа?

    Reply

  5. супер! надо обязательно протестировать функционал. штука однозначно нужная.

    Reply

  6. Вопрос, тестировали как ведет себя обработка пуш уведомления если мобильное приложение выгружено из памяти? Всмысле показывается ли пуш средствами ОС или будет показан только когда запустится мобильное приложение или вообще не будет показан?

    Еще вопрос, пробовал ли оправлять пуш из консоли firebase?

    И еще вопрос, пуш успешно получен когда мобильное приложение собрано сборщиком и установлен на девайс или установленным мибильным приложением в «режиме разработки»?

    Reply

  7. (6) Если приложение выгружено из памяти, то ничего не происходит, к сожалению. Когда запускаешь 1С все сообщения приходят сразу. Хотя я где-то читал, что должны пуши приходить и когда выгружено приложение из памяти.

    В консоли firebase не разбирался, пока не было времени и необходимости.

    Пуш будет получен и если приложение собрано в apk и если опубликовано на вэб-сервере, т.е. в «режиме разработки» (в статье именно 2 вариант)

    Reply

  8. (7) Спасибо за ответы, пару недель тоже экспериментировал с пушами, делал все как в статье за исключением того, что пробные пуши отправлял прямо из консоли firebase. При этом консоль показывала что пуш отправлен, но мобильное приложение ни в какую не хотело его принимать. У меня все-таки подозрение, что в статье описана работа с GСM, а не FCM. Вроде разница между ними небольшая и пока в FCM сохраняется обратная совместимость с GCM, но все-такие какая-то разница есть. Например в проектах react-native требуются определенные телодвижения для перехода с GCM на FCM (правка файла манифеста приложения)

    Если будет время прошу попробовать все-таки отправить пуш из firebase консоли (firebase консоль — Notifications — Новое сообщение) и посмотреть пример ли его мобильная платформа. Тогда поймем действительно ли мобильная платформа принимает именно FCM пуши.

    Reply

  9. Так, подтвердились нехорошие опасения. Мобильная платформа не видит FCM пушей, только GSM. У firebase на днях появилась замечательная фишка cloud functions. Их например можно использовать для отправки пушей мобильной платформе, триггером события при этом является изменение данных в узле firebase database. Так вот внутри этих cloud functions используются именно FCM, а не GCM. Я тестировал так: задеплоил простую функцию, собрал простое приложение на react-native. Так вот, это нативное приложение пуши из cloud function отправленные при помощи FCM принимает замечательно, а мобильное приложение нет =(

    И я так понимаю в кишки мобильного приложения залезть не получится и поправить это, только ждать пока 1с это сами реализуют.

    Reply

  10. Уведомление = Новый ДоставляемоеУведомление;
    Уведомление.Получатели.Добавить(«12345);
    Уведомление.Текст = «Текст уведомления»;
    Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.Нет;
    Уведомление.Наклейка = 2;
    
    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, «PUSH_SRV_API_KEY_12345»);
    

    Показать

    Получаю ошибку:

    Ошибка при вызове метода контекста (Отправить)

    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, «PUSH_SRV_API_KEY_12345»);

    по причине:

    Несоответствие типов (параметр номер ‘1’)

    Принимаемые типы первого параметра:

    <Уведомление> (обязательный)

    Тип: ДоставляемоеУведомление, Массив.

    Что я делаю не так?

    Reply

  11. (10) Судя по Вашему коду Вы в Получатели добавляете просто строку, а нужно ИдентификаторПодписчикаДоставляемыхУведомлений

    Reply

  12. (11) Точно, спасибо!

    Reply

  13. Нашёл вашу статью — хорошая статья, но успел всё сделать похожим способом.

    Пока руки не дошли до полной реализации http сервера (чтобы весь ид передавать), сделал вот такую функцию для создания ИД на сервере по строке

    &НаСервереБезКонтекста
    Функция ПолучитьПолучателя(DeviceID, Type)
    
    xdtoПодписчик = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(«http://v8.1c.ru/8.3/data/ext»,»DeliverableNotificationSubscriberID»));
    xdtoПодписчик.DeviceID = DeviceID;
    xdtoПодписчик.SubscriberType = ФабрикаXDTO.Создать(
    ФабрикаXDTO.Тип(«http://v8.1c.ru/8.3/data/ext»,»DeliverableNotificationSubscriberType»)
    , ?(Type = Перечисления.ТипыУстройств.Андроид, «GCM», «APNS»)
    );
    
    НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    Подписчик = НовыйСериализаторXDTO.ПрочитатьXDTO(xdtoПодписчик);
    
    Возврат Подписчик;
    
    КонецФункции
    

    Показать

    Но на этапе получения исключённых

    масИсключения = ОтправкаДоставляемыхУведомлений.ПолучитьИсключенныхПолучателей(НаборКонстант.КлючДляGOOGLE);
    

    получаю ошибку

    «Не переданы данные для авторизации в сервисе отправки уведомлений»

    Ключик пробовал и «Ключ API 1» и серверный — всё равно реакция одна.

    Может вы сможете подсказать, куда копать ?

    Reply

  14. (13)

    ПолучитьИсключенныхПолучателей

    вроде как только для APNS работает эта штука, а Вы ключ гугл пытаетесь передать.

    Reply

  15. (14) Спасибо большое за наводку — и действительно ведь — написано в мануале.

    Теперь уже лучше — ошибка выглядит иначе

    «Отправка сообщения 1 через GCM завершилась ошибкой: ключ отправителя не подходит для получателя»

    Ну тут видимо всё же придётся передавать ИД целиком с сериализацией.

    Reply

  16. (15) Добрый день? Вам удалось разобраться с этой ошибкой? У меня есть 2 проекта: один был реализован 2 года назад и там пуши отправляются до сих пор, второй делаю сейчас и получаю эту же ошибку. Со стороны 1С у меня механизм идентичный, разница только в проектах Google (под новую задачу создал новый проект)

    Reply

  17. (16) В целом да — разобрался. Там проблема была в том, что получение массива отключенных работает только на яблоках.

    Могу поделиться примером базы — стучите.

    Reply

  18. (17) Спасибо, на свежую голову сам разобрался.

    Подытожу для истории: получить ключ сервера для GCM API на данный момент можно только в Firebase console. Вот

    тут

    подробно расписано. Конкретно я споткнулся на том, что из-за всех этих экспериментов с проектами гугла и ключами для их API я забыл перегенерировать идентификатор мобильного клиента и он оставался подписан на другой проект гугла.

    Reply

  19. (18)

    Скажите пожалуйста, как именно перегенерировать идентификатор мобильного устройства? Какие действия сделать?

    Reply

  20. (20) испробовал всякое, но так и не смог отправить (получить) сообщение

     Уведомление = Новый ДоставляемоеУведомление;
    
    Для каждого IDGCM Из IDGCMs.IDGCM Цикл
    
    Уведомление.Получатели.Добавить(IDGCM.Получить());
    
    КонецЦикла;
    
    Уведомление.Заголовок = «Заголовок»;
    Уведомление.Текст = «Текст»;
    Уведомление.Данные = «654654»;
    Уведомление.Наклейка = 2;
    Уведомление.ИнтервалПовтора = 0;
    Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.ПоУмолчанию;
    
    Если Уведомление.Получатели.Количество() > 0 Тогда
    Попытка
    мИсключенныеПолучатели = Новый Массив;
    мИнформацияОПроблемахОтправкиДоставляемыхУведомлений = Новый Массив;
    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, «AIzaSyCp1J…………………………jdazL8», мИсключенныеПолучатели,,мИнформацияОПроблемахОтправкиДоставляемыхУведомлений);
    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, «AAAApAOy1s4:…………………………………………………………………………………………………………………………….VHePtr2APYA39UWA7rl8IM4e9GYPzf7», мИсключенныеПолучатели,,мИнформацияОПроблемахОтправкиДоставляемыхУведомлений);
    Исключение
    
    КонецПопытки;
    КонецЕсли;
    
    

    Показать

    Пробовал ключ и новый и старый. По итогу в мИнформацияОПроблемахОтправкиДоставляемыхУведомлений получаю ошибку с «Не переданы данные для авторизации в сервисе отправки уведомлений.».

    Что блин я не так делаю?

    Reply

  21. Спасибо за статью. Все получилось. Только есть вопросы:

    1. Зачем обновлять ПодключитьОбработчикОжидания(«Подключаемый_ОбновитьIDПодписчика», 7200)?

    IDПодписчика у меня уже неделю один и тот же.

    2. Кому-то удалось все же получить Push при закрытом моб. приложении (у меня нет)?

    Вот что написано здесь:

    http://v8.1c.ru/o7/201502push/index.htm:

    Если мобильное приложение работает в фоновом режиме (неактивно) или вообще не исполняется (выгружено из памяти), то уведомление отображается операционной системой. При этом используется звуковое оповещение и наклейка. В iOS наклейка будет установлена у иконки мобильного приложения на домашнем экране, а в Android она задаёт число, которое будет отображено в сообщении на панели уведомлений. После того, как пользователь нажмёт на уведомление, будет активизировано (или запущено) мобильное приложение, и будет выполнен (если он подключён) обработчик уведомлений.

    Reply

  22. (21) Нужно в данные авторизации передать соответствие.

    ДанныеАвторизации = Новый Соответствие;
    ДанныеАвторизации.Вставить(ТипПодписчикаДоставляемыхУведомлений.GCM, КлючСервера);
    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, ДанныеАвторизации, ,,мИнформацияОПроблемахОтправкиДоставляемыхУведомлений);
    

    Reply

  23. Спасибо за статью. До этого все работало исправно, а потом случилось такая странность. (см. скриншот).

    При этом с этой ошибка платформа предлагает завершить работу, в исключение в коде не уходит

    Был до этого ключ GCM , потом импортировал в FCM и при этом все осталось так же

    Самое интересное что иногда проходит push иногда нет.

    И то ли проблема в нашем все таки окружении или в каких то изменениях у google.

    Сделано все через объекты 1с

    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление,ДанныеАвторизации)

    2. Непонятно что является ID проекта в FCM для получения идентификатора мобильного устройства , то ли Project ID , то ли Sender ID?

    Reply

  24. Ошибка одинаковая.

    проблема началась 27 февраля 2018 года

    Ранее работало без збоя.

    Решения в интернете не нашел.

    Есть решение данной проблемы?

    Платформа: 1С:Предприятие 8.3 (8.3.11.3034)

    Конфигурация: Сервер

    Режим: Файловый (без сжатия)

    Приложение: Тонкий клиент

    Локализация: Информационная база: украинский (Украина), Сеанс: русский

    Вариант интерфейса: Такси

    Ошибки:

    ———————————————————————————

    12.03.2018 16:44:00

    Ошибка работы с Интернет: Удаленный узел не прошел проверку

    Reply

  25. (25)

    Есть решение данной проблемы?

    Ошибка работы с Интернет: Удаленный узел не прошел проверку

    Подпишусь на обновления в теме. Такая же ошибка возникла недавно

    Reply

  26. (25)Одноэсники рекомендуют в таком случае на сервере включить лог CAPI2 и искать ошибку в момент отправки пуша. Большинству помогла установка сертификата (ошибки на него указывал лог) во вложении (тип хранилища — локально.

    Проблема в платформе, которая работает в режиме совместимости версии старше 8.3.7. Если есть возможность совместимость снять, то проверка сертификата будет выполняться средствами ОС.

    Мне установка сертификата не помогла. Работаю с УПП в режиме совместимости 8.2.13. Сегодня отпишу по разбору лога.

    Reply

  27. (27)

    Спасибо.

    Тоже увидели форум и там нашли решение. Нам установка сертификата помогла, мы в свое время заморочились и сняли совместимость.

    https://partners.v8.1c.ru/forum/topic/1694511#prettyPhoto

    Там есть вариант и без снятия совместимости через запросы напрямую, минуя объекты 1С. Идет активное обсуждение.

    Reply

  28. (28) С проблемой столкнулся только вчера вечером и для начала решил опробовать всё, что связано с ошибками сертификатов. По итогу скорее всего опишу прямой запрос т.к. в логах шаром покати, только ошибки при установке нового сертификата т.к. удостоверяющий центр не отвечает, а копать дальше уже сил нет =/

    Reply

  29. Смотрю, проблема существует и актуальна. полумеры с сертификатом не помогают.

    Также решил описать прямой запрос.

    Пока есть ошибки.

    Может скооперироваться та довести до логической работы прямой запрос.

    Вот мой текст запроса:

    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, » «, Истина));
    СтруктураЗапроса = Новый Структура;
    Данные = Новый Структура;
    СтруктураЗапроса.Вставить(«data», Новый Структура(«message,title»,»GCM Notifier:Message Success»,»GCM Notifier:Title Success»));
    Данные = Новый Структура;
    Данные.Вставить(«title»,»GCM Notifier:Title Success»);
    Данные.Вставить(«body», «GCM Notifier:Message Success»);
    Данные.Вставить(«sound»,»default»);
    Данные.Вставить(«badge»,»1″);
    СтруктураЗапроса.Вставить(«notification», Данные);
    
    //Можно так
    //СтруктураЗапроса.Вставить(«to», «APA91bFFUQHGAOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX­XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiA»);//То что генерируется в мобильном устройсве
    
    //Если отмпарвка нескольким то
    массивИД    = Новый Массив;
    массивИД.Добавить(«APA91bFFUQHGAOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX­XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiA»);//То что генерируется в мобильном устройсве
    СтруктураЗапроса.Вставить(«registration_ids», массивИД);
    
    СтруктураЗапроса.Вставить(«ApplicationID», «com.e1c.mobile»);
    ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
    strJSON = ЗаписьJSON.Закрыть();
    
    Соединение = Новый HTTPСоединение(«gcm-http.googleapis.com/gcm/send»);
    HTTPЗапрос = Новый HTTPЗапрос();
    HTTPЗапрос.Заголовки.Вставить(«Content-type», «application/json»);
    HTTPЗапрос.Заголовки.Вставить(«Authorization», «key=AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9o»);//Ключ Google
    HTTPЗапрос.УстановитьТелоИзСтроки(strJSON,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
    ОтветHTPP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    
    Сообщить(ОтветHTPP.ПолучитьТелоКакСтроку());
    
    //Ответ
    //{«multicast_id»:5396816832955369423,»success»:0,»failure»:1,»canonical_ids»:0,»results»:[{«error»:»MismatchSenderId»}]}

    Показать

    Reply

  30. (27)Мне помогло установка сертификата и добавление в конец файла cacert.pem ключ сертификата Symantec Class 3 Secure Server CA — G4

    ——BEGIN CERTIFICATE——

    MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEg­MB4G

    A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2Jh­bFNp

    Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjEx­MjE1

    MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjET­MBEG

    A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJ­KoZI

    hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6­ErPL

    v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeM­WhG8

    eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZf­Xklq

    tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKR­ILzd

    C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpR­l4pa

    zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOB­nDCB

    mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU­m+IH

    V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2Ny­bC5n

    bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwe­wGoG

    3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQL­q4Gs

    J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4­h4hO

    291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenV­OavS

    ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCM­NYxd

    AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRu­JQ/7

    TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGT­Lg==

    ——END CERTIFICATE——

    Reply

  31. Сначала все работало, потом стало выдавать

    Ошибка работы с Интернет: Удаленный узел не прошел проверку

    обновил платформу до 8.3.11.3034 теперь такая ошибка у меня:

    {ОбщаяФорма.ОтправитьPushсообщение.Форма(41)}: Ошибка при вызове метода контекста (Отправить)

    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, ЭтотОбъект.КлючСервера);

    по причине:

    Не переданы данные для авторизации в сервисе отправки уведомлений.

    Reply

  32. Если сделать, так то тоже ошибка

    ОтправкаДоставляемыхУведомлений.ПолучитьИсключенныхПолучателей(КлючСервера)

    Не переданы данные для авторизации в сервисе отправки уведомлений

    Reply

  33. аналогичная ошибка — перскочил платформу — если бы остался на 8.3.8 все бы работало

    Reply

  34. возникло предположение а не проблема ли это различия мобильной платформы и стационарной ид подписчика то получается в платформе 8.3.8 например и естественно посылая пуш с 8.3.11 будет ошибка сертификата — есть у кого время проверить гипотезу?

    Reply

  35. В 8.3.10 ошибка: Ошибка работы с Интернет: Удаленный узел не прошел проверку (раньше не было ошибок, до 8 марта)

    После этой ошибки я обновил платформу на 8.3.11, ошибка: Не переданы данные для авторизации в сервисе отправки уведомлений.

    Приложения для мобильника я не менял, ID подписчика всегда выдает один и тот же, он не изменен.

    Может настало время платить за сервис google?

    Reply

  36. (37) точно гугл не причем если локально запуститься на 8.3.8 отправка работает

    Reply

  37. запустил под 8.3.8 без использования режима совместимости ошибка пропадает но к сожалению не могу позвонить отключить совместимость. Есть еще другие решения этой задачи?

    Reply

  38. (36) установка мобильной платформы 8.3.11 картины не меняет с 8.3.11 стационарной ошибка а на 8.3.8 и даже 8.3.9 работает

    Reply

  39. (39) установка сертификата выше по сообщениям сработала GTSGIAG3.crt

    и еще замечание

    //так работает

    ДанныеАвторизации = Новый Соответствие;

    ДанныеАвторизации.Вставить(ТипПодписчикаДоставляемыхУведомлений.GCM, Ключ);

    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, ДанныеАвторизации);

    //а так можно было раньше, больше не работает

    //ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, Ключ);

    Reply

  40. Установил сертификат. версия 8.3.10.2667, переписал код — Все работает.

    Reply

  41. (43)

    ановил сертификат. версия 8.3.10.2667, переписал код

    А режим совместимости какой?

    Reply

  42. (44) РежимСовместимости 8.3.6.

    Reply

  43. (45) Еще раз уточню:

    1. Установили сертификат из (27)

    2. Сделали вызов как в (39)

    3. Режим совместимости оставили 8.3.6

    4. Платформа 8.3.10.2667

    И все работает?

    И какая у Вас ОС?

    Reply

  44. (44) мне нужна совместимость 8.3.8 всего то но проблема возникла у тех кто обновил платформу на 8.3.10 она возникла не просто из-за повышения совместимости а из-за смены платформы, с 8.3.9 не пробовал

    Reply

  45. (48) Неправда. Проблема возникла не из-за обновления платформы, а на пустом месте. Пришло время и старый сертификат истёк. Для сервера мало кто следит за сроками сертификатов.

    Вопрос уже был решен.

    Если режим совместимости 8.3.7+ то ищем сертификат GIA3 в консоле certmgr.msc и проверяем даты. Просроченный обновляем.

    Если 8.3.7 и менее, то пишем ключ сертификата в cacert.pem

    Reply

  46. (30) Я вот не понимаю, что делаю не так. Возвращает ошибку:

    Отправка сообщения 1 через GCM завершилась ошибкой: <HTML>

    <HEAD>

    <TITLE>Unauthorized</TITLE>

    </HEAD>

    <BODY BGCOLOR=»#FFFFFF» TEXT=»#000000″>

    <H1>Unauthorized</H1>

    <H2>Error 401</H2>

    </BODY>

    </HTML>

    Reply

  47. (50) на старых платформах данные авторизации лучше передавать строкой а начиная с совместимости 8.3.10 через соответствие

    Reply

  48. (51)В этом и проблема. использую соответствие и не использую режим совместимости. Платформа 8.3.12.

    Reply

  49. (23)

    ДанныеАвторизации = Новый Соответствие; ДанныеАвторизации.Вставить(ТипПодписчикаДоставляемыхУведомлений.GCM, КлючСервера);

    Мне этот совет помог.

    Пробовал

    на 8.3.11 в режиме совместимости с 8.3.8 — работает.

    на 8.3.8 без режима совместимости — работает.

    на 8.3.8 в режиме совместимости с 8.3.7 НЕ работает с ошибкой «Ошибка работы с Интернет: Удаленный узел не прошел проверку»

    на 8.3.7 без режима совместимости НЕ работает с ошибкой «Ошибка работы с Интернет: Удаленный узел не прошел проверку»

    использовал все самые последние варианты работы на момент 04.2018. firebase.google.com длинный ключ сервера.

    Скорее всего ниже совместимости с версией 8.3.8 отправка средствами 1с не работает.

    Reply

  50. ОС Windows 10 и Windows 2016 Server

    Платформа 8.3.11 и 8.3.12 (последние с сайта).

    Попытка отправить push на Андроид.

    На строке

    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, ДанныеАвторизации, , , МассивОшибокОтправкиPUSH);

    тонкий клиент просто крашится, и Windows предлагает «отладка» или «закрыть программу».

    В технологическом журнале пусто.

    Кто-нибудь сталкивался?

    Reply

  51. привет всем! много ваших советов помогло. но столкнулся с такой штукой. 1с-ка отправляет уведомление но приложение не отображает текст(пишет null). но когда отправляю с разных сайтов все получается. в чем может быть дело?

    Уведомление                    = Новый ДоставляемоеУведомление;
    Уведомление.Заголовок     = «111»;
    Уведомление.Текст      = «123»;
    Уведомление.Данные      = «213»;
    Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.ПоУмолчанию;
    
    xdtoПодписчик = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(«http://v8.1c.ru/8.3/data/ext»,»DeliverableNotificationSubscriberID»));
    xdtoПодписчик.DeviceID = «ID1»;
    xdtoПодписчик.SubscriberType = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(«http://v8.1c.ru/8.3/data/ext»,»DeliverableNotificationSubscriberType»), «GCM»);
    НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    Подписчик = НовыйСериализаторXDTO.ПрочитатьXDTO(xdtoПодписчик);
    Уведомление.Получатели.Добавить(Подписчик);
    ДанныеАвторизации = Новый Соответствие;
    ДанныеАвторизации.Вставить(ТипПодписчикаДоставляемыхУведомлений.GCM, «ID2»);
    МассивУв=Новый массив;
    МассивУв.Добавить(Уведомление);
    ОтправкаДоставляемыхУведомлений.Отправить(МассивУв, ДанныеАвторизации);
    
    
    
    

    Показать

    Reply

  52. (30)

    Может скооперироваться та довести до логической работы прямой запрос.

    Вот мой текст запроса:

    Oleg P, Получилось в итоге отправить таким запросом на андроид?

    Reply

  53. (52)

    м и проблема. использую соответствие и не использую режим совместимости. Платформа 8.

    Lvbnhbq?

    (52)Дмитрий, вам удалось решить данную проблему?

    У меня такая же ситуация

    Reply

  54. Спасибо, автору!!! После танцев с бубнами, но таки взлетело!

    8.3.12.1440 (без режима совместимости) и 8.3.11.61 (мобильная). Сертификат безопасности понадобился.

    Reply

  55. пробую сделать то же самое только для iOS

    в итоге не получается отправить сообщение.

    на сколько я знаю для отправки уведомления APNS необходимо в операторе во второй параметр «ДанныеАутентификации»

    ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, ДанныеАутентификации);

    подсунуть Файл сертификата (а не ключСервера, как это на андроиде), необходимый для подключения к службе доставки «Apple Push Notification Service» (расширение .pem). у кого-то получилось это сделать, если да, то какие были особенности, у меня что-то никак не взлетит и сертификат сгенерил и подсунул его в виде макета, но уведомление не проходят, ошибок со стороны 1с не выходит

    Reply

  56. Странно, но мне кажется что это GCM а не FCM….

    Reply

  57. Написал прямым запросом, как в (30), только добавил параметр защищенное соединение:

    АдресСервера = «fcm.googleapis.com/fcm/send»;
    
    ssl = Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаWindows(
    СпособВыбораСертификатаWindows.Выбирать),
    Новый СертификатыУдостоверяющихЦентровWindows());
    
    Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl);

    И еще. Долго бился, не мог понять почему приходит ответ Unauthorized, в итоге оказалось, что в консоли Firebase в свойствах проекта нужно брать ключ АПИ не из общих параметров а на закладке Cloud Messaging.

    Reply

  58. (60) Мне тоже кажется, что 1С до сих пор использует GCM а не FCM. Но я в принципе использую http запросы к этим сервисам. Стандартный класс 1С от версии к версии может вести себя не предсказуемо.

    Reply

  59. Всё ок, только что то не робит и пуш не приходит( Печаль беда. А ещё постоянно ругается на ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, КлючСервера);, так как думает что я это буду в мобилке юзать

    Reply

  60. Решил попробовать PUSH и уже на первом этапе застрял —

    IDПодписчика = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений(«10412********»);

    выдает ошибку

    {Обработка.Тест.Форма.Форма.Форма(498)}: Ошибка при вызове метода контекста (ПолучитьИдентификаторПодписчикаУведомлений)

    по причине:

    Не удалось получить идентификатор подписчика push-уведомлений.

    Мобильная платформа 8.3.12.74. Подскажите что не так то(

    Reply

  61. (64) если контекст вызова правильный — клиент мобильное приложение, тогда надо смотреть правильно ли заведен проект — из первого что приходит на ум, проверить разрешения на ip, которые могут получать идентификатор

    Reply

  62. (65) При создании проекта, уже по умолчанию устанавливаются ограничения по ip? Где это можно посмотреть? Все API включены, квоты по умолчанию.

    Reply

  63. (67) First of all, pay attention to the server address 192.168.0.14 (you need to change to your current one).

    Then make sure that the client sends the recipient’s identifier to the server (in the sending form, the lowest field should be filled in).

    And there are a lot of nuances with the publication of a web service and a mobile application.

    And of course here

    DeliverableNotificationSend.Send (Notification, ServerKey);

    must be changed to Соответствие (I do not know the English equivalent)

    Please provide more error information.

    Reply

  64. (41) user623969_dusa, огромное спасибо. Уже сломала голову и замучала техподдержку на v8. Две недели не отправлялись пуши на андроид. Грешила на смену мобильной платформы (как раз совпало, что перешли на 8.3.12), очередной перевыпуск сертификата гугла и прочее, а дело в маленьком кусочке кода

    Reply

  65. Как и у многих крашилось по

    Ошибка работы с Интернет: Удаленный узел не прошел проверку

    Перелопатил многие варианты… в итоге заработало по следующему сценарию:

    1. cacert.pem с сайта ИТС

    2. добавляем Google Internet Authority G3 (взять можно чуть ли не на любом компьютере сертификат с расширением .crt, преобразовать к pem по сценарию

    https://infostart.ru/public/79494/)

    WireShark по-прежнему ловит ошибку Unknown CA. Думал, что с моими манипуляциями что-то не то, а на деле все оказалось проще. Случайно обратил внимание, что сертификат GlobalSign в cacert.pem, служащий корневым для GIAG3, истек еще в 2014.

    3. добавляем актуальный GlobalSign в cacert.pem

    PROFIT

    Платформа: 1С:Предприятие 8.3 (8.3.11.2867)

    Режим совместимости: 8.3.4

    Клиент-сервер

    Reply

  66. Хотелось все это попробовать…

    Скачал архив. Создал базы. Что дальше делать — не понятно.

    Будьте добры, «разжуйте» для «чайников».

    Как это развернуть за пресловутые «20 минут» свободного времени?

    Reply

  67. (74) компилить мобильное приложение. Научить это делать за 20 не выйдет. Гилев за пять вечеров учит. Курс бесплатный.

    Так же вопрос автору. В качестве сервера может выступать второй мобильный клиент? Какая скорость такого общения? В шахматы в режиме онлайн сможет работать?

    Reply

  68. (75) МенеджерОтправкиДоставляемыхУведомлений не доступен на мобильном устройстве, так что push с МУ на МУ средствами мобильной платформы 1С отправить не получиться. Нужен посредник в виде десктопной платформы.

    Reply

  69. В начале статьи было сказано, что будет всё быстро и легко, но по факту всё вообще не понятно.

    Дебри Google, которые больше всего не понятны, в статье описаны очень криво картинки нереальные и обрезанные, от чего наступает полная дезориентация.

    Возможно у автора какая-то продвинутая консоль разработчика, но у меня она выглядит и я не нашел ни одного пункта описанного в статье.

    Через https://pushnotifications.1c.com всё получается намного проще в два клика и работает как часы. Но хотелось всё сделать без посредников.

    Код 1С элементарный к нему вопросов нет.

    Reply

  70. (61)

    АдресСервера = «fcm.googleapis.com/fcm/send»;

    ssl = Новый ЗащищенноеСоединениеOpenSSL(

    Новый СертификатКлиентаWindows(

    СпособВыбораСертификатаWindows.Выбирать),

    Новый СертификатыУдостоверяющихЦентровWindows());

    Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl);

    Руслан, не могли бы вы подсказать. Писал прямым запросом. Получается принимать пуш через параметр notification(т.е в фоновом режиме) , а вот с параметром data не получается. Пуш не приходит в открытом приложении

    Reply

  71. (80) Приложение нативное или на мобильной платформе?

    У меня формирование сообщения сделано вот так (по сути тело вставляется два раза, один раз для обработки на клиенте в фоновом режиме, другой для обычного режима)

    само сообщение: ТелоСообщения

    для уведомления: ПараметрыУведомления

    всё вместе: ПараметрыСообщения

     ТелоСообщения = Новый Структура;
    ТелоСообщения.Вставить(«title», ДанныеСообщения.Заголовок);
    ТелоСообщения.Вставить(«body», ДанныеСообщения.Сообщение);
    ТелоСообщения.Вставить(«document_guid», ДанныеСообщения.Идентификатор);
    
    ПараметрыУведомления = Новый Структура;
    ПараметрыУведомления.Вставить(«title», ДанныеСообщения.Заголовок);
    ПараметрыУведомления.Вставить(«body», ДанныеСообщения.Сообщение);
    ПараметрыУведомления.Вставить(«data», ТелоСообщения);
    
    ПараметрыСообщения = Новый Структура;
    ПараметрыСообщения.Вставить(«to», ТокенПолучателя);
    ПараметрыСообщения.Вставить(«data», ТелоСообщения);
    ПараметрыСообщения.Вставить(«notification», ПараметрыУведомления);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    
    
    ЗаписатьJSON(ЗаписьJSON, ПараметрыСообщения);
    СтрокаТелоЗапроса = ЗаписьJSON.Закрыть();

    Показать

    Reply

  72. (81)

    само сообщение: Тело

    Приложение нативное. Мне кажется, моя проблема в том, что на клиенте я неправильно делаю вывод сообщения. Буду признателен, если подскажите. Получается, в обработчик доставляемых уведомлений вы передаете ПараметрыУведомления?

    т.е как-то так?

    Процедура ПриНачалеРаботыСистемы()
    
    
    #Если МобильноеПриложениеКлиент Тогда
    ДоставляемыеУведомления.ПодключитьОбработчикУведомлений(«Подключаемый_ОбработкаУведомления»);
    
    #КонецЕсли
    
    КонецПроцедуры
    
    
    
    Процедура Подключаемый_ОбработкаУведомления(ПараметрыУведомления, Локальное, Показано)  Экспорт
    
    
    #Если МобильноеПриложениеКлиент Тогда
    Сообщить(ПараметрыУведомления);
    #КонецЕсли
    
    КонецПроцедуры
    

    Показать

    Reply

  73. (82) У меня моб. приложение на Java, по этому как надо сделать в 1С не подскажу..

    Reply

  74. (30)

    ЗаписьJSON = Новый ЗаписьJSON;

    Здравствуйте, получилось у вас довести запрос до рабочего состояния?

    Reply

  75. (78) Получилось ли доставить push уведомление на iOS устройство через https://pushnotifications.1c.com ? Если да, то подскажите, пожалуйста, в чем там отличие от отправки на android устройство.

    Reply

  76. (78) Есть инструкция как этим сервисом пользоваться?

    Reply

  77. Ребят, как поведет себя отправка через push уведомления от сервера к мобильным приложениям данных json? Причем json может быть огромным.

    Т.к. на стороне мобильной платформы нет http сервисов, универсальный обмен json не подойдет, т.к. отсылка идет со стороны сервера. Со стороны мобильного приложения запрашивать обновления и синхронизацию не хочу.

    Reply

  78. В СП

    МенеджерОтправкиДоставляемыхУведомлений (DeliverableNotificationSendManager)

    Примечание:

    Суммарная длина полей уведомления в системе APNS не может превышать 2 КБайт. Суммарная длина полей уведомления в системе GCM не может превышать 4 КБайт. При превышении установленного лимита будет сгененировано исключение.

    у меня 8.3.12 нет примечания к FCM, предполагаю там тоже есть ограничения

    Reply

  79. (88) Хмм. Сейчас не могу глянуть. Относится это к свойству «Данные»? Я вчера пробовал сделать, у меня уведомление с локальной тачки (сервер) отправляется, но на смартфон ничего не приходит. Попробую вечером ещё раз… (вроде делал всё по инструкции)

    Reply

  80. Всё получилось…

    Самое забавное, что суммарная информация передачи push уведомления по полям: «заголовок, текст, данные» — не должна превышать 2кб, иначе не приходит.

    Печаль, беда… Кто-нибудь сталкивался? есть пути обхода? Скажем, мне бы JSON передать, где 2000 символов, не получится…

    Reply

  81. (90)В данных сообщения передавай клиенту UID, по которому он сам заберет с сервера нужные данные.

    Reply

  82. (91) Да, согласен, но идея была сразу парсить JSON. Начитался, видимо придется так и делать.

    Есть идеи, как по другому с сервера сразу передавать данные на мобилку? Возможно, я загоняюсь уже =)

    Reply

  83. (92)

    Возможно, я загоняюсь уже =)

    думаю да. В свое время реализовывал по указанному выше пути. Все работает на «ура» и по сей день без сбоев.

    Reply

  84. (73) Почему нигде в документации 1С это не сказано?

    Reply

  85. (73) Можете дать готовый cacert.pem? Я так понял в предоставленном Вами уже вставлен GIAG3.txt, я попробовал добавить в конец еще GlobalSign.txt, но нифига, все равно вылетает та же ошибка. Какого черта, почему все так сложно? Почему не получается просто по ключу сервера, если в документации такой способ разрешен?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Ошибка при вызове метода контекста отправить GCM

Ошибка при вызове метода контекста отправить GCM

В 1С толстом клиенте, пользователь нажимает кнопку «Отправить уведомление участникам бонусной системы», далее 1С-конфигурация отправляет сообщение через сервис «Google Cloud Messaging» на приложение, установленное на устройстве, которое выводит «Push».

Вот такой ранее работающий код отправки сообщений из 1С 8.3:

Ключ = «2323423»; //id полученный на developers.google.com, он намного сложней, это пример

Уведомление = Новый ДоставляемоеУведомление;
DeviceId = Выборка.DeviceId; //переданное с устройства, такое же сложный как на сервере
Если Не ПустаяСтрока(DeviceId) Тогда
Получатель = ПолучитьПолучателя(DeviceId);
Уведомление.Получатели.Добавить(Получатель); //Вот здесь был массив получателей
Иначе
продолжить;
КонецЕсли;
Уведомление.Заголовок = «Message»;
Уведомление.Текст = Заголовок;;
Уведомление.Данные = Сообщение;
Если Уведомление.Получатели.Количество() > 0 Тогда
Попытка
ОтправкаДоставляемыхУведомлений.Отправить(Уведомление,Ключ);

//Взята из публикации http://info.capitally.ru/public/394486/ замена для GCM
Функция ПолучитьПолучателя(DeviceID,_Тип = «GCM») Экспорт

xdtoПодписчик = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(«http://v8.1c.ru/8.3/data/ext»,»DeliverableNotificationSubscriberID»));
xdtoПодписчик.DeviceID = DeviceID;
xdtoПодписчик.SubscriberType = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(«http://v8.1c.ru/8.3/data/ext»,»DeliverableNotificationSubscriberType»), _Тип);
НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
Подписчик = НовыйСериализаторXDTO.ПрочитатьXDTO(xdtoПодписчик);

Вывел вот такую ошибку:

Полный текст:

Ошибка при вызове метода контекста (Отправить): Отправка сообщения 1 через GCM завершилась ошибкой

С чем связано ошибка, предположения:

  • превышение длины сообщения
  • выпали device из установленных
  • при тестировании количество устройств было меньше
  • удален, аннулирован ключ в Api гугл, изменены права

Решение проблемы отправки:

Банально переписан код на отправку одного сообщения каждому устройству.

  • Грозит, залипанием интерфейса при больших списках устройств, но, если это гарантирует отправку, это нормальное решение.
  • При этом ошибка не вылетела ни на одном устройстве — происходит только при пакетной отправке.
  • Также этот алгоритм позволяет отслеживать надолго выпадающие устройства и убирать их из рассылки (если ошибка все-таки будет возникать)

Не экономьте на рекламе, охране и страховании.

Источник

Error=DeprecatedEndpoint about go-gcm OPEN

Related Issues (20)

  • Improve Docs
  • Enhance test coverage
  • Handle connection draining
  • Implement flow control
  • Priority should be string, not uint. HOT 1
  • App Engine support HOT 1
  • Function to validate format of device’s registration token HOT 1
  • Expose GCM as an interface for easier testing HOT 1
  • Potential problem with TimeToLive field in HttpMessage and XmppMessage HOT 4
  • Incorrect XMPP user string generation HOT 1
  • Web Push Encryption HOT 1
  • FCM HOT 5
  • Unmarshalling HttpRespose fails on dry runs
  • Refactored and improved project HOT 11
  • Proper error handling when sending XMPP message
  • Listen connection dropping — use model HOT 12
  • Long multicast_id HOT 1
  • sample code
  • Support configuration of the xmppAddress HOT 1

Recommend Projects

React

A declarative, efficient, and flexible JavaScript library for building user interfaces.

Vue.js

🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

Typescript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

TensorFlow

An Open Source Machine Learning Framework for Everyone

Django

The Web framework for perfectionists with deadlines.

Laravel

A PHP framework for web artisans

Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

javascript

JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

Some thing interesting about web. New door for the world.

server

A server is a program made to process requests and deliver data to clients.

Machine learning

Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

Visualization

Some thing interesting about visualization, use data art

Some thing interesting about game, make everyone happy.

Recommend Org

Facebook

We are working to build community through open source technology. NB: members must have two-factor auth.

Microsoft

Open source projects and samples from Microsoft.

Источник

Ошибка отправки push-уведомления из 1С на мобильное приложение 1С Android

Коллеги, прошу помощи.

С августа 2019 года перестали отправляться push-уведомления из 1С в мобильное приложение 1С (мобильная платформа 1С) на Andoid.
До этого момента всё отлично отправлялось.

Ошибка следующая :
» Ошибка при вызове метода контекста (Отправить): Отправка сообщения 1 через GCM завершилась ошибкой: Error=DeprecatedEndpoint «

Платформа 1С: 8.3.9.2170, 8.3.12.1567, 8.3.15.1534 (самая актуальная из 8.3);
Мобильная платформа 1С: 8.3.13.45, 8.3.15.59 (самая актуальная из мобильных).

Описание механизма (который работал больше года) :
1. Сторонние сервисы не используются.
2. Создан проект в firebase.google.com;
2.1 Получен номер проекта (как номер отправителя);
2.2 Получен ключ сервера (для отправки push-уведомлений);
3. В мобильном приложении 1С при каждом входе обновляется IDПодписчика.

Код отправки push-уведомления из основной базы :

Код получения IDПодписчика в мобильном приложении 1С :

В интернете обсуждений такой проблемы, связанной с 1С нет. Никто push-уведомления не использует что ли?
Есть что-то похожее на английских сайтах посвящённое разработке мобильных приложений на Андроид. Но там решения основанные на правках в самом коде приложений.

Я так понял это проблема/задача 1С? Т.е. в самой платформе нужно что-то изменить?

Просто странно, что даже на последних версиях платформы не решена проблема. И почему-то нет похожих вопросов в рунете по 1С.

Источник

Push сообщения с использованием Firebase cloud message

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с «///// echo» использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1.
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

Ошибка при вызове метода контекста (Отправить)

Несоответствие типов (параметр номер ‘1’)

Принимаемые типы первого параметра:

Тип: ДоставляемоеУведомление, Массив.

Что я делаю не так?

(10) Судя по Вашему коду Вы в Получатели добавляете просто строку, а нужно ИдентификаторПодписчикаДоставляемыхУведомлений

Нашёл вашу статью — хорошая статья, но успел всё сделать похожим способом.

Пока руки не дошли до полной реализации http сервера (чтобы весь ид передавать), сделал вот такую функцию для создания ИД на сервере по строке

Но на этапе получения исключённых

«Не переданы данные для авторизации в сервисе отправки уведомлений»

Ключик пробовал и «Ключ API 1» и серверный — всё равно реакция одна.

Может вы сможете подсказать, куда копать ?

вроде как только для APNS работает эта штука, а Вы ключ гугл пытаетесь передать.

(14) Спасибо большое за наводку — и действительно ведь — написано в мануале.

Теперь уже лучше — ошибка выглядит иначе

«Отправка сообщения 1 через GCM завершилась ошибкой: ключ отправителя не подходит для получателя»

Ну тут видимо всё же придётся передавать ИД целиком с сериализацией.

(15) Добрый день? Вам удалось разобраться с этой ошибкой? У меня есть 2 проекта: один был реализован 2 года назад и там пуши отправляются до сих пор, второй делаю сейчас и получаю эту же ошибку. Со стороны 1С у меня механизм идентичный, разница только в проектах Google (под новую задачу создал новый проект)

(16) В целом да — разобрался. Там проблема была в том, что получение массива отключенных работает только на яблоках.

Могу поделиться примером базы — стучите.

(17) Спасибо, на свежую голову сам разобрался.

Подытожу для истории: получить ключ сервера для GCM API на данный момент можно только в Firebase console. Вот тут подробно расписано. Конкретно я споткнулся на том, что из-за всех этих экспериментов с проектами гугла и ключами для их API я забыл перегенерировать идентификатор мобильного клиента и он оставался подписан на другой проект гугла.

Скажите пожалуйста, как именно перегенерировать идентификатор мобильного устройства? Какие действия сделать?

НомерПриложенияGCM = «123»; //идентификатор проекта гугл из Firebase Console

ИдентификаторПодписчика = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений(НомерПриложенияGCM);

(20) испробовал всякое, но так и не смог отправить (получить) сообщение

Пробовал ключ и новый и старый. По итогу в мИнформацияОПроблемахОтправкиДоставляемыхУведомлений получаю ошибку с «Не переданы данные для авторизации в сервисе отправки уведомлений.».

Что блин я не так делаю?

Спасибо за статью. Все получилось. Только есть вопросы:

1. Зачем обновлять ПодключитьОбработчикОжидания(«Подключаемый_ОбновитьIDПодписчика», 7200)?

IDПодписчика у меня уже неделю один и тот же.

2. Кому-то удалось все же получить Push при закрытом моб. приложении (у меня нет)?

Если мобильное приложение работает в фоновом режиме (неактивно) или вообще не исполняется (выгружено из памяти), то уведомление отображается операционной системой. При этом используется звуковое оповещение и наклейка. В iOS наклейка будет установлена у иконки мобильного приложения на домашнем экране, а в Android она задаёт число, которое будет отображено в сообщении на панели уведомлений. После того, как пользователь нажмёт на уведомление, будет активизировано (или запущено) мобильное приложение, и будет выполнен (если он подключён) обработчик уведомлений.

(21) Нужно в данные авторизации передать соответствие.

Спасибо за статью. До этого все работало исправно, а потом случилось такая странность. (см. скриншот).

При этом с этой ошибка платформа предлагает завершить работу, в исключение в коде не уходит

Был до этого ключ GCM , потом импортировал в FCM и при этом все осталось так же

Самое интересное что иногда проходит push иногда нет.

И то ли проблема в нашем все таки окружении или в каких то изменениях у google.

Сделано все через объекты 1с

2. Непонятно что является ID проекта в FCM для получения идентификатора мобильного устройства , то ли Project ID , то ли Sender ID?

проблема началась 27 февраля 2018 года

Ранее работало без збоя.

Решения в интернете не нашел.

Есть решение данной проблемы?

Платформа: 1С:Предприятие 8.3 (8.3.11.3034)

Режим: Файловый (без сжатия)

Приложение: Тонкий клиент

Локализация: Информационная база: украинский (Украина), Сеанс: русский

Вариант интерфейса: Такси

Ошибка работы с Интернет: Удаленный узел не прошел проверку

Ошибка работы с Интернет: Удаленный узел не прошел проверку

Подпишусь на обновления в теме. Такая же ошибка возникла недавно

(25)Одноэсники рекомендуют в таком случае на сервере включить лог CAPI2 и искать ошибку в момент отправки пуша. Большинству помогла установка сертификата (ошибки на него указывал лог) во вложении (тип хранилища — локально.

Проблема в платформе, которая работает в режиме совместимости версии старше 8.3.7. Если есть возможность совместимость снять, то проверка сертификата будет выполняться средствами ОС.

Мне установка сертификата не помогла. Работаю с УПП в режиме совместимости 8.2.13. Сегодня отпишу по разбору лога.

Тоже увидели форум и там нашли решение. Нам установка сертификата помогла, мы в свое время заморочились и сняли совместимость.

Там есть вариант и без снятия совместимости через запросы напрямую, минуя объекты 1С. Идет активное обсуждение.

(28) С проблемой столкнулся только вчера вечером и для начала решил опробовать всё, что связано с ошибками сертификатов. По итогу скорее всего опишу прямой запрос т.к. в логах шаром покати, только ошибки при установке нового сертификата т.к. удостоверяющий центр не отвечает, а копать дальше уже сил нет =/

Смотрю, проблема существует и актуальна. полумеры с сертификатом не помогают.

Также решил описать прямой запрос.

Пока есть ошибки.

Может скооперироваться та довести до логической работы прямой запрос.

Источник

Error=DeprecatedEndpoint about go-gcm OPEN

Related Issues (20)

  • App Engine support HOT 1
  • Function to validate format of device’s registration token HOT 1
  • Expose GCM as an interface for easier testing HOT 1
  • Potential problem with TimeToLive field in HttpMessage and XmppMessage HOT 4
  • Incorrect XMPP user string generation HOT 1
  • Web Push Encryption HOT 1
  • FCM HOT 5
  • Unmarshalling HttpRespose fails on dry runs
  • Refactored and improved project HOT 11
  • Proper error handling when sending XMPP message
  • Listen connection dropping — use model HOT 12
  • Long multicast_id HOT 1
  • sample code
  • Support configuration of the xmppAddress HOT 1
  • Improve Docs
  • Enhance test coverage
  • Handle connection draining
  • Implement flow control
  • Priority should be string, not uint. HOT 1

Recommend Projects

React

A declarative, efficient, and flexible JavaScript library for building user interfaces.

Vue.js

🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

Typescript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

TensorFlow

An Open Source Machine Learning Framework for Everyone

Django

The Web framework for perfectionists with deadlines.

Laravel

A PHP framework for web artisans

Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

javascript

JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

Some thing interesting about web. New door for the world.

server

A server is a program made to process requests and deliver data to clients.

Machine learning

Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

Visualization

Some thing interesting about visualization, use data art

Some thing interesting about game, make everyone happy.

Recommend Org

Facebook

We are working to build community through open source technology. NB: members must have two-factor auth.

Microsoft

Open source projects and samples from Microsoft.

Источник

I have been successfully calling this function in order to send a push notification to users in my app. My backend is firebase and I’m using Xcode. For some reason as of today, it started throwing an error. Im new to AF so I am pretty confused on what to do.. I’ve searched S.O for answers, but none of the previous questions have solid answers. Please any help, thanks.

Here is the function

func sendPushNotification(device: String){

    let title = "Hey check this out"
    let body = "They're waiting on your response"

    let toDeviceID = device
    var headers: HTTPHeaders = HTTPHeaders()

    headers = ["content_type":"application/json", "Authorization":"key=(AppDelegate.SERVER_KEY)"]

    let notification = ["to":"(toDeviceID)", "notification":["body":body, "title":title, "badge":1, "sound":"default"]] as [String:Any]

    AF.request(AppDelegate.NOTIFICATION_URL as URLConvertible, method: .post as HTTPMethod, parameters: notification, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
        print(response)

    }
}

The error I am getting is,

failure(Alamofire.AFError.responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 «Invalid value around character 0.» UserInfo={NSDebugDescription=Invalid value around character 0.})))

I have been successfully calling this function in order to send a push notification to users in my app. My backend is firebase and I’m using Xcode. For some reason as of today, it started throwing an error. Im new to AF so I am pretty confused on what to do.. I’ve searched S.O for answers, but none of the previous questions have solid answers. Please any help, thanks.

Here is the function

func sendPushNotification(device: String){

    let title = "Hey check this out"
    let body = "They're waiting on your response"

    let toDeviceID = device
    var headers: HTTPHeaders = HTTPHeaders()

    headers = ["content_type":"application/json", "Authorization":"key=(AppDelegate.SERVER_KEY)"]

    let notification = ["to":"(toDeviceID)", "notification":["body":body, "title":title, "badge":1, "sound":"default"]] as [String:Any]

    AF.request(AppDelegate.NOTIFICATION_URL as URLConvertible, method: .post as HTTPMethod, parameters: notification, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
        print(response)

    }
}

The error I am getting is,

failure(Alamofire.AFError.responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 «Invalid value around character 0.» UserInfo={NSDebugDescription=Invalid value around character 0.})))

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Отправка почты ошибка не работает bitrix vm
  • Отправка почтового сообщения больше 64кб ошибка отправлено время отправки