2012-04-19 2 views
0

Возможное решение: Пользовательский URL-адрес:Как подключить два приложения AIR IOS?

Я следую following tutorial, а затем исследую для связи для двух приложений AIR в IOS. - Первое приложение использует пользовательский URI «fbMY_APP_ID», как описано на вашем первом шаге, что вполне можно назвать Safari. - Второе приложение использует URLRequest с пользовательским URI для связи с первым приложением.

Я получаю сообщение об ошибке: «SecurityError: Error # 2193: нарушение безопасности песочницы: navigateToURL: приложение: /secondApp.swf не может получить доступ к tfbMY_APP_ID: // test».

  1. Я что-то пропустил в этом подходе? Есть ли способ избавиться от проблемы?
  2. Есть ли другой способ, кроме использования пользовательского URL?

ответ

1

В соответствии с защищенной песочницей, созданной Adobe AIR, navigateURL ограничивается известными протоколами, такими как http :, https :, sms :, tel :, mailto :, file :, app :, app-storage: , vipaccess: и connectpro :. Вы можете найти более подробную информацию через here и here.

Один из способов обойти - использовать html-страницу как промежуточную, где страница будет передавать вызовы.

1

Вы можете добавить собственный протокол из приложения файл манифеста, как это (вы можете добавить более одного протокола)

<iPhone> 
... 
    <InfoAdditions> 
     <![CDATA[ 
      ... 
      <key>CFBundleURLSchemes</key> 
      <array> 
       <string>thisIsSomeCustomAppProtocol</string> 
      </array> 
      ... 
      ]]> 
    </InfoAdditions> 
    ... 
</iPhone> 

и вы называете пользовательский протокол, как это:

<a href="thisIsSomeCustomAppProtocol://SomeCustomDataString_goes_here&use_url_encoded_strings:">This will call the App with some parameters included (if need be)</a> 

Или используйте navigateToURL (...) следующим образом:

var _customURL_str:String  = "thisIsSomeCustomAppProtocol://SomeCustomDataString_goes_here&use_url_encoded_strings"; 
var _isProtocolAvailable:Boolean= URLUtils.instance.canOpenUrl(_customURL_str); 
// 
if(_isProtocolAvailable) 
{ 
    navigateToURL(new URLRequest(_customURL_str)); 
} 

Для прослушивания вызова и действительного процесса t он данных, который передается, сделайте следующее:

NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE,_invokeHandler); 

обработчик событий обрабатывает данные, как это:

private function onInvoke(e:InvokeEvent):void 
{ 
    //... 
    var _queryString:String = e.arguments[0] ? e.arguments[0] : ""; 
    // 
    if(_queryString.length > 0){ 
     //handle the incomming data string 
    }else{ 
     //no extra data string was sent 
    } 
    //... 
} 

надежда, что помогает

Приветствия:

-Nick

Смежные вопросы