• 0
Anatoliy

Пуши в IOS

Вопросы

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

Делаю все согласно блога 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 новая запись не появилась. Похоже что-то упущено, однако ошибок никаких нет, поэтому непонятно куда копать...

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

39 ответов на этот вопрос

  • 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

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

соответственно, можем разобрать и делать что-нибудь свое

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Будем надеяться, что кто из гуру подскажет, как код ZuBy изменить для этой задачи...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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;, соответственно конструктор должен быть описан) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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