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

rustam_d

Пользователи
  • Постов

    200
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные rustam_d

  1. Для информации. Приложения собранные с исправлением от Сарины в xCode 6.4 + XE8.1 без проблем проходят в AppStore и публикуются. Не использовал при публикации, хотя приложение и обращается к удалённому xml файлу. Публикация прошла успешно.

    спс Алекс, тоже запустил публикацию, жду.

    ща у нас тут конференция ембаркадера...был в первой половине дня, ОЧЕНЬ полезная сессия...не ожидал...

    Много чего узнал про Seattle. Всплывающее слева панель теперь не требует велосипеда и т.п. Пуши в вин10 знатная штука.

    Сервисы со связями, вообщем приятно когда все на пальцах и в примерах.

    Эх не успел попытать вопросами: интел атом когда, удалить один пуш, получить в шторке пуши в виде группы, а возможно и нет ответов...

  2. тоже столкнулся с проблемой публикации в app store.

    недавно купил б/у ipad air за сущие копейки и лафа компилю на 64бит сразу ).

    конфигурация: Yosemite 10.10.5 (VMware12), XCode 7.0.1, Ipad air 9.0.1, XE8upd1

    в Tools\Options\Sdk manager слева iPhoneOS 9.0, но внимание - справа 8.4 sdk.

    подтверждаю, что в топике ссылка помогла, сарина рулит, скопировал файл к себе

    поправил Аллок и ...все заработало без зависонов на заставке.

    респект топикстартеру !

  3. Прошу помочь разобраться бывалых с компиляцией, окончательно запутался в понятиях версий
    и совместимостей.
     
    Андроид, делаю следующее для сборки:
    В AVD - Менеджер SDK качаю:
    Tools: 
       Android SDK Tools - актуальная
       Android SDK PLatform Tools - актуальная
       Android SDK Build Tools - актуальная
    Extras:
       Android Support Library - актуальная
       Google USB Driver - он один
    Android 4.0 (api 14)
       SDK platform
       ARM EABI v7a
       Google API
    NDK
       выбираю все - актуальное
     
    Вопрос:
    - Какие еще галочки надо чтобы на всех версиях начиная с 4.0 работала??
    (думки к этому вопросу: Может надо все версии выделить? Но тогда зачем в делфях выбор API ?
    или надо в магазин устанавливать несколько версий программы для разных API ?)
    - Если выделяю Intel x86 Atom - значит ли это что программа сразу заработает там
    где эти процессоры на андроид?? или надо еще какието действия делать?
     
    IOS ,
    выбираю в Делфи что дает среда например 9.0 версию, xcode последний 7.0.1.
    вопрос: значит ли это, что программа будет обратно совместима со старыми IOS ??
    если нет, то что сделать чтобы программа поддерживала старые версии?
     
  4. Для каждого приложения, в котором будет интегрирован механизм push-уведомлений, необходимо создать новый App ID и provisioning profile, а также SSL-сертификат для сервера

    я так понял вы не знаете что такое пуш...

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

    ну поясню чуток токен клиента это уникальный ОДИН код чтобы идентифицировать "Гаджет+программу", из-за отсутств. этого понимания

    на сайте этом будет еще полно вопросов типа "как отправить сообщение конкретному клиенту"...))

  5.  

     

    кто может дать кусок кода в котором реализована отправка данных через компонент HTTP.

    ваш вопрос относиться чисто к Делфи...это не совсем по адресу...

    такие вещи писали с 90-х...во времена королевства делфи )

    вот если то что работает в делфи не работает в фмх тогда другое дело

     

    я пишу программу на Delphi XE8

     

    да хоть на Delphi 6...никакой разницы...почитайте лучше разницу между VCL и FMX (этот сайт для последнего)...

  6. кто может дать кусок кода в котором реализована отправка данных через компонент HTTP.

    ваш вопрос относиться чисто к Делфи...это не совсем по адресу...

    такие вещи писали с 90-х...во времена королевства делфи )

    вот если то что работает в делфи не работает в фмх тогда другое дело

  7. ты вообще о чем ? что значит "app servera на голом sql" ? это вообще как ?

    ты вообще понимаешь о чем я пишу ?

     

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

    3-звенка с 90-х еще, как, зачем, и для чего это то и есть элементарно, многие професс проекты так и реализованы

    вам то про топик писали...что вполне живуч. 3-х звенка пишите 2 программы вместо 1-й и радуетесь...

    время то походу вагоны для проектов

     

    бизнес логика должна(по-моему) реализовываться на уровне субд

    странно но об этом и писал вроде...а вы про миграцию пакетов, процедур...структура БД это только 15% бизнес логики, остальное в хранимках

     
    ладно, не логику. зачем в клиент пихать провайдеры доступа к субд ? на разным платформах кучу нюансов

    не стоит бросаться словами в области в которой ноль...а то тешите деварт...нечего их смешить...

     

    да и не один адекватный сисадмин не пробрасывает наружу порты доступа к бд(если это только не шарашка с 10-15 сотрудниками).

    а как вы настраиваете БД на виртуальных хостах? через http ? )) мсье знает толк в изв...

     

     
     
  8. проблема не отправить пуш

    проблема отправить пуш конкретному клиенту

    vIn := TStringStream.Create(
          '{"registration_ids":["' + Edit1.Text 
    

    в новом API рекомендуют вместо "registration_ids" использовать "to"

    так вот что бы такое написать в Edit1.text ??

    ок, но мало ли че рекомендуешь...тут экстаз когда вообще эта канитель заработает )).

    Edit1 или конкретный юзер, это все уникальный токен(ID) приложения для каждого клиента.

    Правильно выразиться тебе можно было так "как получить токен", лови упрощенный тест...должен работать

    (правда там есть ненавистное тобой сохранение токена в файл )) ):

     

    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.PushNotification.Android,
      FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, System.PushNotification,
      FMX.StdCtrls, System.IOUtils, IPPeerClient, REST.Backend.PushTypes,
      System.JSON, Data.Bind.Components, Data.Bind.ObjectScope,
      REST.Backend.BindSource, REST.Backend.PushDevice, FMX.Notification;
    
    
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure PushEvents1PushReceived(Sender: TObject;
          const AData: TPushData);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure OnChange(Sender: TObject; AChange: TPushService.TChanges);
        procedure OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification);
        procedure getAllNotfications;
      end;
    
    
    var
      Form1: TForm1;
      APushService: TPushService;
      AServiceConnection: TPushServiceConnection;
      NotificationCenter: TNotificationCenter;
    
    
    implementation
    
    
    {$R *.fmx}
    
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Memo1.Lines.Clear;
    end;
    
    
    procedure TForm1.OnChange(Sender: TObject; AChange: TPushService.TChanges);
    begin
      Memo1.Lines.Add('OnChange');
    end;
    
    
    procedure TForm1.OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification);
    begin
      Memo1.Lines.Add('DataKey=' + ANotification.DataKey);
      Memo1.Lines.Add('JSon=' + ANotification.Json.ToString);
      Memo1.Lines.Add('DataObject=' + ANotification.DataObject.ToString);
    end;
    
    
    procedure TForm1.PushEvents1PushReceived(Sender: TObject; const AData: TPushData);
    begin
      Memo1.Lines.Add('PushReceived = ' + AData.GCM.Message);
    end;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ADeviceID, ADeviceToken: string;
    begin
      APushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM);
      APushService.AppProps[TPushService.TAppPropNames.GCMAppID] := '1234567890';  //ваш GCM ID короткий
    
    
      AServiceConnection := TPushServiceConnection.Create(APushService);
      AServiceConnection.Active := true;
      AServiceConnection.OnChange := OnChange;
    
    
      AServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent;
      ADeviceID := APushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID];
      ADeviceToken := APushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
    
    
      Memo1.Lines.Add('ADeviceID=' + ADeviceID);
      Memo1.Lines.Add('ADeviceToken=' + ADeviceToken);
      Memo1.Lines.SaveToFile(TPath.GetDownloadsPath + '/token.txt');
      Memo1.Lines.Add(TPath.GetDownloadsPath + '/token.txt');
    
    
      //getAllNotfications;
    
    
    end;
    
    
    //this procedure is called in the OnActivate event of app the main form.
    procedure TForm1.getAllNotfications;
    var
      LNotification: TPushServiceNotification;
    begin
      for LNotification in AServiceConnection.Service.StartupNotifications do
      begin
        if Assigned(LNotification) and (LNotification.Json.ToString<>'') then
        begin
          Memo1.Lines.Add('Enter by Notification Click: ' + LNotification.Json.ToString);
        end;
      end;
    end;

    есть пара нюансов которые ты ощутишь когда пуши заработают, когда открыта прога, то пуши не отражаются в шторке, 

    вот для их отлова и OnReceiveNotificationEvent. Также когда прога закрыта и не запущена, юзер входит в прогу по шторке

    и тогда их ловишь через Form1.OnActivate - getAllNotfications. Прога в штроке не очищается сама...персонально каждую иконку

    не очистишь(никто в этом мире не знает как из фмх!), но все иконки своей проги можно стереть, в этой же активате процедуре

    подчищаешь за собой типа так with TNotificationCenter.Create(Self) do CancelAll; 

     

    манифест андроида клиента править ВСЯКО надо.

    пост тут http://fire-monkey.ru/topic/1745-rad-x-push-uvedomleniia/

     

    UPD: забыл сказать, тебе ADeviceID нафиг не нужен, есть и другие пути его определения, да и нужно ли, если на чайна планшетах

    он всегда 012345678...

     

    все я тебе закрыл вопрос по пушам полностью, удачи.

     

    Когда начнешь юзать ИОС (точнее ощутишь разницу между "windows-это комфорт андроид" и "unix-вешалка с идио..ми из мак") обращайся...

     

     

     

     

  9. Не должен клиент напрямую коннектиться к базе. Должна быть прослойка. Пофигу: тонкая или толстая. Если бизнес логика предполагает миграцию на другую бд - толстая, есои нет - бизнес в пакетах\процедурах. Нельзя с клиента напрямую к бд идти. Должен быть rest-сервис. Пофигу - tcp\http, на дельфях он или на джаве, на питоне, на асп.нете... Клиент должен идти через прослойку. Имхо

    "Не должен, должен..." существенные аргументы...норм стиль.

    Миграция бизнеса? )) чувствуется стиль java или asp прогеров, кто пишет app servera на голом sql )).

    Обычно такие программеры используют MSSQL и ORACLE в качестве FoxPro видал массу примеров...

    Порой диву даешься или шок, когда видишь, что дорогущий сервер БД используется на 0.0001%, а остальное делает "свой" сервер...

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

    а пушки для воробьев у нас за здрасьте...

  10.  

     

    rustam_d - предлагаете делать двузвенку "мобильный толстый клиент - СУБД"? Имхо, не стоит.

    от задачи зависит конечно, но толстого клиента убил Devart.com еще в 90-х...,

    а если не умеете писать хранимые процедуры...то вам точно не пойдет "толстый" клиент )

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

    а в них ВСЕ толстые )), толстые чтоб вы знали, это "не зависимый интерфейс", веб дефакто тонкий...

    а вот дроид и иос увольте ), можно тонкий и на них...но не для этого они )

    есть магаз же, сбегал обновился, а винде его не было ранее...да и щас мало кто юзает

     

    Именно сервер должен заниматься не только хранением, но и иметь бОльшую часть функционала по обработке данных. 

    у меня в MSSQL именно так, весь функционал по обработке данных в хранимых процедурах, которые правлю в БД,

    а вот отображение на клиенте в интерфейсе...

  11. а как без SSL шлешь на https ?

    ето в 10-ке какая-то новинка ? где-то слышал, что там вроде indy щас https по-другому обрабатывает.

    п.с. раньше без SSL не работало

    вопрос к делфи? зачем вы меня спрашиваете если работает...))

    а в других случаях да использую...

  12. Отправка на VCL и FMX (но без разницы, т.е. вообще откуда без разницы, php, mssql, c# да даже с батника кажись мона...)

     

    procedure TForm1.Button1Click(Sender: TObject);
    var
      vIn, vOut: TStringStream;
    begin
      Memo1.Clear;
      try
        vIn := TStringStream.Create(
          '{"registration_ids":["' + Edit1.Text +
          '"],"data":{"id":"'+ edID.Value.ToString +'","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;
    

    CKey это ключ GCM, 40 знаков, он у вас есть думаю, Edit1 токен, Edit2 сообщение (обратите внимание SSL и т.п. здесь не нужен)

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

    Upd: Забыл сказать, ID любая цифра (на ваше усмотрение, например 1 можно обозначить обновление, 2 реклама, 3 и т.п.

    это для вашего клиента).

  13. rustam_d - предлагаете делать двузвенку "мобильный толстый клиент - СУБД"? Имхо, не стоит.

    от задачи зависит конечно, но толстого клиента убил Devart.com еще в 90-х...,

    а если не умеете писать хранимые процедуры...то вам точно не пойдет "толстый" клиент )

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

    а в них ВСЕ толстые )), толстые чтоб вы знали, это "не зависимый интерфейс", веб дефакто тонкий...

    а вот дроид и иос увольте ), можно тонкий и на них...но не для этого они )

    есть магаз же, сбегал обновился, а винде его не было ранее...да и щас мало кто юзает

  14. 2 дня пытаюсь продолбиться сквозь эти дебри ((

    прошу помощи тех, кто уже прошел этот уровень...

     

     

    мда странный подход у вас крапоткин...обычно сначала пишут в поисковике PUSH

    ну у меня все без посредников и дроид и иос

    давай начнем с дроида я на форуме писал что манифест править обязон

    правил?

  15. че-то технологию попутали как топикстартер так и остальные...

    ваши "TCP.." это все 3 уровневая технология, причем в разы сложнее реализации самой "клиент-сервер"

    возьмите любую базу MySql или Sqllite да и вперед, куда проще...никаких собственных серверов(велосипедов)

  16. угу, в файл на мобиле...

    а я что про винду? )) да ладно хорош сарказма...устройство то не в калифорнии же? не вижу проблем...ради дела можно и потерпеть ))

    вон у меня регистрация пуш-токенов, по началу в файл...а потом в бд, норм, терпимо.

  17. rustam_d, Ваше решение хорошо подходит для того случая, когда количество кнопок постоянно. Однако в моей программе количество кнопок не будет постоянным. 

    )) по вашему тут на форуме везде примеры из реальных программ? вообще все стараются по проще, доходчивее...а динамика то ваш удел... и в моем примере можно )

  18. я боялся что прийдется делать что то подобное, бля...

     

    )))) вам же master webs писал про NotificationCenter.

    может вы путаете Push и то что он сказал? Локальные сообщения и есть думаю не плохое решение...ничего перебильдить или собирать не надо.

    Также вам точно не нужны Push.

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

    Затем по клику сообщения и откроется ваша программа...хз ну я думаю именно как то так пашут ватсапы и виберы.

    Кстати в демках делфи у вас как раз про локальные есть пример.

  19.  

    Ну если ваши кнопки должны растягиваться и расстояние должно оставаться между ними ровно 20 пикселей, то сделайте у всех кнопок align=client и margin(top=5,bottom=5,right/left=10 кроме первого и последнего).

    Нет, кнопки не должны растягиваться. Вот если необходимо чтобы кнопки были, например, справа и расстояние между ними 20, то я делаю у всех кнопок Align = Right, Margin->Left = 20. В результате они все аккуратненько стоят друг за другом в правой части родителя (TLayout). Если же сделать Align = Center, то все кнопки располагаются в центре друг на друге. При выравнивании справа, слева, сверху и снизу такого нет: они располагаются друг за другом. Почему выравнивание в центре располагает компоненты друг на друге?

     

    Хоть и на делфи, но как-то так

    Я так понял вы не в курсе зачем у контролов Margins )

    У каждой кнопки Align - Client. А размеры сами подгоняйте, только не спрашивайте меня почему по бокам не ровно 50% )).

     

    b81f23d4a7f5.jpg

  20. Видимо ранее я потестил получение токена на тестовой программе.

    Затем код перенес в финальную.

    Какого было удивление, когда стали пуши приходить с названием тестовой программы,

    а открывается нормальная финальная...

  21. задача не посмотреть JSON. это так, причина

    задача - видеть в Watch или Evaluate строку длиной более 255 символов.

     

    самый простой вариант для JSON - скопировать в Notepad++ и смотреть в любом виде - деревом, строкой и т.д.

    только неоткуда ее скопировать в Notepad

    тогда извращаться через сохранение в файл или БД...

  22. json - это обычная текстовая строка

    для удобства можно мнить ее объектами

    есс-но т.к. объекты мы вообще не видим, так хоть строку, но и тут всего 255 символов только, остальное - тайна....

    в нете полно вроде инфы...даже кто то налобал вьювер...

    https://svn.code.sf.net/p/radstudiodemos/code/branches/RadStudio_XE/Delphi/DataSnap/JSONViewer/apps/

    а вообще надо весь текст чтобы поковырять...

  23. Плохо разбираюсь в структуре JSON.

    А SYSTEM.JSON ? или DBXJSON? что-то другое? или одно и тоже?

    Просто там TJSONObject.ToString же есть...

     

    P.S.: последний метод ToString или ToInteger ветераны все еще не знают, что даже в VCL они есть уже давно ))

    пипл привык извращаться через StrToInt и т.п.... а ведь давно можно 355.ToString

  24.  

     

    как раз таки проблема в переборе всех значение 

    я бы использовал ListView, грид совершенно не оправдан, т.к. нет более 6 полей, также интрефесно подход тоже сделал бы по другому

     

     

    полей больше 6 есть скрытые поля для  сравнения 

     

    к скрытым полям у вас доступ остается если вы используете bindsource

×
×
  • Создать...