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

alexbirukov

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

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

  • Посещение

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

    4

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

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

    проблема была именно в получении токена. со стороны сервера вызов HTTP примитивен.

    до сих пор пытаюсь найти источник, где вы это узнали )))

    Что именно нашёл? Там в статье есть ссылки на библиотеки PHP для работы с Push, есть примеры работы. Я просто объединил обе библиотеки одним скриптом простейшим + прикрутил запись токенов в базу. Код для Delphi взял из одного видео испанца (или итальянца), где он делает отправку Push через обращение напрямую к сервисам, но опять же используется токен. Я взял оттуда часть определения токена устройства.

     

    Просто для меня скрипт на PHP удобен тем, что к нему я могу обратиться из любого места, с любой платформы, будь то Web форма или приложение на C# \Delphi. Это лучше, чем для каждой отдельной программы\проекта писать код отправки Push сообщения напрямую через Apple и Google, уж тем более если платформа этого явно не поддерживает.

  2. Провайдер тебе не нужен, посмотри в статье которую я сегодня выложил, там есть этот момент. Когда приходит Push, вызывается отдельная функция, которая выводит Notification, вне зависимости от состояния программы (в фоне или запущена). На форме никакие провайдеры не нужны. Я там привёл полный рабочий код из проекта для Delphi.

  3. В статья я максимально подробно попытался описать работу с PHP скриптом для рассылки Push сообщений из любой программы вне зависимости от платформы. Затрагивается вопроса от экспорта скриптов до кода программы: отправка и получение Push, регистрация устройств.

     

    Надеюсь кому-нибудь пригодится. Буду рад комментариям, обоснованной критике и доработкам.

     

  4. Для информации. Приложения собранные с исправлением от Сарины в xCode 6.4 + XE8.1 без проблем проходят в AppStore и публикуются. 
    Ключ 
     
    41<key>NSAppTransportSecurity</key>
    42<dict>
    43
    44  <key>NSAllowsArbitraryLoads</key>
    45      <true/>
    46</dict>
     

    Не использовал при публикации, хотя приложение и обращается к удалённому xml файлу. Публикация прошла успешно.

  5. Переустановил XCode 7.0, обновил iOS до 9.0.1 вообще работать с XE8 перестало, создал тему.

    p.s. как скачать старые версии Xcode?

    В разделе загрузок в кабинете разработчика, там можно скачать старые версии xCode. Бывает приложение не запускается из Delphi студии, у меня начинает нормально работать, когда запущен PAServer и xCode, тогда и отладка запускается, и запуск приложения на устройстве срабатывает.

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

    Не совсем понятна схема взаимодействия приложения, сайта и магазинов. Для отправки пуша можно использовать приложение или форму с жёстко указанным API. Т.е. части магазинов будут настроены жёстко на указанные API ключи или пользователей. При каждой отправке можно проверять API ключи для доступа к рассылке и на основании значения ключа скрипт будет выбирать, кому делать рассылку.

  7. Доброго времени суток прошу консультации так как ситуация не совсем стандартная 

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

     

    пока в голове только  один вариант организовать свой сервер  и перенаправлять Push по ключу я так  думаю  возможно будет регистрировать устройство   с параметром домен например

    может есть другие  идеи или есть возможность отправлять с сервера клиента без особых заморочек (на  ведре  в принципе  приложение    может работать в фоне и проверять  заказы самостоятельно по таймеру  но  нет стабильности, IOS в обще так понимаю такой возможности нет правда  в целях  эксперимента делал  работу с gps и таймер проверял заказы на сервере  но кому такое приложение нужно которое  без надобности отслеживает место положение и  садит батарею)

    Тоже думал над подобной реализацией. В общем т.к. базу приходится заполнять токенами устройств. Т.е. получается для приложения, есть единая база, в которой собираются все данные из приложения (собираем токены, DeviceID) так же можно при регистрации устройства использовать логин пользователя, в дальнейшем для поиска токена, использовать логин. Таким образом получаем таргетированную доставку push сообщения.

     

    Если доставка нужна сразу все пользователям конкретного магазина, можно записывать в базу домен магазина, и из скрипта просто делать рассылку в соответствии с доменом. Т.е. есть база устройств, в которой есть записи с доменами example1.com, example2.com и т.д.

     

    При отправке сообщение просто выбираем нужных пользователей. При этом все могут использовать 1 скрипт, подавая ему разные параметры, например API своей фирмы и текст сообщения. А скриптом уже выстраивать логику работы.

  8.  

    Мне в свое время помогло:

    vStr := TStringStream.Create(s, TEncoding.UTF8);
    
    не пытайтесь "подвести" под ведро...) мак это дело тонкое... если не пробовали то лучше промолчать...). обратили внимание на нолики? там ведь в байтах передача... не как в ведре... если решу проблему сообщу, и тогда весь мир стекется к моему посту, т. к. не нашёл в инете решений на делфи... ну может есть на провайдерах... но хочу простоты.

     

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

  9.  

    Хммм.

     

    В общем сделал сборку XE10 + xCode 6 + SDK 8.4.

    Приложения собираются, запускаются всё ОК.

     

     

    так в чем косяк то был? 

     

    Да он и остался. Первый пост про связку XE10 + xCode 7 + SDK 9.

    Каким чудом вам удалось запустить приложение из XE10 + xCode 7 + SDK 9 на устройстве с iOS8 мне постичь не удалось. :)

     

    Поэтому понизил до XE10 + xCode 6 + SDK 8.4. Но опять же, не запускаются приложения на iPhone 4S в режиме Release.

     

    В результате сейчас использую XE8.1 + xCode 6 + SDK 8.4 + изменённый FMX.Context.GLES.iOS.pas. Отправил приложение на проверку. Посмотрим, что скажут.

  10. Хммм.

     

    В общем сделал сборку XE10 + xCode 6 + SDK 8.4.

    Приложения собираются, запускаются всё ОК.

     

    Есть iPhone 4S (8.3) в режиме Debug приложение запускается в любой конфигурации.

    Если запустить в режиме Release, после запуска приложение вылетает.

    На эмуляторе всё работает ОК. 

    На планшете iPad Mini 2 (8.2) тоже ОК.

     

    Вопрос, чем может быть связано? И будет ли если опубликовать работать на iPhone 4S если работает на эмуляторе?

  11.  

    заходите в Project->Deployment

    там ищите в колонке Remote Name info.plist отключаете строку и в замен нужно добавить новую  но только со своим файлом с таким же названием info.plist файл нужно скопировать  он у вас есть в папке iOSDevice64/Release/project.info.plist

    я копировал в корень папки проекта  для удобства открываете в любом  текстовом редакторе   (Notepad++)

    и после примерно 39 строки нужно добавить

     

    38 <key>FMLocalNotificationPermission</key>
    39        <string>true</string>
    -------Добавить  код --------
    41<key>NSAppTransportSecurity</key>
    42<dict>
    43
    44  <key>NSAllowsArbitraryLoads</key>
    45      <true/>
    46</dict>
     
    скажу сразу что директива для всех доменов если вы используете только 1 домен  то  правило будет другое

     

    Спасибо БОЛЬШОЕ! Буду пробовать.

  12.  

     

     

    А что люди подумают? Подумают сначала, хотят ли они изобретать костыли при переходе или нет :)

     

    вы пробовали Swift, например, там такие косяки есть, что в RAD так...детский лепет!

    к последнему swift надо прилагать толмут faq-ов на все случаи жизни.

     

    это к теме переходить или не переходить... :))

     

    Нет ну я конечно понимаю, всё познаётся в сравнении. Но я считаю с последними косяками Apple, с постоянными недоделками которые стали возникать + весь этот цирк с публикацией и пр. Просто я считаю, что коробочные версии продуктов должны быть более вылизанными. А не так, чтобы 5 часов коддинга и 120 часов шаманств с бубном наперевес. :)

  13.  

    Да у меня тоже есть приложение с подгрузкой. Но в свете последних экспериментов столкнулся с кучей проблем во всех этих обновлениях. В результате сейчас пытаюсь проверить работу связки XE8.1 + xCode 6.4 SDK 8.4 + исправления от Сарины. Предыдущую версию без исправлений отклонили.

     

    Спасибо вам большое за подробные ответы.

    связка XE8.1 + xCode 6.4 SDK 8.4  у меня не прошла проверку в app store  по причине того что приложение не запустилось на ios 9 также была проблема  с http в ios 9 они рекомендуют использовать https протокол чтобы включить http  параметры надо задавать в ручную в файле info.plist

     

    Хмммм, а вот тут можно поподробнее. Просто у меня приложение при запуске тоже делает запрос именно по http, именно это приложение зависло на заставке. А что конкретно надо изменить в info.plist?

     

    Связки XE10 + xCode 6.4 + SDK 8.4 это тоже касается?

  14. нет зависаний не заметил не смотря на то что  сразу  подгружаю информацию с сайта

    Да у меня тоже есть приложение с подгрузкой. Но в свете последних экспериментов столкнулся с кучей проблем во всех этих обновлениях. В результате сейчас пытаюсь проверить работу связки XE8.1 + xCode 6.4 SDK 8.4 + исправления от Сарины. Предыдущую версию без исправлений отклонили.

     

    Спасибо вам большое за подробные ответы.

  15. ну так! все правильно!

    а Вы "Ошибки", "Косяки"

    что люди подумают?

    Тогда не совсем понятно: 

    XE10 + iOS 6 = полёт нормальный

    XE10 + iOS 7 = полёт нормальный

    XE10 + iOS 8 = полёт нормальный

     

    Речь идёт об эмуляторе или проверке на реальных устройствах? Интересует запуск на реальных устройствах, поведение ПО.

     

    А что люди подумают? Подумают сначала, хотят ли они изобретать костыли при переходе или нет :)

  16. XE10 + iOS 8 = полёт нормальный

    XE10 + iOS 9 = полёт нормальный

    xCode 7

    Странно.

    XE10 + iOS8 (iPhone 4S) - пустое приложение закрывается после заставки.

    XE10 + iOS9 (Эмулятор) - запускается без проблем.

    xCode 7.

     

    При этом приложение собранное в XE8.1 + xCode 6.4 быль отклонено, зависло на заставке на iOS9.

  17. И так, пока русскоязычная и англоязычная части интернета молчат по поводу работы в новой Delphi XE10 Seattle в связке с xCode 7, а компании представители описывают, какое замечательное вышло обновление, пользователи столкнулись с проблемой, что приложения, сделанные на XE10 Seattle, xCode 7 + SDK9, не запускаются на предыдущих платформах.

    Не совсем понятно, почему в упомянутых сегментах интернета нет совершенно никакой информации по данному поводу. Опять впереди планеты все Китай.

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

    Коротко о главном. Если вы хотите, как можно скорей перейти на новую Delphi XE10 Seattle с целью писать свежие приложения\обновления для iOS, спешу вас разочаровать. Ваши программы перестанут работать на предыдущих версиях iOS. Статистика испытаний такова, что приложения собранные на XE10 Seattle, xCode 7 + SDK9 будут работать только на устройствах под управлением iOS9.

    Вторая проблема, состоит в том, что недавнего времени AppStore при проверке приложений стала проверять их именно на iOS 9, а приложения собранные на XE8.1 такую проверку не проходят, так как зависают на стартовой заставке приложения и как следствие их отклоняют. Вот так то. Прошла уже целая неделя, а интернет по данному поводу ничего сказать нам особо не может.

    На днях появилась статья от Сарины Дю Понт, о том, как всё же запустить приложение сделанные в XE8.1 на iOS9.

    В результате изысканий Китайских друзей, получаем на данный момент такую картину:

    XE8 + iOS 6 = полёт нормальный
    XE8 + iOS 7 = полёт нормальный
    XE8 + iOS 8 = полёт нормальный
    XE8 + iOS 9 = зависание на экране заставки (если не воспользоваться советом Сарины)

    XE10 + iOS 6 = приложение вылетает
    XE10 + iOS 7 = приложение вылетает
    XE10 + iOS 8 = приложение вылетает
    XE10 + iOS 9 = полёт нормальный

    Таким образом в XE10 Seattle и xCode 7 можно получить на данный момент только приложение, работающее на iOS9.

    Ждём Delphi XE10 Seattle Update 1.

    P.S. А в на Android в Delphi XE10 Seattle приложение с компонентами для отправки Push не запускается в режиме Release — Application Store. Что тоже, очень и очень печально.

  18. В 8.1 у меня отлично работает стандартный шаблон без каких либо исправлений.

    <?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%">
    
    <%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>
            <%activity%>
            <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" />
            <%receivers%>
        </application>
    </manifest>
    <!-- END_INCLUDE(manifest) -->
    
    
  19.  

    Всё делал и как написано, и по всякому.

    В проекте нет кода. Тестовый проект, без всякого кода, просто два элемента на форме. Провайдер и ПушЭвент. Запускаем, получаем чёрный экран. Даже если отключить автоактивацию и пр. Что Kinvey, что Parse, не работает ни то, ни другое в режиме Релиза на андройде.

    вы говорите все ок...но походу не так ))

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

     

    Я не говорю, что всё ОК. Я говорю, что всё, что вы писали я проверял. Проекты в которых РАБОТАЛИ и РАБОТАЮТ пуши, под Delphi 10 не запускаются, ровно так же, как и новые проекты с компонентом для работы с Push.

     

    <?xml version="1.0" encoding="utf-8"?>
    <!-- BEGIN_INCLUDE(manifest) -->
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="*"
            android:versionCode="1"
            android:versionName="1.0.0"
            android:installLocation="preferExternal">
    
        <!-- This is the platform API where NativeActivity was introduced. -->
        <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
        <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.READ_CALENDAR" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <permission android:name="*.permission.C2D_MESSAGE" android:protectionLevel="signature" />
        <uses-permission android:name="*.permission.C2D_MESSAGE" />
        <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    
        <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
        <application android:persistent="False" 
            android:restoreAnyVersion="False" 
            android:label="*" 
            android:debuggable="False" 
            android:largeHeap="False"
            android:icon="@drawable/ic_launcher"
            android:theme="@style/AppTheme"
            android:hardwareAccelerated="true">
    
    
    		
    		<service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />
            <!-- 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="*"
                    android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
                    android:launchMode="singleTask">
                <!-- Tell NativeActivity the name of our .so -->
                <meta-data android:name="android.app.lib_name"
                    android:value="*" />
                <intent-filter>  
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter> 
            </activity>
            
            <receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" />
    <receiver android:exported="true" android:name="com.embarcadero.gcm.notifications.GCMNotification" android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
    <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    <category android:name="*" />
    </intent-filter>
    </receiver>
    
        </application>
    </manifest>
    <!-- END_INCLUDE(manifest) -->
    
    
  20.  

     

    вы удалили xcode, а потом поставили заново или обновили просто?

    надо снести и установить заново!

    Чистая установка. Установил Windows 7 x64, на неё поставил Delphi 10. Затем взял образ OS X Yosemite, установил туда xCode7 с SDK9. В результате всё, как и в прежних вариантах, та же ошибка.

     

    Вы проверяли данную конфигурацию. Работает она вообще?

     

     

    что то похожее

     
    Win8.1x64pro
    Yosemite 10.10(vmware)
    xcode6.4
    PAserver16
    XE8upd1
    Login мака и конечно логин в xcode - девелопера(99$)
    сертификаты загружены за счет xcode
    Запускаю пасервер на маке без пароля(для чего инсталлятор под виндовс пока загадка)
    IOS Device32
     
    работает норм

     

    Нет, студия 8.1 и xCode 6.4 у меня работают без проблем. Не работает Delphi 10 и xCode 7 с SDK9.

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