rustam_d
-
Постов
200 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Сообщения, опубликованные rustam_d
-
-
Я сделал это !!! И это бесплатно! )) Отправка ИОС пушей на русском из делфи больше не секрет!!!Полный исходник, максимально упрощенный. Можно указывать циферку на иконке(badge).Про войну с сертификатом SSL pem писал тут http://fire-monkey.ru/topic/1751-push-soobscheniia-ios-ne-mogu-soedinitsia-s-serverom-dlia-o/procedure TForm1.Button2Click(Sender: TObject);vari: integer;s,c,t,m: string;vStr: TStringStream;beginm := EscapeString('Удачи друзья в FMX!'); //ready for unicodeif not tcpclient.connected then tcpclient.connect;c := 'qwerqwerqwerqwerqwerqwerqwerqwerqwer'; //your tokent := '';for i := 0 to (length© div 2) - 1 do t := t + AnsiChar(Byte(('$'+copy(c,i*2+1,2)).ToInteger)); //token as hexs := '{"aps":{"alert":"'+ m +'","sound":"default","badge":0}}'; //payloads := #0#0#32 + t + #0 + AnsiChar(length(s)) + s; //push messagevStr := TStringStream.Create(s);trySSLHandler.write(vStr);finallyvStr.Free;end;endfunction TForm1.EscapeString(const AValue: string): string;constESCAPE = '\';REVERSE_SOLIDUS = '\';SOLIDUS = '/';BACKSPACE = #8;FORM_FEED = #12;NEW_LINE = #10;CARRIAGE_RETURN = #13;HORIZONTAL_TAB = #9;varAChar: Char;beginResult := '';for AChar in AValue dobegincase AChar ofREVERSE_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';elsebeginif (Integer(AChar) < 32) or (Integer(AChar) > 126) thenResult := Result + ESCAPE + 'u' + IntToHex(Integer(AChar), 4)elseResult := Result + AChar;end;end;end;end;object TCPClient: TIdTCPClientOnStatus = TCPClientStatusIOHandler = SSLHandlerConnectTimeout = 0Host = 'gateway.sandbox.push.apple.com'IPVersion = Id_IPv4Port = 2195ReadTimeout = -1Left = 328Top = 48endobject SSLHandler: TIdSSLIOHandlerSocketOpenSSLOnStatus = SSLHandlerStatusDestination = 'gateway.sandbox.push.apple.com:2195'Host = 'gateway.sandbox.push.apple.com'MaxLineAction = maExceptionPort = 2195DefaultPort = 0SSLOptions.CertFile = 'MyAPN.pem'SSLOptions.KeyFile = 'MyAPN.pem'SSLOptions.Method = sslvSSLv23SSLOptions.SSLVersions = [sslvSSLv2, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]SSLOptions.Mode = sslmClientSSLOptions.VerifyMode = []SSLOptions.VerifyDepth = 0Left = 328Top = 108end
-
как раз таки проблема в переборе всех значение кроме нужного
с хранение проблем нет
я бы использовал ListView, грид совершенно не оправдан, т.к. нет более 6 полей, также интрефесно подход тоже сделал бы по другому
скажем выводил важную инфу в листвью, дале при нажатии уходил бы вправо на другой табшит и там правил, затем возвращался назад
а сохранение делал бы с нуля, очистил cds и залил бы конечный результат. пробегать по листвью не проблема, ставить на итемах галочки
аналогично
-
Добрый день использую локальное хранилище настроек подключения к сайту
ClientDataSet - XML
заметил такую особенность при закрытии программы под Windows все изменения будут перезаписаны в XML но при выгрузке приложение на IOS/Android сохранения результатов не происходит нужно в ручном режиме делать сохранение файла
ClientDataSet1.SaveToFile(ClientDataSet1.FileName);
подскажите как можно решить проблему
почему вас не устраивает ручное сохранение? циклов нет, кучи блоков нет, итераций ноль...нет повода отказываться от ручного...
если где-то теряете контроль или хотите быть уверенным с сохранении, то в критически важных местах просто еще раз сохраняйте, одна строка...эт разве проблема )
-
// Как теперь создать переменную класса, хранящегося в Control->TagString? // Возможно ли это?
можете описать конечную задачу? ну если не секрет конечно...мало ли...может идея на млн.$ тянет
просто путаницы будет гораздо меньше и получите дельный совет...а то вопросы у вас сейчас к делфи или билдеру чем к фмх...
-
не пытайтесь "подвести" под ведро...) мак это дело тонкое... если не пробовали то лучше промолчать...). обратили внимание на нолики? там ведь в байтах передача... не как в ведре... если решу проблему сообщу, и тогда весь мир стекется к моему посту, т. к. не нашёл в инете решений на делфи... ну может есть на провайдерах... но хочу простоты.Мне в свое время помогло:
vStr := TStringStream.Create(s, TEncoding.UTF8);
Как вариант, если не выйдет, то разместить php скрипт где нибудь на хостинге и отправлять через него, проблем с русским нет.
я об этом и прошу, строчку мне в НЕХ бы глянуть...ну если пипл юзает джейсон конечно. еще просил у галогена, может вышлет ).
такто ессесно не важно где, пхп, хттп и т.п....
-
не пытайтесь "подвести" под ведро...) мак это дело тонкое... если не пробовали то лучше промолчать...). обратили внимание на нолики? там ведь в байтах передача... не как в ведре... если решу проблему сообщу, и тогда весь мир стекется к моему посту, т. к. не нашёл в инете решений на делфи... ну может есть на провайдерах... но хочу простоты.Мне в свое время помогло:
vStr := TStringStream.Create(s, TEncoding.UTF8);
-
это было сделано изначально)в стандарте json обычно юникод кодируется как \uXXXX
попробуй сделать JSON-строку не сам, а штатными средствами
-
вы запутали и даже стравили)))
Так сработает только если фрейм создается автоматически. У меня он создается вручную.вообще-то должно быть так (ну, со скидкой на синтаксис си):
Frame.Button1.Text := 'Привет из главной формы!';
а все из-за отсутствия инфы... вы создаете кнопку или нет? ))
-
как была поставлена задача этот метод поможет, если другой вариант знаешь место того что умничать мог бы ответить человеку
да все ок Мартифан, сори если неправильно выразился, я то как раз и не проверял еще фреймы, а постоянно открываю в фмх новое ).
дикость как раз в том, что это
Frame->Button1->Text
не сработало...
-
Если это лучший ответ...то наверно пора плакать...неужели в фмх надо получать доступ к объектам фрейма путем "пробежки"...если правда то жесть просто...
-
Те кто отправляет пуши в ИОС на русском, прошу выложить строку в HEX-текст, которая уходит в APS.
Конечно можете изменить свой токен. Достаточно слова "Привет" или "Ваш".
Я по строке смогу разгадать кодировку, этот код давинчи и напишу на дельфи.
Всем пригодится!
Эх гонсалес как же ты припек со своими недоделками...
-
если ничего не изменится то уже скоро, не переживайте
Для споров Си или Делфи полно других форумов. И там мало достойных аргументов у разработчиков кто пишет на Делфи, я не про саму Делфи.
Сам я уже долго сижу на Делфи, честно скажу я не в восторге от фмх, НО у меня всегда были для VCL такие же будут и для FMX аргументы,
я люблю(обожаю если хотите) львиную часть времени тратить на реализацию задачи, а не на анализ кода, сборку и настройку интерфейса.
Последнее я называю "настройка красоты блондинок или сислинукс задротов", т.к это НЕ ЗАДАЧА!
И так две пропорции "Задача" - "Настройка", за второе НЕ ПЛАТЯТ!
Делфи во все времена рвала Си на части в этой пропорции и рвет дальше.
Делфи 70%-30%, у Си 20% - 80%
FMX 80%-20%, у Си 10% - 90%
Если вы считаете что занимаетесь полезным делом...стоит понять о чем я написал...вообщем занимайтесь настройкой...не мешайте бабло рубить...
-
Предлагаю ознакомиться с компонентом SDAC для работы с MS SQL.Компания - https://www.devart.com/sdac/ Для тех кто еще не использует SDAC в ОС Android и IOS.С версии 7.0.1 с ноября 2014 года компания доработала комонент SDACи появилась возможность работы с базой данных MS SQL Server из Android и IOS.SDAC (pro version) компонент позволяет работать c MS SQL напрямую минуя посредников,в частности DataSnap, который требует разработки и поддержки своих application server.Отсутсвие возможности соединяться с MS SQL из Android и IOS закрывало мне и массе другимразработчикам в мир мобильных приложений на Delphi, всетаки мы не писатели на JDBC.Однако благодаря этому компоненту я снова в строю, хоть и с 2014 года ) никогда не поздно.Древняя технология клиент-сервер вполне работоспособная даже на 128 к/бит.Разработчики компонента оперативно исправляют баги. Настройка соединения элементарная иничем не отличается от VCL. А последние версии уже почти не отличаются от VCLв плане разработки.В своих программах я предпочитаю использовать TMSStoredProc, но и другие компоненты работают идеально.Стоит однако помнить, что для корректного отображения русского языка в гаджетах, важно в БДсоздавать тип NVARCHAR, а в программе обращаться через AsWideString, например часть кода по загрузке меню.vSp.ParamByName('aSerial').AsWideStringvSp.FieldByName('menu_text').AsWideString,function TfmMain.LoadPopup: boolean;varvSp: TMSStoredProc;beginResult := false;vSp := SpCreate('ppp.sp_menu;3');tryvSp.Open;while not vSp.eof dobeginMenuInsert(vSp.FieldByName('btn_text').AsWideString,vSp.FieldByName('img_index').AsInteger,vSp.FieldByName('id').AsInteger);vSp.Next;end;finallyvSp.Free;end;Result := true;end;function TfmMain.SpCreate(const aName: string):TMSStoredProc;varvSp: TMSStoredProc;beginResult := nil;vSp := TMSStoredProc.Create(Self);vSp.Connection := ssMain;vSp.StoredProcName := aName;vSp.PrepareSQL;Result := vSp;end;в этом примере подчеркнуто:- простой SQL описанный в процедуре можно как и в VCL открыть c помощью Open (конечно ExecProc также доступен)- префикс "3" означет поддержку префиксов(в одной процедуре более одной, типа oracle.package)Еще один момент, но возможно разработчики его поправят, если есть OUT параметры, то они должны быть заполнены в процедуре,другими словами инициализированы. Ниже упрощенный пример:procedure TfmMain.actPinExecute(Sender: TObject);varvSp: TMSStoredProc;beginvSp := SpCreate('ooo.sp_pin;5'); //spcreate описана вышеtryvSp.ParamByName('aSerial').AsWideString := pSerial;vSp.ExecProc;if vSp.ParamByName('aTxt').AsWideString = 'OK' thenShowText(vSp.ParamByName('aTxt').AsWideString);finallyvSp.Free;end;end;Скорость авторизации сессии TMSConnection достаточно высокая.Компоненты проходят BindSource также как и любые другие DataSet.Можно поспорить о безопасности клиент-сервер на гаджетах или облачных решениях, но если программер опытный в MS SQLв плане безопасности, то проект будет достаточно профессионален, ведь не зря я использую хранимые процедуры, они ведьвсе повязаны на грантах...Devart разработали Delphi компоненты для всех существующих баз данных. И с работая с ними я также был очень доволен.Фишка всех компонентов - отказ от клиентских драйверов. Не секрет, что стандартными компонентами FMX соединятьсяс такими примитивными БД: mysql и sqllite порой "не айс", а иногда весьма сложно доставляя нагрузку поисковику гугли различным стэковерам... Devart компоненты универсальны, как для VCL так и для FMX и значительно(часы, сутки и недели)экономят время в разработке.Компоненты SDAC проверены на личном опыте Андроида и ИОС, разработчики исправили 2 бага обнаруженые мной достаточнооперативно.Это не реклама, я бы хотел чтобы этот раздел также обсуждался разработчиками на форуме fire-monkey.ruЯрослав, прошу создать ветку подфорума MS SQL.С Уважением,rustam_d
-
Доброго времени суток!
Прошу потестить модуль uDeviceInfo
Лови ipad estay
https://www.dropbox.com/s/527supdlc565umw/20150923_183759.jpg?dl=0
Только в модуле uDevice на 137 кажись строке для виза отсутствовал энд. Рекомендую поправить иначе не компилится под ИОС.
-
ага, что значит без оплаты? в developer program не заэнролите никак без вечно зеленых )).
-
Отправку пушей ИОС написал в vcl на idTcpclient, доходят норм, но на русском никак.
Меняем "Hi" на "Привет" и получаем полный привет...точнее никакой реакции на устройстве.
var s,c,t: AnsiString; vStr: TStringStream; begin if not tcpclient.connected then tcpclient.connect; c := 'qwertyqwertyqwertyqwertyqwertyqwertyqwertyqwertyqwerty'; //token s := '{"aps":{"alert":"Hi","sound":"default"}}'; s := #0#0#32 + HexToAscii(c) + #0 + AnsiChar(Length(s)) + s; vStr := TStringStream.Create(s); vStr.Seek(0,soBeginning); SSLHandler.write(vStr); vStr.Free; end;
что только ни делал, в стримах TEndcoding юзал всякие какие только есть, однако с заголовком #0#0#32 по логике и так не срастуха.
Гонял по cp1251 сам стринг...не доходят пуши.
Может с заголовком по колдовать как-то надо? Тогда и от анси может можно уйти?
-
Ярослав,
поюзал ваши компоненты, очень понравились.
Не могли бы вы создать TfgToast? ...на базе скажем TfgActivityDialog.
Жутко нужный компонент. Варианты сторонних глючные...
Св-ва: длительность, фон, текст, высота - если автовроп сложен будет. (капризы не прошу: алайн и все такое).
-
Разобрался такая ошибка возникает из-за путаницы сертификатов!
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? и т.п. бредом.
-
А может проблема в созданном pem файле.
В связке ключей не понятно, там где единственная ссылка на PUSH внутри есть ключ Mac Developer...хм он ли нужен?
Может нужен другой ключ? Типа IOS Developer...
Сам сертификат пуша пробовал с developer.apple.com качать и вытаскивал сертификат openssl x509 -inform der -in aps_development.cer -out pushcer.pem
Но ключ то какой тогда?
С ключами походу путаница назрела...
-
Не оно случайно?
не помогло,
скачал ssl1.0.2d x64 и ssl1.0.2d x32
раскидал как по линку 64 в систем32 и 32 в вов64
ошибка таже...EOF was observed that violates the protocol
может есть у кого работащий код скиньте плиз...
-
Push сообщения IOS не могу соединиться с сервером для отправки.
Что на FMX что на VCL одна и таже ошибка при попытке установить соединение с gateway.sandbox.push.apple.com
EIdOSSLConnectError with message 'Error connecting with SSL. EOF was observed that violates the protocol'
Все сделал как Гонсалес показал http://www.youtube.com/watch?v=n_C5_GxQhk4
Качал SSL 0.9.8k64 и 1.0.1m x64 https://indy.fulgan.com/SSL/
Сенерил pem файл (p12 сделал как и Гонсалес с 2 ключей один p12).
openssl pkcs12 -in Push.p12 -out push.pem
сослался на него в SSLHandler в cert и key
Метод 23
Но вот как делаю TCPClient.Connect вылетает ошибка выше.
Чую где-то рядом собака зарыта, а вот где...
-
В 8.1 у меня отлично работает стандартный шаблон без каких либо исправлений.
<?xml version="1.0" encoding="utf-8"?>
ясно, ну тогда остается решать проблемы с Кинвей...по мне GCM проще не куда...правда группой получать пуши пока незнаю как...
-
Да с данным манифестом всё работало, хотя уже столько копий проекта, что мог запутаться.
вот мой рабочий
от вашего пару отличий все же есть...
1. <permission android:name="%package%.permission....
2. блок <receiver тоже отличается кажется весь
я добавлял советы сабины блоками Rustam added и end )
не уверен, но вдруг вам поможет
<?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%"> <!--Rustam added --> <!-- GCM connects to Google Services. --> <uses-permission android:name="android.permission.INTERNET" /> <!-- GCM requires a Google account. --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- Keeps the processor from sleeping when a message is received. --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- Creates a custom permission so only this app can receive its messages. NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE, where PACKAGE is the application's package name. --> <permission android:name="%package%.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="%package%.permission.C2D_MESSAGE" /> <!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <!--Rustam added end--> <%application-meta-data%> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--Rustam added --> <receiver android:name="com.embarcadero.gcm.notifications.GCMNotification" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="%package%" /> </intent-filter> </receiver> <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" /> <!--Rustam added end--> <%activity%> <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" /> <%receivers%> </application> </manifest> <!-- END_INCLUDE(manifest) -->
-
вы говорите все ок...но походу не так ))Всё делал и как написано, и по всякому.
В проекте нет кода. Тестовый проект, без всякого кода, просто два элемента на форме. Провайдер и ПушЭвент. Запускаем, получаем чёрный экран. Даже если отключить автоактивацию и пр. Что Kinvey, что Parse, не работает ни то, ни другое в режиме Релиза на андройде.
выложите манифест файл андроида...он важен для пушей, точнее туда дописывать надо права отдельно
Я не говорю, что всё ОК. Я говорю, что всё, что вы писали я проверял. Проекты в которых РАБОТАЛИ и РАБОТАЮТ пуши, под Delphi 10 не запускаются, ровно так же, как и новые проекты с компонентом для работы с Push.
<?xml version="1.0" encoding="utf-8"?> ...
Я правильно понимаю, что этот манифест вам позволял получать пуши в XE8 ?
IOS Push сообщения на русском как?
в iOS
Опубликовано · Изменено пользователем rustam_d
krapotkin снимаю шляпу, вы подсказали правильный путь...
пойду выпью за это...php - go home.