记录接入微信登录、分享ANE时的一些关键知识点
此文只做关键知识点的记录,不做详细流程。
安卓方面
1、回调的时候需要增加WXEntryActivity,这个名字必须和他一样,其次就是包名写成你申请的app的包名再加上wxapi 就行,不用和创建的ane项目的包名一致。
如下图我在没有对包进行去除air前缀的情况的 包名 是 air.com.xmooon.collision。而我创建的ane的包名 是com.nick.wechatane。
然后在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方面
文件结构大概如下
红色圈中的是额外要导入的 同时coretelephony.framework 我们是要打入ane的。需要复制 出来。
其他代码部分就不贴了下面看源码。
分享的话 包含图片的地方 用 这个
_img = [UIImage imageNamed:_imgUrl];
即可,但如果是任意的图片,需要将图片放在air的专门存储目录File.applicationStorageDirectory,然后取nativePath。
IOS的回调对于air有个问题是,不会走原生代码,比如我按照网友提供的 增加了一些这个
然后并没有卵用。这个时候 我们需要用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的话,那说明是通用二进制了。
配置的话 大概这样
这个时候如果还是会出现上述的问题,那么可更换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 就好了。