iOS 微信分享-官方集成
之前陆陆续续做过一些三方分享,都是一键集成包含各大社交软件的三方,例如shareSDk和友盟,这次应公司要求,需要单个集成,下面是集成步骤,老规矩,有问题请留言或者评论🙏
1.帐号申请
首先登录微信开放平台,注册一个帐号
2.提交APP审核
为什么必须提交app审核呢?
审核2天就可以审核通过,通过之后为下图,为应用申请了appid和appsecret
3.下载最新的SDK
点--这里--去官网下载最新sdk
4.导入SDK
在工程Build Phases -> Link Binary With Libraries 链接以下动态库和框架文件
5.设置白名单(点击查看白名单详细信息)
6.关闭bitcode
7.设置URL
8.使用SDK注册你的APP
在AppDelegate
此方法中注册,导入import "WXApi.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:@"xxxxxxxxxxxx"];//此为申请下来的key一般以wx开头
return YES;
}
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [WXApi handleOpenURL:url delegate:self];
}
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
return [WXApi handleOpenURL:url delegate:self];
}
#pragma mark WXApiDelegate 微信分享的相关回调
// onReq是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用sendRsp返回。在调用sendRsp返回时,会切回到微信终端程序界面
- (void)onReq:(BaseReq *)req
{
NSLog(@"onReq是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用sendRsp返回。在调用sendRsp返回时,会切回到微信终端程序界面");
}
// 如果第三方程序向微信发送了sendReq的请求,那么onResp会被回调。sendReq请求调用后,会切到微信终端程序界面
- (void)onResp:(BaseResp *)resp
{
NSLog(@"回调处理");
// 处理 分享请求 回调
if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
switch (resp.errCode) {
case WXSuccess:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"分享成功!"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
}
break;
default:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"分享失败!"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
}
break;
}
}
}
8.分享核心代码
- (IBAction)shareBtn:(UIButton *)sender {
//创建发送对象实例
SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc] init];
sendReq.bText = NO;//不使用文本信息
sendReq.scene =
0;
// 发送到聊天界面 0
// 发送到朋友圈 1
// 发送到微信收藏 2
//创建分享内容对象 WXMediaMessage *urlMessage = [WXMediaMessage message]; urlMessage.title = @"";//分享标题 urlMessage.description = @"";//分享描述 [urlMessage setThumbImage:[UIImage imageNamed:@"Img"]];//分享图片,使用SDK的setThumbImage方法可压缩图片大小 //创建多媒体对象 WXWebpageObject *webObj = [WXWebpageObject object]; webObj.webpageUrl = kLinkURL;//分享链接 //完成发送对象实例 urlMessage.mediaObject = webObj; sendReq.message = urlMessage; //发送分享信息 [WXApi sendReq:sendReq]; }
至此,整体的微信分享就完成了,但是无论是官方demo还是网上方法,大多都有错点和遗漏,以下是可能遇到的错误以及解决方法:
1。官方Demo编译报错。
这个错误算是比较坑,大家都是冲着你们的功能来的,结果所有人下的代码都跑不起来,坑爹啊,吐槽结束,解决办法是按照上图添加依赖库(点此下载无错版的demo)
2。编译不通过(下图)
解决办法:添加libc++.tbd
3。无法跳转至微信
根据提示信息显示可能有两种情况
1 iOS跳转到其他APP使用的是URL Scheme,在iOS9新特性中加入了URL Scheme白名单功能,需要把要跳转的APP的URL Scheme加入到当前工程的跳转白名单中,具体操作请看上面写过了
2 当前机器中没有安装微信
可以使用WXApi.h
中的isWxAppInstalled
方法来判断当前机器是否安装了微信,从而做出相应操作
4。Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM enqueue:]: unrecognized selector sent to instance 0x1f0a9ae0'
解决方法:
-------1.你的工程文件中选择Build Setting,在"Other Linker Flags"中加入"-ObjC",记住-ObjC的C要大写。
-------2.如果工程报错"_GCControllerDidDisconnectNotification",
项目->TARGETS->iOS->Build Phases->Link Binary With Libraries
增加库:
GameController.framework
-------3.如果还报错xx.dylib的问题的话,则找到刚刚添加的GameController.framework,右侧Required改为Opitional。