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

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

 

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


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

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

  • 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=цифра

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


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

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

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

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

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

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

Войти

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

Войти


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

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