此文只做关键知识点的记录,不做详细流程。

安卓方面

1、回调的时候需要增加WXEntryActivity,这个名字必须和他一样,其次就是包名写成你申请的app的包名再加上wxapi 就行,不用和创建的ane项目的包名一致。

如下图我在没有对包进行去除air前缀的情况的 包名 是 air.com.xmooon.collision。而我创建的ane的包名 是com.nick.wechatane。

wechat01

然后在xx-app.xml的配置里面需要加上


<activity

android:name=".wxapi.WXEntryActivity"

android:exported="true"

android:launchMode="singleTop"/>

其他权限配置 参考 官方接入文档即可。另外值得说明的是 在登录回调中取得授权码的话,安卓的是


SendAuth.Resp newResp = (SendAuth.Resp)

resp;newResp.token;

IOS的 是 code。

2、分享方面

我这里只做了网页分享,说下关键的 msg构建,title description 是必须的,然后的话就是图片,图片可选。如果不填 则会会自动分享向微信注册时上传的icon。分享图片的话,由于我是打算分享任意图片,并不只存在于安装目录下的图片,所以我用的下面的代码。然后图片存储的位置的话,安卓就存在File.desktopDirectory,然后拿file的url不要拿nativePath。


WXMediaMessage _msg = <strong><b>new</b></strong> WXMediaMessage( _webObj );

_msg.title = _title;

_msg.description = _description;

Bitmap bmp = <strong><b>null</b></strong>;

<strong><b>try</b></strong>

{

InputStream _inputStream = <strong><b>new</b></strong> URL(_imgUrl).openStream();

bmp = BitmapFactory.<em><i>decodeStream</i></em>(_inputStream);

_inputStream.close();

}

<strong><b>catch</b></strong> (IOException e)

{

e.printStackTrace();

}

_msg.thumbData = Util.<em><i>bmpToByteArray</i></em>(bmp,<strong><b>true</b></strong>);

IOS方面

文件结构大概如下

wechat02

红色圈中的是额外要导入的 同时coretelephony.framework 我们是要打入ane的。需要复制 出来。

其他代码部分就不贴了下面看源码。

分享的话 包含图片的地方 用 这个

_img = [UIImage imageNamed:_imgUrl];

即可,但如果是任意的图片,需要将图片放在air的专门存储目录File.applicationStorageDirectory,然后取nativePath。

 

IOS的回调对于air有个问题是,不会走原生代码,比如我按照网友提供的 增加了一些这个

wechat03

然后并没有卵用。这个时候 我们需要用scheme的方式来获取微信端的回调。即监听

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

然后进行字符串的解析即可。

 

另外IOS在打包为ane的时候 或者是在打包ipa的时候容易出现


Error: Apple App Store allows only universal applications. "libwxane.a" is not a

universal binary. Please change build settings in Xcode project to "Standard Ar

chitecture" to create universal library/framework.

的问题,如果出现这个问题,首先检查静态库是否是通用二进制,lipo -info xx.a 如果看到输出的有 arm64 以及armv7的话,那说明是通用二进制了。

配置的话 大概这样

wechat04

这个时候如果还是会出现上述的问题,那么可更换AIR SDK。我用的是AIR SDK 18。

如果还是会出上面的问题,那么就是你使用的打包命令有问题。

以前我是将adt.jar 直接复制到打包目录,然后 代码是 java -jar adt.jar -package.这样的前缀,始终会出现上面的不是通用二进制的问题,后面采用了绝对路径的方式打包 就解决了

D:/softs/fb4.7/AIRSDK/bin/adt -package。这样既可

全部打包命令


D:/softs/fb4.7/AIRSDK/bin/adt -package -target ane WXAne.ane extension.xml -swc WXAne.swc -platform Android-ARM -platformoptions platformoptions_android.xml -C Android-ARM . -platform iPhone-ARM -platformoptions platformoptions_ios.xml -C iPhone-ARM .

其实还有个要注意的是-C Android-ARM . 这里Android-ARM后面 的那个句号,必须要和Android-ARM 间隔一个空格,不然的话就会一直提示缺少library.swf的提示,即便你确定存在。

补上 安卓的platform.xml


<?xml version="1.0" encoding="UTF-8"?>

<platform xmlns="http://ns.adobe.com/air/extension/18.0">

<packagedDependencies>

<packagedDependency>libammsdk.jar</packagedDependency>

</packagedDependencies>

<packagedResources>

<packagedResource>

<packageName>com.nick.wechatane</packageName>

<folderName>res</folderName>

</packagedResource>

</packagedResources>

</platform>

上面的res 就直接在ane项目里面拷过来即可

 

Ios的


<platform xmlns=<em><i>"http://ns.adobe.com/air/extension/18.0"</i></em>>

<description > An optional description</description>

<copyright>2012 (optional)</copyright>

<sdkVersion>6.0</sdkVersion>

<linkerOptions>

<option>-ios_version_min 6.0</option>

<option>-framework CoreTelephony</option>

</linkerOptions>

</platform>

2018/4/8 更新记录:
以上ane经过测试再air18能够正常打包ipa 但是在air29 air18中打包ipa不成功 会出现

ld: in C:\Users\nick\AppData\Local\Temp\0bb73f21-b3f1-4bd4-bcc2-b7c0c2aec5dc\libcom.nick.wxane.a(WechatAuthSDK.o), unsupported address encoding (5A) of personality function in CIE for architecture arm64
Compilation failed while executing : ld64

这样的报错提示,但是经过lipo -info 确认微信的静态库 也确实是支持64位,但是我们也不可能去用air18 毕竟后面11个版本更新的东西 也是挺多的。最后通过使用微信的 1.7.5版本的sdk解决此问题。而上面的ane使用的是 1.8.2版本。如果你也遇到这个问题,也许换个微信的sdk 就好了。


安卓项目源码下载

IOS项目源码下载

打包文件+ane下载

as3库项目下载

测试项目下载

微信sdk 1.7.5下载

 

发表评论

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