[ANE for IOS]iOS自定义URL方案解析

在ios中程序间互相调用可以通过url来解决。在oc里面直接在函数handleOpenURL 便可,但是在ane中就没那么简单了。下面详细介绍下air项目中url的设置和使用,使用支付宝快捷支付ane作为例子。网上有稀稀疏疏的几篇文章偶尔提及,但是并没有完全给出一个DEMO来.

在此之前请详细阅读官方文档:传送门

关于打开URL的ANE例子:传送门

IOS里OC的处理方式:传送门

在AIR中配置URL供其他程序调用


1.首先需要在-app.xml中加入如下配置:([IPHONE]标签中)

<iPhone>
        <InfoAdditions><![CDATA[
			<key>UIDeviceFamily</key>
			<array>
				<string>1</string>
				<string>2</string>
			</array>
			<key>CFBundleURLTypes</key> 
			<array> 
	    	<dict> 
	        	 <key>CFBundleURLSchemes</key> 
    	    	<array> 
        		    <string>AlipayANE</string> 
    	    	</array> 
    	    	<key>CFBundleURLName</key> 
    	    	<string>com.rect.app</string> 
    		</dict> 
		</array>
		]]></InfoAdditions>
        <requestedDisplayResolution>high</requestedDisplayResolution>
    </iPhone>

在这类配置了一个Name为”com.rect.app”的Schemes.调用方式为”AlipayANE://”;

2.在AIR项目代码中加入事件监控,如下:

protected function handler_appComp($evt:FlexEvent):void
			{
                                 //ANE回调侦听
				AlipayExtension.getInstance().addEventListener(StatusEvent.STATUS,handler_status);
				//URL回调侦听
				NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE,onURLHandle);
			}

			protected function onURLHandle(e:InvokeEvent):void
			{
				if(e.arguments.length&gt;0){
					trace(e.arguments[0]);
					var str:String = e.arguments[0] as String;//把URL用String字符串的方式传给OC端
					AlipayExtension.getInstance().AlipayURLHandle_JustIOS(str);
				}
			}

3.然后在OC中如下获取URL对象:

ANE_FUNCTION(AlipayUrl)
{
    NSLog(@"Entering AlipayUrl()");
    FREObject fo = NULL;
    context = ctx;
    [[AlipayDel alloc] sendMegToAs:context code:@"AlipayUrl" level:@"alipay AlipayUrl begin"];
    //获取URL的字符串
    NSString * urlStr = getStringFromFREObject(argv[0]);
    //支付宝相关参数 这里忽略
    NSString * _allpayPubKey = getStringFromFREObject(argv[1]);
    //NSString to NSURL
    NSURL * _alipayURL = [NSURL URLWithString:urlStr];
    //拿到URL后 做该做的事情(具体做什么 SDK会告诉你)
    [[AlipayDel alloc] parse:_alipayURL _allpayPubKey:_allpayPubKey _context:context];
    [[AlipayDel alloc] sendMegToAs:context code:@"AlipayUrl" level:@"alipay AlipayUrl ending"];
    NSLog(@"ending AlipaySignCheck()");
    return fo;
}
}

就支付宝来说,如此便可在支付操作完成之后成功返回AIR应用程序.
具体的请详细阅读支付宝快捷支付ANE源码:传送门

enjoy your code

13 评论

  1. 你好!我想问一下,现在91平台提供的sdk可以做ios的ane吗?我正在做这方面的工作因为项目需要,但是我看了你的博客基本都是android的ane,所以请教一下经验,91的是否支持ios的ane,希望看到留言,能尽快回复我,谢谢!

  2. 大神,我想问一下,iOS的,我公司给我文档让我做ane的sdk以及demo,现在ane做出来了,但是用flash builder打包ipa的时候引用一个外部framework,警告找不到,我想问一下,这个framework是放在flash builder目录里还是放在iOS sdks目录里 ?

      1. xml我也都配置了,但是framework这个文件应该放哪里?有说放fb的sdks/4.6.0/lib/aot/stub,有说放iOS sdk里面,而且.a文件也放不进去,该怎么解决 ?

        1. 不需要把framework这个文件放进去..只需要配置进platformoptions.xml即可,如果还有问题 请查看你的那个库配置参数是什么

          1. 大神,帮忙看看这个错
            Undefined symbols for architecture arm64:
            “_OBJC_CLASS_$_UTDevice”, referenced from:
            objc-class-ref in libcom.adview.AdViewANESDK.a(MMUString.o)
            ld: symbol(s) not found for architecture armv7
            Compilation failed while executing : ld64

            我的.a文件叫 libAdViewANESDK.a,这个咋是libcom.adview.AdViewANESDK.a啊,是不是名字的错 ?哪里可以改成正确引用.a文件啊 ?
            谢谢谢谢

发表评论

电子邮件地址不会被公开。 必填项已用*标注