0

一种可能的解决方案是使用自定义 URL:

我遵循以下教程,然后进一步探索 IOS 中两个 AIR 应用程序的通信。- 第一个应用程序使用您在第一步中描述的自定义 URI“fbMY_APP_ID”,它可以被 Safari 调用。- 第二个应用程序使用带有自定义 URI 的 URLRequest 与第一个应用程序通信。

我收到错误消息:“SecurityError:错误 #2193:违反安全沙箱:navigateToURL:app:/secondApp.swf 无法访问 tfbMY_APP_ID://test”。

  1. 我在这种方法中遗漏了什么吗?有没有办法摆脱这个问题?
  2. 除了使用自定义 URL 还有其他方法吗?
4

2 回答 2

1

根据 Adob​​e AIR 强加的安全沙箱,navigateURL 仅限于众所周知的协议,例如 http:、https:、sms:、tel:、mailto:、file:、app:、app-storage:、vipaccess: 和 connectpro: . 您可以通过此处此处找到更多信息。

一种解决方法是利用 html 页面作为中间页面,该页面将在其中中继调用。

于 2012-07-09T16:03:13.753 回答
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));
}

要侦听呼叫并实际处理正在传递的数据,请执行以下操作:

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
    }
    //...
}

希望有帮助

干杯:

-缺口

于 2014-09-30T08:35:55.700 回答