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

gonzales

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

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

  • Посещение

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

    27

Активность репутации

  1. Like
    gonzales получил реакцию от zairkz в Не корректно отрабатывает Disconnect   
    Помогло вот такое, интересно, это бага или фича ?
    IdTCPClient.Disconnect; if IdTCPClient.IOHandler <> nil then IdTCPClient.IOHandler.InputBuffer.Clear;
  2. Like
    gonzales получил реакцию от Ingalime в Задать стиль текста в RunTime   
    Все работает, в запаре забыл галки снять с StyleSettings
  3. Like
    gonzales получил реакцию от Edward Tarasov в При публикации приложения на AppleStore вылезает ошибка - В каталог объектов xcode необходимо добавить значок приложения с разрешением 1024*1024 пикселей   
    По итогу все срослось.
    Для сборки проекта в 10.4.1. необходимо удалить из папки с проектом папки iOSDevice64, LaunchScreen.TemplateiOS, и файлы Entitlement.TemplateiOS.xml и info.plist.TemplateiOS.xml. После чего пересобрать проект, создадутся новые файлы Entitlement.TemplateiOS.xml и info.plist.TemplateiOS.xml в которых будут необходимые директивы. У меня после этого пропали проблемы с размером экрана и AppStoreConnect без проблем съел мой ipa файл, при этом показал, что есть включенные материалы - значок приложения.
    А ТЕПЕРЬ ЛОЖЕЧКА КАКККИ)))
    При сборке приложения в 10.4.1 не применяется Заставка, включается стандартная, что бы я не делал, даже в новом пустом проекте, выставляю свою заставку, запускаю, а заставка все равно стандартная, также не работает цвет экрана заставки, корректно отрабатывают только иконки. Я порылся во всех местах, где это могло быть, вроде все правильно, в Deployment файлы правильные, на маке в папке LaunchScreenImage.imageset файлы правильные, а вот что должно быть дальше - не знаю(((
  4. Like
    gonzales отреагировална Edward Tarasov в поломались ПУШи в 10.4   
    10.3... на 10.4.1 - все гуд. спасибо!
  5. Like
    gonzales отреагировална Android в Delphi 10.4 и Android 4.1   
    http://docwiki.embarcadero.com/RADStudio/Sydney/en/Android_Devices_Supported_for_Application_Development
    RAD Studio does not support the following Android versions:
    Lollipop (Android 5.0) KitKat (Android 4.4) Jelly Bean (Android 4.1.x, 4.2.x, 4.3.x) Ice Cream Sandwich (Android 4.0.3 and 4.0.4) Honeycomb (Android 3.x) Gingerbread (Android 2.3.3 – 2.3.7) Tegra 2 devices (NEON support is required)
  6. Thanks
    gonzales получил реакцию от Martifan в StatusBar Color   
    Долго бился со следующим, есть три типа устройств: 1. где отсутствует NavBar физически, 2. где он есть и всегда включен, 3. где он есть, но его можно выключить в настройках. В результате добился нормальной работы окраски NavBar на всех типах. Немного изменил код, приведенный Равилем из примера Update2
    function hasNavbar(out navBarHeight: Integer): boolean; // uses Androidapi.JNI.Util, {$IFDEF ANDROID} var Window: JWindowExt; realSize: JPoint; screenSize: JPoint; metrics: JDisplayMetrics; difference, resourceID: Integer; {$ENDIF} begin Result := false; navBarHeight := 0; {$IFDEF ANDROID} metrics := TJDisplayMetrics.Create; realSize := TJPoint.Create; screenSize := TJPoint.Create; Window := GetWindowExt; Window.getWindowManager.getDefaultDisplay.getRealMetrics(metrics); realSize.x := metrics.widthPixels; realSize.y := metrics.heightPixels; Window.getWindowManager.getDefaultDisplay.getSize(screenSize); if realSize.y <> screenSize.y then begin difference := realSize.y - screenSize.y; resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then navBarHeight := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID)); if navBarHeight > 0 then if difference < navBarHeight then begin navBarHeight := 0; Result := false; end else Result := true; end else begin navBarHeight := 0; Result := false; end; {$ENDIF} end;  
  7. Like
    gonzales отреагировална slav_z в закодировать строку в UTF8 для передачи в GET запросе   
    а..  вот еще что: THTTPClient сам кодирует строку запроса, без всякой дополнительной фигни... очень хороший объект... реализованный просто замечательно...
      Client:=THTTPClient.Create;
      var Response:=Client.Get('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8-для-передачи-в-get-запросе/#comment-40498');
      if Response.StatusCode=200 then
        ...
      Client.Free;
     
  8. Like
    gonzales отреагировална slav_z в закодировать строку в UTF8 для передачи в GET запросе   
    S:=TNetEncoding.URL.EncodeQuery('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8');
    ...и вам вполне подойдет THTTPClient для любых запросов...
  9. Like
    gonzales получил реакцию от Tumaso в закодировать строку в UTF8 для передачи в GET запросе   
    Переделал только немного под себя, чтобы строку в ответ выдавал
    function TForm1.Get(const ASession: TIdHTTP; const AUrl: string):string; begin result:=ASession.Get(ASession.URL.URLEncode(AUrl)); end;  
  10. Like
    gonzales отреагировална Tumaso в закодировать строку в UTF8 для передачи в GET запросе   
    попробуй вот так:
     
    procedure Get(const ASession: TIdHTTP; const AUrl: string; const AResult: TStringStream); begin ASession.Get(ASession.URL.URLEncode(AUrl), AResult); end; где AUrl - твой урл с параметрами
  11. Like
    gonzales отреагировална krapotkin в Динамическое удаление объектов и форм (опять...)   
    В том числе. Также все созданные формы будут удалять не себя а именно form1
  12. Like
    gonzales отреагировална FREEFAR в #13#10 Не убрать перенос строки на Android   
    Попробуй заменить slinebreak на нужный символ. В твоём случае на пробел вроде
  13. Like
    gonzales получил реакцию от #WAMACO в StatusBar Color   
    Долго бился со следующим, есть три типа устройств: 1. где отсутствует NavBar физически, 2. где он есть и всегда включен, 3. где он есть, но его можно выключить в настройках. В результате добился нормальной работы окраски NavBar на всех типах. Немного изменил код, приведенный Равилем из примера Update2
    function hasNavbar(out navBarHeight: Integer): boolean; // uses Androidapi.JNI.Util, {$IFDEF ANDROID} var Window: JWindowExt; realSize: JPoint; screenSize: JPoint; metrics: JDisplayMetrics; difference, resourceID: Integer; {$ENDIF} begin Result := false; navBarHeight := 0; {$IFDEF ANDROID} metrics := TJDisplayMetrics.Create; realSize := TJPoint.Create; screenSize := TJPoint.Create; Window := GetWindowExt; Window.getWindowManager.getDefaultDisplay.getRealMetrics(metrics); realSize.x := metrics.widthPixels; realSize.y := metrics.heightPixels; Window.getWindowManager.getDefaultDisplay.getSize(screenSize); if realSize.y <> screenSize.y then begin difference := realSize.y - screenSize.y; resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then navBarHeight := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID)); if navBarHeight > 0 then if difference < navBarHeight then begin navBarHeight := 0; Result := false; end else Result := true; end else begin navBarHeight := 0; Result := false; end; {$ENDIF} end;  
  14. Thanks
    gonzales получил реакцию от Ingalime в [IOS]Notification.Number   
    сорри, вместо &badge поставить цифру, которая должна отображаться
  15. Thanks
    gonzales получил реакцию от Ingalime в [IOS]Notification.Number   
    Нужно внести изменение к код php сервера 
    вместо строки
    $fields['notification'] = array('body' => $text, 'title' => $title); нужно вставить
    $fields['notification'] = array('body' => $text, 'title' => $title, 'sound' => 'default', 'badge' => $badge);  
  16. Like
    gonzales получил реакцию от Ingalime в [IOS]Notification.Number   
    Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра
  17. Like
    gonzales получил реакцию от Ingalime в При публикации приложения на AppleStore вылезает ошибка - В каталог объектов xcode необходимо добавить значок приложения с разрешением 1024*1024 пикселей   
    По итогу все срослось.
    Для сборки проекта в 10.4.1. необходимо удалить из папки с проектом папки iOSDevice64, LaunchScreen.TemplateiOS, и файлы Entitlement.TemplateiOS.xml и info.plist.TemplateiOS.xml. После чего пересобрать проект, создадутся новые файлы Entitlement.TemplateiOS.xml и info.plist.TemplateiOS.xml в которых будут необходимые директивы. У меня после этого пропали проблемы с размером экрана и AppStoreConnect без проблем съел мой ipa файл, при этом показал, что есть включенные материалы - значок приложения.
    А ТЕПЕРЬ ЛОЖЕЧКА КАКККИ)))
    При сборке приложения в 10.4.1 не применяется Заставка, включается стандартная, что бы я не делал, даже в новом пустом проекте, выставляю свою заставку, запускаю, а заставка все равно стандартная, также не работает цвет экрана заставки, корректно отрабатывают только иконки. Я порылся во всех местах, где это могло быть, вроде все правильно, в Deployment файлы правильные, на маке в папке LaunchScreenImage.imageset файлы правильные, а вот что должно быть дальше - не знаю(((
  18. Thanks
    gonzales отреагировална IgorK11 в При публикации приложения на AppleStore вылезает ошибка - В каталог объектов xcode необходимо добавить значок приложения с разрешением 1024*1024 пикселей   
    набросал подробную инструкцию как делал на 10.3 собрав инфу с комментариев:
    !!! Иконки в AppIcon.appiconset должны быть без прозрачности и альфа-канала, иначе получите ошибку ITMS-90717:Invalid App Store Icon.
    1. распаковываем iOS1024fix.zip
    2. заменяем иконки в asset_catalog\Assets.xcassets\AppIcon.appiconset\ и asset_catalog\Assets.xcassets\LaunchScreenImage.imageset\
    3. если надо меняем цвет фона в asset_catalog\Assets.xcassets\LaunchScreenBackgroundColor.colorset\Contents.json
    4. копируем папку asset_catalog на мак
    5. в терминале перейти в неё, если скопировали на рабочий стол команда:
    cd desktop/asset_catalog 6. выполняем команду:
    actool --output-format human-readable-text --notices --warnings --app-icon AppIcon --output-partial-info-plist compilation_results/partial_Info.plist --target-device iphone --target-device ipad --minimum-deployment-target 11.0 --platform iphoneos --product-type com.apple.product-type.application --compile "compilation_results" "Assets.xcassets" в asset_catalog\compilation_results появятся 4 файла
    7. копируем папку (или эти 4 файла) обратно c мака
    8. в delphi компилируем ipa (Release / iOS Device 64-bit / Application Store)
    9. Для удобства создадим папку "ios1024" в папке проекта
    10. копируем файл iOSDevice64\Release\<ИмяПроекта>.Info.plist в папку "ios1024" убрав из имени "<ИмяПроекта>.", имя файла должно быть "Info.plist", регистр важен!
    11. копируем из asset_catalog\compilation_results 4 файла в папку "ios1024"
    12. копируем папку LaunchScreen.storyboardc в "ios1024" (именно папку а не её содержимое)
    13. Редактируем Info.plist
    13.1. Меняем:
    <key>CFBundleIconFiles</key> <array> <string>ios_app_ico57</string> <string>ios_app_ico87</string> <string>ios_app_ico114</string> <string>ios_app_ico1024</string> <string>ios_app_ico60</string> <string>ios_app_ico120</string> <string>ios_app_ico180</string> <string>ios_spot_29</string> <string>ios_spot_40</string> <string>ios_spot_58</string> <string>ios_spot_80</string> <string>ios_spot_120</string> </array> на
    <key>CFBundleIcons</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon60x60</string> </array> <key>CFBundleIconName</key> <string>AppIcon</string> </dict> </dict> <key>CFBundleIcons~ipad</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon60x60</string> <string>AppIcon76x76</string> </array> <key>CFBundleIconName</key> <string>AppIcon</string> </dict> </dict> 13.2. Удаляем в двух местах строки:
    <key>CFBundleResourceSpecification</key> <string>ResourceRules.plist</string> 13.3. После строк:
    <key>DTPlatformName</key> <string>iphoneos</string> добавляем:
    <key>DTPlatformVersion</key> <string>13.5</string> 14. Заходим в delphi->Project->Deploment
    15. Проверяем что бы выбран "iOS Device 64-bit"
    16. Снимаем галочки с: (имена файлов будут ваши, ориентируйтесь по Option->Application->Icons)
    17. в Deploment добавляем все файлы папки "ios1024"
    18. изменяем Remote Path 5-и строкам:
    19. компилируем IPA и отправляем через Transporter на маке
    !!! При изменении версии билда в проекте не забываем изменить его в CFBundleVersion "ios1024"\Info.plist
     
    iOS1024fix.zip
  19. Like
    gonzales получил реакцию от Roma77751 в поломались ПУШи в 10.4   
    Нашел причину
    В Library path для Андроид64 добавил путь E:\Embarcadero\Studio\21.0\source\rtl\android, где собственно и лежит Androidapi.JNI.PlayServices.Tasks.pas и все заработало.
    Буду с iOS разбираться теперь
  20. Like
    gonzales получил реакцию от Astin Wolfone в поломались ПУШи в 10.4   
    Нашел причину,
    В недрах класса TPushService
    TPushService = class abstract public type TPropPair = TPair<string, string>; TPropArray = TArray<TPropPair>; // commonly used names TServiceNames = record public const GCM = 'gcm'; // deprecated 'Is not available anymore. Please use FCM instead'; // Google cloud messaging FCM = 'fcm'; // Google Firebase cloud messaging APS = 'aps'; // Apple end; Соответственно нужно исправить
    FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM);
    на
    FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.FCM);
     
    Все работает
  21. Thanks
    gonzales отреагировална Bob32 в При публикации приложения на AppleStore вылезает ошибка - В каталог объектов xcode необходимо добавить значок приложения с разрешением 1024*1024 пикселей   
    Идёшь по ссылке. Там инструкция на 4+ листа. К ней есть пара Вложенных архивов.
    Берёшь первый, где лежат иконки, распаковываешь. Подкладываешь свои (там по умолчанию стандартные дельфийские), плюс эту самую иконку - 1024 на 1024.
    потом это копируешь на комп с маком и xcode. Из командной строки запускаешь строку с длинными параметрами. По итогам в папке получаешь неск файлов, копируешь их на комп с дельфи, подкладываешь в файл проекта, вместе с файлами ещё одного архива, потом в параметрах деплоймента проекта отключаешь стандартные иконки, добавляешь штук 6 этих левых файлов, предварительно ещё правишь файл plist.info. Потом все это компилируешь и получаешь Новый ipa файл. Его и заливаешь на эпл стор.
     
    в инструкции все подробно написано.
    пробовал на 10.3.3 - работает.
  22. Thanks
    gonzales отреагировална slav_z в прозрачность модального окна в 10.3   
    если вы достаточно смелый, то можете внести следующее изменение в исходники* дельфи: (тогда на андроиде будет работать прозрачность формы), но проблему можно решить просто используя фреймы.

    *копируете этот файл в папку проекта и делаете изменения.
  23. Like
    gonzales получил реакцию от Roma77751 в поломались ПУШи в 10.4   
    Нашел причину,
    В недрах класса TPushService
    TPushService = class abstract public type TPropPair = TPair<string, string>; TPropArray = TArray<TPropPair>; // commonly used names TServiceNames = record public const GCM = 'gcm'; // deprecated 'Is not available anymore. Please use FCM instead'; // Google cloud messaging FCM = 'fcm'; // Google Firebase cloud messaging APS = 'aps'; // Apple end; Соответственно нужно исправить
    FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM);
    на
    FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.FCM);
     
    Все работает
  24. Like
    gonzales получил реакцию от ENERGY в поломались ПУШи в 10.4   
    Не могу одолеть пуши при компиляции приложения в 10.4
    Вот стандартный код
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, System.PushNotification, System.JSON, System.Net.HTTPClient, System.Threading,REST.Types {$IFDEF ANDROID}, FMX.PushNotification.Android, FMX.Memo.Types{$ENDIF} {$IFDEF IOS}, FMX.PushNotification.IOS{$ENDIF}; type TForm1 = class(TForm) MemoLog: TMemo; procedure FormCreate(Sender: TObject); private FDeviceID: string; FDeviceToken: string; FPushService: TPushService; FPushServiceConnection: TPushServiceConnection; procedure OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification); procedure OnServiceConnectionChange(Sender: TObject; AChange: TPushService.TChanges); procedure PushServiceRegister; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} const FAndroidServerKey = '13648316531'; procedure TForm1.OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification); const FCMSignature = 'gcm.notification.body'; GCMSignature = 'message'; APNsSignature = 'alert'; var aText: string; aObj: TJSONValue; begin // это событие срабатывает при открытом приложении {$IFDEF ANDROID} aObj := ANotification.DataObject.GetValue(GCMSignature); if aObj <> nil then aText := aObj.Value else aText := ANotification.DataObject.GetValue(FCMSignature).Value; {$ELSE} aObj := ANotification.DataObject.GetValue(APNsSignature); if aObj <> nil then aText := aObj.Value; {$ENDIF} ShowMessage(aText); end; procedure TForm1.OnServiceConnectionChange(Sender: TObject; AChange: TPushService.TChanges); begin if (TPushService.TChange.DeviceToken in AChange) and Assigned(FPushServiceConnection) then begin FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID]; FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken]; MemoLog.Lines.Add('DeviceID - '+ FDeviceID); MemoLog.Lines.Add('DeviceToken - '+ FDeviceToken); end; end; procedure TForm1.PushServiceRegister; begin FPushService := nil; FPushServiceConnection := nil; {$IF defined(ANDROID)} FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM); FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := FAndroidServerKey; {$ENDIF} {$IF defined(IOS) AND defined(CPUARM)} FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.APS); {$ENDIF} if Assigned(FPushService) then begin FPushServiceConnection := TPushServiceConnection.Create(FPushService); FPushServiceConnection.OnChange := OnServiceConnectionChange; FPushServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent; FPushServiceConnection.Active := true; FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID]; FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken]; MemoLog.Lines.Add('DeviceID - '+ FDeviceID); MemoLog.Lines.Add('DeviceToken - '+ FDeviceToken); end; end; procedure TForm1.FormCreate(Sender: TObject); begin PushServiceRegister; end; end. При регистрации пуш-сервиса строка FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := FAndroidServerKey; вызывает Segmentation Fault (11)
    В 10.3 тот же самый код работает, дебаг ничего не дает, проваливаюсь в процедуру
    procedure TPushService.SetAppProp(const AName, AValue: string); begin FAppProps.AddOrSetValue(AName, AValue); end; а внутрь AddOrSetValue уже не идет, сразу ошибка.
    Если кто сталкивался, помогите плиз
  25. Like
    gonzales получил реакцию от Ingalime в поломались ПУШи в 10.4   
    Нашел причину
    В Library path для Андроид64 добавил путь E:\Embarcadero\Studio\21.0\source\rtl\android, где собственно и лежит Androidapi.JNI.PlayServices.Tasks.pas и все заработало.
    Буду с iOS разбираться теперь
×
×
  • Создать...