rustam_d
-
Постов
200 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Ответы сообщества
-
Пост rustam_d - сообщение в Notification был отмечен как ответ
у вас на компе...
Delphi\Samples\Object Pascal\Mobile Snippets\Notifications\SendCancelNotification
-
Пост rustam_d - сообщение в Push сообщения и Indy Tcp был отмечен как ответ
Эх давно это было, я не использовал SSL...не нужен он.
Код не глючил вроде.
procedure TForm1.Button1Click(Sender: TObject); var vIn, vOut: TStringStream; begin Memo1.Clear; try vIn := TStringStream.Create( '{"registration_ids":["' + Edit1.Text + '"],"data":{"title":"'+ 'Тест234' +'","message":"' + Edit2.Text + '"}}', TEncoding.UTF8 ); vOut := TStringStream.Create('',TEncoding.UTF8); pIdHTTP.Post('https://android.googleapis.com/gcm/send', vIn, vOut); Memo1.Lines.Add(vOut.DataString); Memo1.Lines.Add(vIn.DataString); if Pos('"success":1',vOut.DataString) > 0 then ShowMessage('Сообщение отправлено успешно!'); finally vIn.Free; vOut.Free; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin pIdHTTP.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin ID := 1; pIdHTTP := TIdHttp.Create(Self); pIdHTTP.Request.ContentType := 'application/json'; pIdHTTP.Request.CustomHeaders.AddValue('Authorization',CKey); end; еще можно и заголовок писать так http://fire-monkey.ru/topic/1659-gcm-push-soobscheniia-android-kak-dobavit-zagolovok/
-
Пост rustam_d - сообщение в GCM Push сообщения Андроид - как добавить Заголовок? был отмечен как ответ
Спасибо Евгению Корепову.
‘{"registration_ids":["' + Edit1.Text + '],"data":{"title":"Заголовок","message":"‘ + Edit2.Text + ‘"}}’ -
Пост rustam_d - сообщение в IOS Push сообщения на русском как? был отмечен как ответ
Я сделал это !!! И это бесплатно! )) Отправка ИОС пушей на русском из делфи больше не секрет!!! Полный исходник, максимально упрощенный. Можно указывать циферку на иконке(badge). Про войну с сертификатом SSL pem писал тут http://fire-monkey.ru/topic/1751-push-soobscheniia-ios-ne-mogu-soedinitsia-s-serverom-dlia-o/ procedure TForm1.Button2Click(Sender: TObject); var i: integer; s,c,t,m: string; vStr: TStringStream; begin m := EscapeString('Удачи друзья в FMX!'); //ready for unicode if not tcpclient.connected then tcpclient.connect; c := 'qwerqwerqwerqwerqwerqwerqwerqwerqwer'; //your token t := ''; for i := 0 to (length© div 2) - 1 do t := t + AnsiChar(Byte(('$'+copy(c,i*2+1,2)).ToInteger)); //token as hex s := '{"aps":{"alert":"'+ m +'","sound":"default","badge":0}}'; //payload s := #0#0#32 + t + #0 + AnsiChar(length(s)) + s; //push message vStr := TStringStream.Create(s); try SSLHandler.write(vStr); finally vStr.Free; end; end function TForm1.EscapeString(const AValue: string): string; const ESCAPE = '\'; REVERSE_SOLIDUS = '\'; SOLIDUS = '/'; BACKSPACE = #8; FORM_FEED = #12; NEW_LINE = #10; CARRIAGE_RETURN = #13; HORIZONTAL_TAB = #9; var AChar: Char; begin Result := ''; for AChar in AValue do begin case AChar of REVERSE_SOLIDUS: Result := Result + ESCAPE + REVERSE_SOLIDUS; SOLIDUS: Result := Result + ESCAPE + SOLIDUS; BACKSPACE: Result := Result + ESCAPE + 'b'; FORM_FEED: Result := Result + ESCAPE + 'f'; NEW_LINE: Result := Result + ESCAPE + 'n'; CARRIAGE_RETURN: Result := Result + ESCAPE + 'r'; HORIZONTAL_TAB: Result := Result + ESCAPE + 't'; else begin if (Integer(AChar) < 32) or (Integer(AChar) > 126) then Result := Result + ESCAPE + 'u' + IntToHex(Integer(AChar), 4) else Result := Result + AChar; end; end; end; end; object TCPClient: TIdTCPClient OnStatus = TCPClientStatus IOHandler = SSLHandler ConnectTimeout = 0 Host = 'gateway.sandbox.push.apple.com' IPVersion = Id_IPv4 Port = 2195 ReadTimeout = -1 Left = 328 Top = 48 end object SSLHandler: TIdSSLIOHandlerSocketOpenSSL OnStatus = SSLHandlerStatus Destination = 'gateway.sandbox.push.apple.com:2195' Host = 'gateway.sandbox.push.apple.com' MaxLineAction = maException Port = 2195 DefaultPort = 0 SSLOptions.CertFile = 'MyAPN.pem' SSLOptions.KeyFile = 'MyAPN.pem' SSLOptions.Method = sslvSSLv23 SSLOptions.SSLVersions = [sslvSSLv2, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2] SSLOptions.Mode = sslmClient SSLOptions.VerifyMode = [] SSLOptions.VerifyDepth = 0 Left = 328 Top = 108 end -
Пост rustam_d - сообщение в Push сообщения IOS не могу соединиться с сервером для отправки был отмечен как ответ
Разобрался такая ошибка возникает из-за путаницы сертификатов!
APN сертификат на сайте конечно надо заводить от девелопера, но это у меня и так было.
А вот в чем траблы были.
В связке ключей валялись сертификаты пушей моих экспериментов, но только по дате их отличишь.
Поэтому на всякий случай удалил ВСЕ сертификаты PUSH, тут же все еще на маке зашел в сафари
и скачал APN сертификат *.cer с сайта developer.apple.
Кликаем мышкой на этом сертификате и он отображается в связке ключей.
Затем находим ветку PUSH, открываем ее, ОБЕ строчки выделяем и сохраняем в MyPush.p12, пароль не нужен.
Далее уже на винде, утилитой ссл генерим pem файл
openssl pkcs12 -in MyPush.p12 -out MyPush.pem -nodes
жмем энтер и никаких паролей.
Далее в проекте делфи в SSLHandler заполняем что и гонсалес показал и cer и key указываем MyPush.pem.
Я потратил много времени на файлы и версии опенссл libeay32.dll и ssleay32.dll...но это НЕ ТО !!!
По прежнему все просто ложите в папку проекта эти файлы и не выносите мозг никому Wow64 или System32...или 0.9.8m,d,k? и т.п. бредом.
-
Пост rustam_d - сообщение в Push сообщения IOS - как получить токен ? был отмечен как ответ
xenon54 заработало, спс!
отсутствовал FMX.PushNotification.iOS в разделе uses
Why do I love you FMX!!!??? сколько крови он выпьет еще...я п'лачу...потерять неделю из-за такой ошибки...жесть
ведь компилиться без него...ком-пи-ли-ться!!!...
-
Пост rustam_d - сообщение в Что быстрее, эмулятор или телефон? был отмечен как ответ
Эмулятор да тормозит, жесть против ИОС эмулятора.
Лучше Андроид устройство какое нить по юсб или вафле (последнее сложнее в реализации).
Компиляция я бы сказал - невыносимая, даже по юсб.
Сделайте следующее:
- установите делфи и проекты ваши на SSD диск скажем 250гб (у меня самс ево 500 и операционка на нем)
- поставьте процессор core i7
после всего этого у вас компиляция будет всего на 95% отставать от VCL, против текущих 550%.
-
Пост rustam_d - сообщение в Как программно добраться до свойств стиля FixedHeight и FixedWidth? был отмечен как ответ
Как то с vcl еще привычка была наследоваться от базовых форм.
Тут она и пригодилась, в базовой форме можно все перегрузки и кидать, а в наследованной
все автоматом цепляется...проверенно, работает!
верхняя ссылка глючит, там про перегрузку контрола:
type TSpeedButton = class(FMX.StdCtrls.TSpeedButton) protected procedure AdjustFixedSize(const Ref: TControl); override; end; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; implementation {$R *.fmx} { TSpeedButton } procedure TSpeedButton.AdjustFixedSize(const Ref: TControl); begin SetAdjustType(TAdjustType.None); end; ну а далее мое предложение про наследование, зато код без мусора...он в предках...:
type TForm2 = class(TForm1)