守望者--AIR技术交流

标题: iOS自定义URL方案解析 [打印本页]

作者: 破晓    时间: 2015-1-19 11:17
标题: iOS自定义URL方案解析

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

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

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

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

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


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

  1. <font color="rgb(51, 51, 51)"><iPhone>
  2.         <InfoAdditions><![CDATA[
  3.             <key>UIDeviceFamily</key>
  4.             <array>
  5.                 <string>1</string>
  6.                 <string>2</string>
  7.             </array>
  8.             <key>CFBundleURLTypes</key>
  9.             <array>
  10.             <dict>
  11.                  <key>CFBundleURLSchemes</key>
  12.                 <array>
  13.                     <string>AlipayANE</string>
  14.                 </array>
  15.                 <key>CFBundleURLName</key>
  16.                 <string>com.rect.app</string>
  17.             </dict>
  18.         </array>
  19.         ]]></InfoAdditions>
  20.         <requestedDisplayResolution>high</requestedDisplayResolution>
  21.     </iPhone></font>
复制代码
在这类配置了一个Name为”com.rect.app”的Schemes.调用方式为”AlipayANE://”;
2.在AIR项目代码中加入事件监控,如下:
  1. protected function handler_appComp($evt:FlexEvent):void
  2.             {
  3.                                  //ANE回调侦听
  4.                 AlipayExtension.getInstance().addEventListener(StatusEvent.STATUS,handler_status);
  5.                 //URL回调侦听
  6.                 NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE,onURLHandle);
  7.             }

  8.             protected function onURLHandle(e:InvokeEvent):void
  9.             {
  10.                 if(e.arguments.length>0){
  11.                     trace(e.arguments[0]);
  12.                     var str:String = e.arguments[0] as String;//把URL用String字符串的方式传给OC端
  13.                     AlipayExtension.getInstance().AlipayURLHandle_JustIOS(str);
  14.                 }
  15.             }
复制代码
3.然后在OC中如下获取URL对象:
  1. ANE_FUNCTION(AlipayUrl)
  2. {
  3.     NSLog(@"Entering AlipayUrl()");
  4.     FREObject fo = NULL;
  5.     context = ctx;
  6.     [[AlipayDel alloc] sendMegToAs:context code:@"AlipayUrl" level:@"alipay AlipayUrl begin"];
  7.     //获取URL的字符串
  8.     NSString * urlStr = getStringFromFREObject(argv[0]);
  9.     //支付宝相关参数 这里忽略
  10.     NSString * _allpayPubKey = getStringFromFREObject(argv[1]);
  11.     //NSString to NSURL
  12.     NSURL * _alipayURL = [NSURL URLWithString:urlStr];
  13.     //拿到URL后 做该做的事情(具体做什么 SDK会告诉你)
  14.     [[AlipayDel alloc] parse:_alipayURL _allpayPubKey:_allpayPubKey _context:context];
  15.     [[AlipayDel alloc] sendMegToAs:context code:@"AlipayUrl" level:@"alipay AlipayUrl ending"];
  16.     NSLog(@"ending AlipaySignCheck()");
  17.     return fo;
  18. }
  19. }
复制代码
就支付宝来说,如此便可在支付操作完成之后成功返回AIR应用程序.
具体的请详细阅读支付宝快捷支付ANE源码:传送门enjoy your code
本文来自:http://shadowkong.com/archives/1338







欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/)