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

Пуши в IOS


Anatoliy

Вопрос

Здравствуйте.

Делаю все согласно блога ZuBy:

http://blog.rzaripov.kz/2017/02/firebase-android-ios.html

http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html

для попытки получать пуши на IOS. С Андроид все ОК.

Код отрабатывает нормально переменная FPushService инициализируется. Все выглядит нормально. Однако пуши не приходят. Пробовал отправить с консоли - результата нет, тишина. Посмотрел таблицу PushTokens новая запись не появилась. Похоже что-то упущено, однако ошибок никаких нет, поэтому непонятно куда копать...

Может подскажите, на что обратить внимание?

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Правильно ли я понимаю, что после публикации в apple store, следует вернуть параметр в false? Проверить пока никак не получаеться, т.к. apple store упорно отвергает приложение - пишет мало функционала в нем...

Ссылка на комментарий
  • 0

Прошу помощи!!!!!

Проблема схожая, поэтому напишу в эту ветку. Не приходят пуши на iOS. С Андроид все в порядке. Пересмотрел все статьи и форум тысячу раз, не могу понять, в чем проблема.

Чтобы сразу многие вопросы отсечь, отвечу

1. Приложение в стадии development (release), Delphi 10.1 up2 + xCode 8.2

2. Все сертификаты есть, все установлено и экспортировано в FireBase. Даже заново сделан provising profile с учетом внедрения push notification.

3. Регистрация PushServiceRegister проходит успешно, система отдает FDeviceToken

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

5. Для конвертации токена была написана процедура, вот ее возврат

{"results":[{"registration_token":"fB5GK_gykQ8:APA91bFtfKYsNbHIlsLEdx0P8BCCddVj2EC0yqFDNPS9sDvo1AHJC4Kc_ydWNZlNeuRUPSDKCjDRlYAAbUEJ3gvOiuBnsv28IgIbHRmfSFjQYq0Cg6wyma4WZrDs6pEMCRIrFuLYWJly","apns_token":"c20590d04800eb051dca60275861ec74a4a93674b4b8e348135a4ad3a04a7bb0","status":"OK"}]}

как видно токен валиден, правда я проверял, что если изменить цифры в apns_token то результат все равно положительный

 

