29 сентября 2010 в 17:09

Запускаем Flash из Safari на iPhone/iPad

Имеется страница, Flash контент на которой необходим, а с iPhone и iPad сплошное расстройство.
Например Flash графики.
Казалось бы, пути два:
1. Заменять Flash html5
2. Заменять Flash статической картинкой

Но… но можно немного поизвращаться. Третий способ под катом.

Этот способ, к сожалению, не универсален и не подходит для всех приложений, но если надо показать Flash графики или что-нибудь подобное в странице — подойдет на ура.

Идея


1. Делаем iPhone версию приложения
2. Правим Info.plist в приложении и добавляем URL Scheme для приложения (например anychart://)
3. Добавляем в страницу детект iphone/ipad и редиректим в iTunes или открываем приложение
Вуаля. Пользователь может увидеть график.

Реализация


Делаем iPhone версию приложения

Первый шаг я даже не буду описывать. Кому интересно — хабратопик: habrahabr.ru/blogs/Flash_Platform/104538

Правим Info.plist в приложении и добавляем URL Scheme для приложения (например anychart://)

Второй шаг немного интереснее. Нам надо открыть сбилженый Flash-ем IPA и поправить в нем файлик.
Все достаточно просто:
1. Переименовываем ipa в zip
2. Разархивируем


3. Идем в разархивированную папку Payload и видим там папку приложения. Идем в нее (на Mac через Show package contents)


В этой папке лежит необходимый нам файл Info.plist
В Mac он редактируется через Property List Editor, но можно править любым текстовым редактором.
Нам надо добавить в корень URL types, в нем в Item 0 добавить URL Schemes, а в нем уже прописать URL схему для приложения. Например, чтобы приложение открывалось по ссылке вида myflashapp://param=123, нам надо прописать myflashapp.

Скрин:


Если Mac-а под рукой нет и правим в текстовом редакторе, то в корневую ноду <dict> надо добавить следующее:
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myflashapp</string>
        </array>
        <key>CFBundleURLName</key>
        <string></string>
    </dict>
</array>

Скрин:


Все. Дальше сохраняем файлик, пакуем Payload обратно в zip архив и переименовываем в ipa. И ставим на девайс.

Теперь наше приложение будет открываться в Safari по ссылке.

Например:
<a href=«testflashapp://?test=123»>Open app</a>

Добавляем умную ссылку

Простой код, который или откроет приложение, или редиректнет в iTunes для установки приложения:

setTimeout(function() {
    window.location = «itunes.com/apps/yourappname»;
}, 25);

// If «custom-uri://» is registered the app will launch immediately and your
// timer won't fire. If it's not set, you'll get an ugly «Cannot Open Page»
// dialogue prior to the App Store application launching
window.location = «custom-uri://»;

Бонус пак

Параметры, переданные приложению, ловить в InvokeEvent.INVOKE
Александр Бацуев @AlDev
карма
43,2
рейтинг 0,0
Похожие публикации
Самое читаемое Разработка

Комментарии (18)

  • +6
    КОСТЫЛЬ
    • –1
      Но при этом дешевый
  • +2
    >Но… но можно немного поизвращаться.

    Ключевая фраза.
  • +1
    Извращение еще то;)
  • +1
    OMG, нет — уж лучше заменяйте на html5.
    • +1
      Цена вопроса больно большая
      • 0
        Пора уже Алексей, пора.
        • +1
          Александр
          • +1
            Действительно — очень прошу прощения, ошибся.
  • –1
    Если очень надо, то FusionCharts неплохо рисует графики в HTML5.
    • +1
      Ну не совсем они) Они просто перепродают html5 графики.
    • +1
      Они перепродают html5 рещение. Сами html5 графики не их.
      • +1
        Сори первый раз коммент не опубликовался
  • –1
    А разве после изменения Info.plist не поломается цифровая подпись для сабмита в AppStore?
    • +1
      Приложения подписываются непосредственно перед сабмитом. До этого момента можете менять контент IPA'шки как угодно.
      • 0
        Та ладно, Application Loader ничего не подписывает.
    • 0
      Можно пересобрать снова через Flash Packager
  • 0
    Жестокий костыль, но есть еще хуже… см. в Cydia.

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