微信SDKdemo运行错误问题
微信SDK接入设置
实现分享到好友、朋友圈
微信SDKdemo运行错误问题
下载了官方的demo,激动地运行了一下,十几个错误,内心其实是崩溃的。

%title插图%num

根据错误提示,去修改architecture,然并卵,几经周折,终于发现问题所在!进入工程->targets->Build Phases->Link Binary With Libraries 添加Security.framework,OK,编译运行成功。

%title插图%num

微信SDK接入
做分享的时候,不想用第三方分享平台的话,自己实现也是比较有趣的,接下来假设你已经注册成为微信开放平台的开发者,且为你的APP申请到AppID和AppSecret。如果没有,请戳:1.注册微信平台开发者:http://jingyan.baidu.com/article/3052f5a1c8090397f31f8620.html 2.创建APP:http://jingyan.baidu.com/article/c45ad29c35d938051653e257.html
做好准备好工作后,从官网下载*新的WeChatSDK,本文使用的是WeChatSDK1.6.2,解压之后里面将文件夹拖入工程中,记得勾选Copy items if needed。
接下来,首先添加sdk所需要链接的.a文件,进入 工程->targets->Build Phases->Link Binary With Libraries 点击 +,选中Add others…, 选中SDK文件夹中libWeChatSDK.a 确定即可。其次添加所需要的frameworks,完成如下图(注意添加libc++.tdb,官方文档缺少):

%title插图%num

另,iOS中程序之间都是相互隔离,跳转到其他APP使用的是URL Scheme,进入 Targets -> info设置LSApplicationQueriesSchemes(类型NSArray),添加weixin,如下图:

%title插图%num
编译一下,出现如下提示:

%title插图%num

这是因为iOS9引入了新特性App Transport Security (ATS),即要求APP内部访问的网络必须使用Https协议,但微信的SDK使用的仍然是Http,需要进入 Targets -> info设置App Transport Security Settings(类型Dictionary),在NSAppTransportSecurity下添加Allow Arbitrary Loads(类型 Boolean)值为YES。如下图:

%title插图%num

编译一下成功!
实现分享到好友、朋友圈
说了这么多,该进入代码实现了。在APPdelegate注册微信

 

– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[WXApi registerApp:@”your APPID”];
return YES;
}

你可以通过[WXApi isWXAppInstalled]、[WXApi isWXAppSupportApi]判断出用户是否安装微信、微信是否支持API,做出相应的操作。
我们的APP要想打开微信,遵循微信代理WXApiDelegate,重写application: openURL:options:方法,设置微信代理:

– (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
return [WXApi handleOpenURL:url delegate:self];
}
#pragma mark -WXApiDelegate协议方法
– (void) onReq:(BaseReq *)req {

}
– (void) onResp:(BaseResp *)resp {
}

 

协议方法具体使用,请自行command或参考官方demo。接下来可以实现分享,在.m文件中 #import “WXApiObject.h” #import “WXApi.h”。笔者写了两个按钮点击事件,项目中看具体的需求了,响应事件如下:

– (void)shareToTimeline {
NSLog(@”分享到朋友圈”);
SendMessageToWXReq * req = [[SendMessageToWXReq alloc] init];
req.text = @”看我看我。。。”;
req.bText = YES;
req.scene = WXSceneTimeline;

[WXApi sendReq:req];
}
– (void)shareToSession {
NSLog(@”分享到好友”);
WXMediaMessage *message = [WXMediaMessage message];
[message setThumbImage:[UIImage imageNamed:@”res5thumb.png”]];
WXWebpageObject *ext = [WXWebpageObject object];
ext.webpageUrl = @”http://cul.qq.com/a/20160226/009086.htm?pgv_ref=aio2015&ptlang=2052#p=1″;
message.mediaObject = ext;
message.title = @”点开看看,有惊喜”;
message.description = @”揭古代妃子阿哥真实照 样貌丑气质差引吐槽”;
SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession;

[WXApi sendReq:req];
}

聪明的小伙伴会发现SendMessageToWXReq的对象的secne属性是发送的目标场景,可以选择发送到会话(WXSceneSession)或者朋友圈(WXSceneTimeline)。 这个属性默认发送到会话。
分享的内容和场景可以根据需求设置SendMessageToWXReq的对象属性实现啦,暂写到这里了。
*次尝试写博客,很多地方很蹩脚,请各位多多指教!谢谢!