6. Из консоли FireBase пытаюсь отослать пуш по известному токену, система ошибок не выдает, но пуш не приходит((((

7. Использованный SDK 10.2, на устройстве версия ios - 9.3.5

 

Если можно, прошу кого-нибудь сконвертировать на php-сервере вот такой apn токен (c20590d04800eb051dca60275861ec74a4a93674b4b8e348135a4ad3a04a7bb0) и сравнить с тем, что я получаю из процедуры

(fB5GK_gykQ8:APA91bFtfKYsNbHIlsLEdx0P8BCCddVj2EC0yqFDNPS9sDvo1AHJC4Kc_ydWNZlNeuRUPSDKCjDRlYAAbUEJ3gvOiuBnsv28IgIbHRmfSFjQYq0Cg6wyma4WZrDs6pEMCRIrFuLYWJly)

В параметрах конвертации Sandbox = true (приложение не выложено в AppStore). Ноя  пробывал и так и так, результат один.

 

Прошу помощи, уже 3 дня бьюсь!!!

 

 

Ссылка на комментарий
  • 0

Вот процедура конвертации токена APN в FCM

 

uses
  // RTL
  System.Net.HttpClient, System.Net.URLClient, System.NetConsts, System.Threading,
  // REST
  REST.Types;

const
  cSandboxValues: array[Boolean] of string = ('false', 'true');
  cHTTPResultOK = 200;
  cFCMIIDBatchImportURL = 'https://iid.googleapis.com/iid/v1:batchImport';
  cFCMAuthorizationHeader = 'Authorization';
  cFCMAuthorizationHeaderValuePair = 'key=%s';
  cResultsValueName = 'results';
  cStatusValueName = 'status';
  cRegistrationTokenValueName = 'registration_token';
  cStatusValueOK = 'OK';
  cFCMResultError = 'FCM Result Error: %s';
  cFCMJSONError = 'FCM Unexpected JSON: %s';
  cHTTPError = 'HTTP Error: %s. Response: %s';
  cFCMRequestJSONTemplate = '{ "application": "%s", "sandbox": %s, "apns_tokens": [ "%s" ] }';
  AAppBundleID = 'xxxxxxxxx';
  AServerKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';


procedure TForm1.Button2Click(Sender: TObject);
var
ARequest: string;
LStream: TStream;
  LHTTP: THTTPClient;
  LResponse: IHTTPResponse;
begin
ARequest:=Format(cFCMRequestJSONTemplate, [AAppBundleID, cSandboxValues[true], Edit1.Text]);
LStream := TStringStream.Create(ARequest);

  LHTTP := THTTPClient.Create;
  try
    LHTTP.CustomHeaders[cFCMAuthorizationHeader] := Format(cFCMAuthorizationHeaderValuePair, [AServerKey]);
    LHTTP.ContentType := CONTENTTYPE_APPLICATION_JSON;
    LResponse := LHTTP.Post(cFCMIIDBatchImportURL, LStream);
    if LResponse.StatusCode = cHTTPResultOK then
     Memo2.Lines.Add(LResponse.ContentAsString);
  finally
    LHTTP.Free;
  end;
LStream.Free;
end;

 

Изменено пользователем gonzales
Ссылка на комментарий
  • 0

Вопрос решился.

Есть одно дополнение в код ZyBy

Если необходимо обработать сообщение внутри программы правильный код будет такой

  // это событие срабатывает при открытом приложении
{$IFDEF ANDROID}
  // устраняем ошибку с чтением текста уведомления,
  // если уведомление отправлено из консоли firebase
  // и не заполнены дополнительные поля (message, title)
  aObj := ANotification.DataObject.GetValue(GCMSignature);
  if aObj <> nil then
    aText := aObj.value
  else
    aText := ANotification.DataObject.GetValue(FCMSignature).value;
{$ENDIF}
{$IFDEF IOS }
  aObj := ANotification.DataObject.GetValue(APNsSignature);
  if aObj <> nil then
    aText := (aObj as TJSONObject).GetValue('body').Value;
{$ENDIF}

 

Ссылка на комментарий
  • 0

Еще доп. накину на вентилятор, вдруг кому пригодится. Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра

Ссылка на комментарий
  • 1

После публикации в app store пуши перестали приходить. Помогло обратно вернуть в false

'sandbox' => false, и пуши пошли.

Таким образом, не знаю как у других, но у меня во время разработки пуши работают если 'sandbox' => true,  а после публикации в app store вернуть обратно 'sandbox' => false

Может кому пригодиться эта информация. Почему так не знаю.

Ссылка на комментарий
  • 0
51 минуту назад, Anatoliy сказал:

После публикации в app store пуши перестали приходить. Помогло обратно вернуть в false

'sandbox' => false, и пуши пошли.

Таким образом, не знаю как у других, но у меня во время разработки пуши работают если 'sandbox' => true,  а после публикации в app store вернуть обратно 'sandbox' => false

Может кому пригодиться эта информация. Почему так не знаю.

Все правильно, так и работает. При публикации в аппсторе sandbox (песочница) надо снять

Ссылка на комментарий
  • 0

Не знание про sandbox  и его настройках в PHP коде, заставило сильно помучиться... В свое время ZuBy замучила вопросами. :)

P.S.

А можно ли при нажатии на пришедший push, чтобы открывалась не главная форма приложения, а другая?

Ссылка на комментарий
  • 0

Не могли бы рассказать подробнее как это сделать? У меня главная форма А. Из неё можно вызвать форму В. Мне надо чтобы при нажатии на пришедший пуш открывалась форма В. Весь код моего приложения это код из блога ZuBy: http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html

Как изменить правильно этот код для этой задачи?

Спасибо.

Ссылка на комментарий
  • 0

не могу  с ходу найти пример в доках, с которого все начинают делать Notifications. Сам уже давно не касался этой темы...

там где-то при старте программы вроде сначала можно получить через NotificationCenter все notification для этой программы, которые система изготовила из пришедших пушей

ну а у Notification должен быть Message, где хранится JSON

стоит поспрашивать у коллег в чатике. кто помнит

 

 

Ссылка на комментарий
  • 0
В 10.06.2018 в 08:15, Kitty сказал:

Не могли бы рассказать подробнее как это сделать? У меня главная форма А. Из неё можно вызвать форму В. Мне надо чтобы при нажатии на пришедший пуш открывалась форма В. Весь код моего приложения это код из блога ZuBy: http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html

Как изменить правильно этот код для этой задачи?

Спасибо.

Так а в чем конкретно проблема?

В коде есть OnReceiveNotificationEvent - вызывается когда придет пуш. Соответственно вместо ShowMessage(aText); пишите вызов новой формы. Если она уже создана, то просто FormB.visible:=true;, если не создана, то вызов конструктора, (примерно так FormB:=TForm.Create;, соответственно конструктор должен быть описан) 

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...