IOS菜鸟初学第四篇:CocoaPods 安装微信sdk,并在程序中使用
哎,苦逼的我又开始拾起了ios的活。重新要做一遍。这里记录下实现过程。免得下次又不记得。
前提准备:已经申请好了的微信ios应用id,这个请去微信开放平台申请
废话不多说,开撸。
一、便携式pod profile文件,并安装
首先,终端进入项目根目录:
vim pod file
添加如下代码:
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
target '项目文件名' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
# Pods for 项目文件名,目前为止最新的已经到1.8.4
pod 'WechatOpenSDK'
end
其实直接用文件编辑器也是很方便的,随便啦。。。
接下来打开我们的项目目录,记得要将xcode关闭掉,因为要重新加载项目
这个时候要打开生成的那个后缀名为:xcworkspace,进去之后发现就会多了一个pods文件
二、程序设置和调用微信登录
首先在程序设置文件中找到target -> info -> url type添加微信url_schemes信息
此时你去看你的infp.plist文件,就会多处url type的选项
为了顺利拉起微信,在info.plist 中再加上如下信息
设置完之后,程序要开始调用微信sdk
首先在AppDelegate中注册微信应用id
1.在AppDelegate.h 添加对微信sdk的导入和协议的引用
2.在AppDelegate.m 中注册应用id
先导入.h文件,定义id
在application中注册
[WXApi registerApp:WXAppId];
if([WXApi isWXAppInstalled]){
NSLog(@"已安装微信");
}else{
NSLog(@"未安装微信");
}
重写application的 openURL方法(这方法在application下面,别乱找了)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options{
NSLog(@"%@",@"options");
NSLog(@"%@",url);
return [WXAUTH handleOpenURL:url];
}
这里我解释下return为什么我没用官方的 :
return [WXApi handleOpenURL:url delegate:self];
而是WXAUTH?? 因为我用了单例模式,自己在单例文件中重写了handopenurl方法
第3点贴上单例模式:
首先单例代码:ZTSingleton.h 这个要自己去new一个文件:
这里说一下创建方式,不一样:
选择cocoa touch class,->next ,注意subclass of 是nsobject
ZTSingleton.h文件:
#import <Foundation/Foundation.h>
#define WXAUTH [ZTSingleton sharedInstance]
NS_ASSUME_NONNULL_BEGIN
@interface ZTSingleton : NSObject
+ (ZTSingleton *)sharedInstance;
- (BOOL)handleOpenURL:(NSURL *)url;
- (void)sendWXAuthReq;
@end
NS_ASSUME_NONNULL_END
ZTSingleton.m文件:
#import "ZTSingleton.h"
#import <WechatOpenSDK/WXApi.h>
#define DEFINE_SHARED_INSTANCE_USING_BLOCK(block) \
static dispatch_once_t pred = 0; \
static id _sharedObject = nil; \
dispatch_once(&pred, ^{ \
_sharedObject = block(); \
}); \
return _sharedObject; \
@interface ZTSingleton ()<WXApiDelegate>
@end
@implementation ZTSingleton
+ (ZTSingleton *)sharedInstance{
DEFINE_SHARED_INSTANCE_USING_BLOCK(^{
return [[super allocWithZone:NULL] init];
});
}
- (id)init{
self = [super init];
if (self) {
}
return self;
}
- (void)sendWXAuthReq{
if([WXApi isWXAppInstalled]){//判断用户是否已安装微信App
SendAuthReq *req = [[SendAuthReq alloc] init];
req.state = @"wx_oauth_authorization_state";//用于保持请求和回调的状态,授权请求或原样带回
req.scope = @"snsapi_userinfo";//授权作用域:获取用户个人信息
[WXApi sendReq:req];
}else{
NSLog(@"未安装微信应用或版本过低");
}
}
- (BOOL)handleOpenURL:(NSURL *)url{
//处理回调
if([url.host isEqualToString:@"platformId=wechat"] || [url.host isEqualToString:@"oauth"]){//微信WeChat分享回调
return [WXApi handleOpenURL:url delegate:self];
}else{
return NO;
}
}
/**
Delegate回调方法
*/
- (void)onResp:(id)resp{
if([resp isKindOfClass:[SendAuthResp class]]){//判断是否为授权登录类
SendAuthResp *req = (SendAuthResp *)resp;
if([req.state isEqualToString:@"wx_oauth_authorization_state"]){//微信授权成功
if(req.errCode == 0){
NSLog(@"获取code:%@", req.code);
NSLog(@"成功后下面就可以执行自己项目的业务逻辑");
}
}
}
}
@end
最后在需要微信登录的页面点击微信图标授权登录的时候执行下面函数:
NSLog(@"点击微信授权");
if([WXApi isWXAppInstalled]){
NSLog(@"参数:%@", message.body);
[self performSelector:@selector(sendWXAuth:) withObject:nil];
}
等我放一张成功图,免得有瑕疵
补充:昨天走的匆忙,今天运行的时候,报错 :library not found -lpods- 项目名
我出现的原因是我打开错了一个:xcworkspace,我这里有两个,一个在项目文件外面,我点这个,导致运行的时候找不到pod。应该打开里面那个。
顺便提示一下,如果你不是这个原因,可以去看看taget中的build setting中的path对不对,参考下图
其次,在下面有个 user header search path 。把pod路径加进去
在build phases中的link binary with libraries 添加好微信sdk,添加是为了保险,确保能访问到sdk。