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

Rusland

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

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

  • Посещение

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

    26

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

  1. В 04.11.2017 в 02:02, Fedor K сказал:

    есть  ссылка #1

    Ответ из этой ссылки 

    #if DEBUG
    
    @implementation NSURLRequest (NSURLRequestWithIgnoreSSL) 
    
    + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
    {
        return YES;
    }
    
    @end
    
    #endif

    позволяет в XCode работать с самоподписанными сертификатами. Всего пару строк добавил и заработало :)

    Хотелось бы так же просто и в FMX... или переходить на XCode?  :)

     

  2. В 04.11.2017 в 02:02, Fedor K сказал:

    Добавляем в .plist из комментария разрешения.

    Нашел этот .info.plist

    В нем указано:

    		<dict>
    			<key>NSAllowsArbitraryLoads</key><true/>
    		</dict>

    Это и есть YES?

     

    В 04.11.2017 в 02:02, Fedor K сказал:

    Открываем FMX.WebBrowser.Delegate.iOS и правим TWebViewDelegate.shouldStartLoadWithRequest, запрещая загрузку при получении invalid сертификата

    Нельзя ли рассказать подробнее что конкретно и как править? Если честно, то не понял вообще что делать :)

    В 04.11.2017 в 02:02, Fedor K сказал:

    В методе didReceiveAuthenticationChallenge доверяем сертификату.

    didReceiveAuthenticationChallenge в FMX.WebBrowser.Delegate.iOS.pas нет (во всей директории source\fmx тоже).

    @Fedor K не могли вы выложить готовый пример с правками?

  3. Судя по скринам ini-файл берется из папки Android\Debug. Зачем так делать? Эту папку создает сама студия. Возможно что Clean очищает все содержимое в этой папке и строка становится неактивной, потому что файла больше нет.

     

    19 часов назад, Roman V сказал:

    Пробовал класть ini файл в другую директорию, и загружать оттуда, но в Remote Path все равно указывал assets\internal. В таком случае строка остается активной, однако приложение не запускается...

    Какую ошибку при этом выдает?

  4. var
      Form1: TForm1;
      ind: integer;
    
    implementation
    
    {$R *.fmx}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ind := 0;
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      ind := ind + 1;
      if FileExists(System.IOUtils.TPath.Combine(
        System.IOUtils.TPath.GetDocumentsPath, 'picture' + ind.ToString + '.png')) then
      Image1.Bitmap.LoadFromFile(System.IOUtils.TPath.Combine(
        System.IOUtils.TPath.GetDocumentsPath, 'picture' + ind.ToString + '.png'));
    end;

     

  5. В 18.09.2017 в 14:34, Pax Beach сказал:

    Потому что в MUI большой упор на энергосбережение

    Переключил режим Энергосбережения с Оптимальный на Отключено и сразу проблема с коннектом пропала :D

  6. uses  
      FMX.DialogService,  FMX.VirtualKeyboard
    ...
    
    procedure TfrSets.txtPassClick(Sender: TObject);
    begin
      InputText('Введите пароль', Sender);
    end;
    
    procedure TfrSets.InputText(heading: String; Sender: TObject);
    var
      FKService: IFMXVirtualKeyboardService;
    begin
      TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FKService));
    
      TDialogservice.InputQuery(heading, ['Ввод'], [(Sender as TText).Text],
        procedure(const AResult: TModalResult; const AValues: array of string)
          begin
            case AResult of
              mrOk:
                begin
                  (Sender as TText).Text:=avalues[0];    
                  if (FKService<>nil) and (TVirtualKeyBoardState.Visible in FKService.VirtualKeyBoardState) then
                  begin
                    FKService.HideVirtualKeyboard;
                  end;
                end;
              mrCancel:
                begin
                  if (FKService<>nil) and (TVirtualKeyBoardState.Visible in FKService.VirtualKeyBoardState) then
                  begin
                    FKService.HideVirtualKeyboard;
                  end;
                end;
            end;
          end
        );
    end;

    Делаю так ^^^

  7. В 24.03.2017 в 19:11, Pax Beach сказал:

    В MIUI вообще сервисы Delphi не запускаются.

    Проверил, запускает и работает (Xiaomi Redmi Note 4 MIUI Global 8.5).

    Но вот наблюдаю такую проблему:

    Есть сервис, который при старте делает POST-запрос и создает "будильник", для последующего перезапуска самого себя:

    function TDM.AndroidServiceStartCommand(const Sender: TObject;
      const Intent: JIntent; Flags, StartId: integer): integer;
    begin
      Result := TJService.JavaClass.START_STICKY; // тут может быть и START_NOT_STICKY - это не важно
    
      SendPost('post запрос до сервера');            
    
      PendIntent();
    end;
    
    procedure TDM.PendIntent(); 
    var
      Intent: JIntent;
      PendingIntent: JPendingIntent;
    begin
      Intent := TJIntent.Create;
      Intent.setAction(StringToJString('60sec'));
      Intent.setClassName(TAndroidHelper.Context,
        StringToJString('com.embarcadero.services.CabSrv'));
    
      PendingIntent := TJPendingIntent.JavaClass.getService(TAndroidHelper.Context,
        1, Intent, 0);
    
      TAndroidHelper.AlarmManager.&set(TJAlarmManager.JavaClass.RTC_WAKEUP,
        getTimeAfterInSecs(60), PendingIntent); // раз в минуту вызываем сервис
    end;
    
    
    procedure TDM.SendPost(txt: string);
    var
      aResponse: IHTTPResponse;
      aResponser: TResponser;
      sStream: TStringStream;
      aHttpClient: TNetHTTPClient;
      sList: TStringList;
    begin 
      TTask.Run(
        procedure
        begin
          try
            aHttpClient := TNetHTTPClient.Create(nil);        
            aHttpClient.OnValidateServerCertificate := OnValidateServerCertificate;        
            aHttpClient.AcceptLanguage := 'ru,en;q=0.8';
            aHttpClient.ContentType := 'application/x-www-form-urlencoded';
            aHttpClient.AcceptCharset := 'utf-8';
            aHttpClient.Accept :=
              'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';
    
            sStream := TStringStream.Create();
            sList := TStringList.Create;
            sList.Add('txt=' + txt);
            
            try        
              aResponse := aHttpClient.Post(Sets.Host, sList, sStream);          
            finally
              if ((sStream <> nil) and (aResponse <> nil)) then
              begin            
                Log('SendPost OK');
              end
              else
                Log('SendPost Error');
              sStream.Free;
              sList.Free;
            end;
          finally
            aHttpClient.Free;
          end;
    
        end);
    end;

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

    except java.net.SocketTimeoutException: connect timed out

    В чем может быть проблема и как ее решить?

     

     

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