Перейти к содержанию
Fire Monkey от А до Я

Kitty

Пользователи
  • Постов

    792
  • Зарегистрирован

  • Посещение

  • Победитель дней

    16

Весь контент Kitty

  1. Вроде все сделал как надо. Тестирую на стенде где было собрано давно нормальное приложение. Теперь добавляю приложение с пушами... и не работает... Теперь или баг С++ Builder или моя тупость при работе с ios...
  2. А зачем? Все работает и на С++. Был баг. Его решили. Равиль помог определить и суппорт быстро решил. А что в делфи багов нет? Из-за бага менять язык? Нет.
  3. И снова наш любимый ios для домохозяек...:) Нормально запустить дебаг не получается так как все время: Session ended Однако с помощью лейбл имеем такое: FDeviceToken = FPushService->DeviceTokenValue[TPushService_TDeviceTokenNames_DeviceToken]; //добавлено для теста Label1->Text = L"Что тут? " + FDeviceToken; и видим что FDeviceToken пустой. Куда копать? Спасибо.
  4. В общем все нормально и заголовок и перенос текста работает. Видимо один раз был сбой, но это совсем не проблема. Спасибо за статью! Все работает и пуши живут теперь и в билдере. P.S. На будущее по возможности напишите понятную статью, а как обойти ограничение на 1000 пользователей. А так все работает. Только отменила ShowMessage(aText) на посылку Notification, а то два подряд ShowMessage не очень.
  5. Удалось разбить перенос строк в уведомлении. Однако теперь заголовок игнорируется и выводиться всегда название приложения. Так и должно быть? Спасибо.
  6. А как правильно сформировать ссылку? {"status":"ERROR","text":"Параметр `title` не передан"}
  7. Что-то не получается перенос строк в пуш уведомлении. Сделала как в последнем посте темы: перенос строк А строки в этом проекте не переносятся. А еще вопрос, можно послать пуш без заголовка? Спасибо.
  8. Если при открытом приложение срабатывает два раза OnReceiveNotificationEvent, может заменить ShowMessage тоже на сообщение в шторку? Вторая сработка чистит первую и со стороны вроде работает для пользователя: void __fastcall TForm1::OnReceiveNotificationEvent(TObject *Sender, TPushServiceNotification* const ANotification) { ClearAllNotification(); const String FCMSignature = L"gcm.notification.body"; const String GCMSignature = L"message"; const String APNsSignature = L"alert"; String aText = ""; TJSONValue * aObj; #if defined(__ANDROID__) aObj = ANotification->DataObject->GetValue(GCMSignature); if(aObj != NULL) { aText = aObj->Value(); } else { aText = ANotification->DataObject->GetValue(FCMSignature)->Value(); } #endif #if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__)) aObj = ANotification->DataObject->GetValue(APNsSignature); if (aObj != NULL) { aText = aObj->Value(); } #endif //ShowMessage(aText); //шлем Notification if (NotificationCenter1->Supported() && aText != "") { TNotification * myNotification = NotificationCenter1->CreateNotification(); __try { NotificationCenter1->CancelAll(); myNotification->AlertBody = aText; NotificationCenter1->PresentNotification(myNotification); } __finally { myNotification->DisposeOf(); } } }
  9. Kitty

    [Андроид] java.io.IOException

    Проект нормально компилировался в режиме дебаг. При переходе в режим релиз возникла ошибка на картинке. Затем сдела Build All и снова попробовала запустить - ошибка пропала. С чем это может быть связано, на что обратить внимание?
  10. Подскажите, пожалуйста, в чем может быть дело? В базе вижу одну запись. Отправила пуш в строке браузера ({"status":"OK"}) и код ниже почему-то отработал два раза и я получила два одинаковых друг за другом ShowMessage? void __fastcall TForm1::OnReceiveNotificationEvent(TObject *Sender, TPushServiceNotification* const ANotification) { const String FCMSignature = L"gcm.notification.body"; const String GCMSignature = L"message"; const String APNsSignature = L"alert"; String aText = ""; TJSONValue * aObj; #if defined(__ANDROID__) aObj = ANotification->DataObject->GetValue(GCMSignature); if(aObj != NULL) { aText = aObj->Value(); } else { aText = ANotification->DataObject->GetValue(FCMSignature)->Value(); } #endif #if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__)) aObj = ANotification->DataObject->GetValue(APNsSignature); if (aObj != NULL) { aText = aObj->Value(); } #endif ShowMessage(aText); } А если приложение выгрузить и послать пуш, то в шторке одно уведомление как и положено...
  11. Нормально ведет. Начиная с 8:17 до 12:00 минуты видео: *На слайде сказано: используйте unigue_ptr везде где возможно - Use unigue_ptr where possible. *Не используйте new/delete https://youtu.be/14w26ACHrII
  12. Большое спасибо!!! Теперь код крепче.
  13. Ошибку можно поймать если из консоли послать пуш с не заполненными messsge title, а когда пуш прийдет тапнуть по нему. Эти действия не правильные, поля надо заполнять, просто доп. проверка в коде могла бы наверное пригодиться...
  14. Просто подскажите как вы на паскале обработали бы это исключение?
  15. Kitty

    Error: segmentation fault 11

    void __fastcall TForm1::OnReceiveNotificationEvent(TObject *Sender, TPushServiceNotification* const ANotification) { String MessageText = ""; // Получаем текст сообщения в зависимости от платформы #if defined(__ANDROID__) MessageText = ANotification->DataObject->GetValue("message")->Value(); #endif #if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__)) MessageText = ANotification->DataObject->GetValue("alert")->Value(); #endif if (MessageText != "") ShowNotification(MessageText, 0); } Все чтобы я не делала на срроке MessageText = ANotification->DataObject->GetValue("message")->Value(); получаю Error: segmentation fault 11
  16. Спасибо получилось. Для таких не умных как я, которые не понимают, что в консоли FCM надо писать самой: 1. Откройте дополнительные параметры в консоли FCM . 2. В первом поле КЛЮЧ принудительно самостоятельно напечатайте "mеssage" без ошибок в первом поле. В поле напротив напишите текст сообщения. 3. При этом появиться дополнительные поля ввода ниже. 4. В первом новом поле ниже напишите принудительно title без ошибок и напротив в значении ваш текст...
  17. Я могу предоставить вам доступ по TeamViewer. Нет у меня в консоли message и title, что и показано в картинке выше.
  18. void __fastcall TForm1::OnReceiveNotificationEvent(TObject *Sender, TPushServiceNotification* const ANotification) { String JsonMemberName; String JsonMemberValue; std::unique_ptr<TJSONValue> LJSONValue(TJSONObject::ParseJSONValue(ANotification->Json->ToString())); TJSONObject *LJSONObject = dynamic_cast<TJSONObject*>(LJSONValue.get()); if(LJSONObject != NULL) { TJSONPair * JSONPair; for (int i = 0; i < LJSONObject->Count; i++) { JSONPair = LJSONObject->Pairs[i]; if(JSONPair != NULL) { JsonMemberName = JSONPair->JsonString->Value(); JsonMemberValue = JSONPair->JsonValue->ToString(); if(JsonMemberName == L"gcm.notification.body") { ShowMessage(JsonMemberValue); } } } } if(JsonMemberValue != "" ) { ShowNotification(JsonMemberValue, 0); } } procedure ShowNotification(MessageText : string; BadgeNumber : integer); var NotificationC: TNotificationCenter; Notification: TNotification; begin // Создаём центр уведомлений и уведомление для отправки NotificationC := TNotificationCenter.Create(nil); Notification := NotificationC.CreateNotification; try // Если центр уведомлений поддерживается системой if NotificationC.Supported then begin // Устанавливаем текст сообщения Notification.AlertBody := MessageText; // Включаем звук при выводе сообщение Notification.EnableSound := true; // Устанавливаем цифру на иконке приложения Notification.Number := BadgeNumber; NotificationC.ApplicationIconBadgeNumber := BadgeNumber; // Выводим сообщение из приложения NotificationC.PresentNotification(Notification); end; finally // Очищаем переменные Notification.DisposeOf; NotificationC.Free; NotificationC.DisposeOf; end; end; end. В ShowMessage вижу нормальное сообщение, а шторке вижу название пакета, а не само сообщение..
  19. Я не понимаю где надо дублировать заголовок и сообщение в пользовательских данных, поэтому и прошу помочь в этом в этом вопросе. Где в консоли message - мое сообщение title - мой заголовок Где это??? Своим путем, чтобы добраться до сообщения из FCM сделала такой код. Работает, но это не то, чтобы хотелось: void __fastcall TForm1::OnReceiveNotificationEvent(TObject *Sender, TPushServiceNotification* const ANotification) { String JsonMemberName; String JsonMemberValue; std::unique_ptr<TJSONValue> LJSONValue(TJSONObject::ParseJSONValue(ANotification->Json->ToString())); TJSONObject *LJSONObject = dynamic_cast<TJSONObject*>(LJSONValue.get()); if(LJSONObject != NULL) { TJSONPair * JSONPair; for (int i = 0; i < LJSONObject->Count; i++) { JSONPair = LJSONObject->Pairs[i]; if(JSONPair != NULL) { JsonMemberName = JSONPair->JsonString->Value(); JsonMemberValue = JSONPair->JsonValue->ToString(); if(JsonMemberName == L"gcm.notification.body") { ShowMessage(JsonMemberValue); } } } } }
×
×
  • Создать...