iOS-微信的登录与分享

微信登录与分享
微信开发平台-移动应用微信登录开发指南
1、首先导入微信的SDK

iOS-微信的登录与分享_第1张图片

2、导入需要的framework
iOS-微信的登录与分享_第2张图片

iOS-微信的登录与分享_第3张图片

3、添加URL Type
iOS-微信的登录与分享_第4张图片

4、在plist文件里添加iOS9 URL Schemes 白名单

LSApplicationQueriesSchemes
    
        wechat
        weixin
        sinaweibohd
        sinaweibo
        sinaweibosso
        weibosdk
        weibosdk2.5
        mqqapi
        mqq
        mqqOpensdkSSoLogin
        mqqconnect
        mqqopensdkdataline
        mqqopensdkgrouptribeshare
        mqqopensdkfriend
        mqqopensdkapi
        mqqopensdkapiV2
        mqqopensdkapiV3
        mqzoneopensdk
        wtloginmqq
        wtloginmqq2
        mqqwpa
        mqzone
        mqzonev2
        mqzoneshare
        wtloginqzone
        mqzonewx
        mqzoneopensdkapiV2
        mqzoneopensdkapi19
        mqzoneopensdkapi
        mqzoneopensdk
        alipay
        alipayshare
    

5、向微信终端程序注册第三方应用,并在第三方应用实现从微信返回
在AppDelegate.m中引入”WXApi.h"头文件,然后写入如下:

#import "WXApi.h"
#import "WXApiObject.h"
@interface AppDelegate ()  //添加代理

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [WXApi registerApp:@"WX_AppID" withDescription:@"weixin"];
    return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
{
    
    [WXApi handleOpenURL:url delegate:self];
    
    return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    [WXApi handleOpenURL:url delegate:self];  
    return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
     [WXApi handleOpenURL:url delegate:self];
    return YES;
}

6、微信分享—>在控制器里面添加分享代码

#import "WXApiObject.h"
#import “WXApi.h"

//分享文字给好友 
       SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.text = @"测试把信息分享到微信好友";
        req.bText = YES;
        req.scene = WXSceneSession;//会话(WXSceneSession)或者朋友圈(WXSceneTimeline)
        
        [WXApi sendReq:req];
    
//分享图片给好友
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = @"测试把图片分享到微信好友";
        [message setThumbImage:[UIImage imageNamed:@"IconWX.png"]];
        WXImageObject *imageObject = [[WXImageObject alloc] init];
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"IconWX" ofType:@"png"];
        imageObject.imageData = [NSData dataWithContentsOfFile:filePath];
        message.mediaObject = imageObject;
        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneSession;        
        [WXApi sendReq:req];

   //分享网页给好友
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = @"测试把web分享到微信好友";
        [message setThumbImage:[UIImage imageNamed:@"IconWX.png"]];
        
        WXWebpageObject *webObject = [WXWebpageObject object];
        webObject.webpageUrl = @"http://www.baidu.com";
        message.mediaObject = webObject;
        
        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneSession;
        
        [WXApi sendReq:req];
   
 //分享文字到朋友圈
        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.text = @"测试把信息分享到微信朋友圈";
        req.bText = YES;
        req.scene = WXSceneTimeline;//会话(WXSceneSession)或者朋友圈(WXSceneTimeline)
        [WXApi sendReq:req];

 //分享图片到朋友圈 
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = @"测试把图片分享到微信朋友圈";
        [message setThumbImage:[UIImage imageNamed:@"IconWX.png"]];
        WXImageObject *imageObject = [[WXImageObject alloc] init];
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"IconWX" ofType:@"png"];
        imageObject.imageData = [NSData dataWithContentsOfFile:filePath];
        message.mediaObject = imageObject;
        
        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneTimeline;
        
        [WXApi sendReq:req];
  
//分享网页到朋友圈
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = @"测试把web分享到微信朋友圈";
        message.description = @"";
        [message setThumbImage:[UIImage imageNamed:@"IconWX.png"]];
        
        WXWebpageObject *webObject = [WXWebpageObject object];
        webObject.webpageUrl = @"http://www.baidu.com";
        message.mediaObject = webObject;
        
        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneTimeline;
        
        [WXApi sendReq:req];

6.1、分享App消息到微信,微信点击之后能够跳转到App

static NSString *kAPPContentTitle = @"App消息";
static NSString *kAPPContentDescription = @"这种消息只有App自己才能理解,由App指定打开方式";
static NSString *kAppContentExInfo = @"extend info";
static NSString *kAppContnetExURL = @"http://weixin.qq.com";
static NSString *kAppMessageExt = @"这是第三方带的测试字段";
static NSString *kAppMessageAction = @"dotaliTest";

//分享本App识别的信息(会从微信调整到本App)
        Byte* pBuffer = (Byte *)malloc(1024*100);
        memset(pBuffer, 0, 1024*100);
        NSData* data = [NSData dataWithBytes:pBuffer length:1024*100];
        free(pBuffer);
        
        UIImage *thumbImage = [UIImage imageNamed:@"res2.jpg"];
        
        WXAppExtendObject *ext = [WXAppExtendObject object];
        ext.extInfo = kAppContentExInfo;
        ext.url = kAppContnetExURL;
        ext.fileData = data;
        
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = kAPPContentTitle;
        message.description = kAPPContentDescription;
        message.mediaObject = ext;
        message.messageExt = kAppMessageExt;
        message.messageAction = kAppMessageAction;
        message.mediaTagName = nil;
        [message setThumbImage:thumbImage];
        
        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.scene = WXSceneSession;
        req.message = message;
        
        [WXApi sendReq:req];

7、微信登陆 —>在AppDelegate里面添加登陆成功的通知

#pragma mark - WXApiDelegate
- (void)onResp:(BaseResp *)resp {
    if ([resp isKindOfClass:[SendAuthResp class]])
    {
        SendAuthResp *rep = (SendAuthResp *)resp;
        if (rep.errCode == 0) {
            
            [[NSNotificationCenter defaultCenter] postNotificationName:WXLoginSuccess object:@{@"code":rep.code}];
        }
        
    }

8、微信登陆 —>在控制器里面添加登陆代码

static NSString *kAuthScope = @"snsapi_userinfo";
static NSString *kAuthOpenID = @"这个我现在没使用";
static NSString *kAuthState = @"123";
//微信登陆
- (void)onClickBtn
{
    SendAuthReq *req = [[SendAuthReq alloc] init];
    req.scope = kAuthScope;
    req.state = kAuthState;
    req.openID = kAuthOpenID;
    [WXApi sendReq:req];
}

9、微信登陆—>在控制器里面实现登陆成功之后的回调

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(WXLogin:) name:WXLoginSuccess object:nil];

//登陆成功之后获取token
- (void)WXLogin:(NSNotification *)notifi
{
    AFHTTPRequestOperationManager *manage = [AFHTTPRequestOperationManager manager];
    manage.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manage GET:@"https://api.weixin.qq.com/sns/oauth2/access_token" parameters:@{@"appid":WX_AppID, @"secret":WX_AppSecret, @"code":notifi.object[@"code"], @"grant_type":@"authorization_code"} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
        /*"access_token" = "OezXcEiiBSKSxW0eoylIeBPKSgTfwua1QABCnleka9CqGYr9J4wP2NHLDEFTP0vqsiS4DFDyXNQmYSaM6dW1s8MrQi6NSC9dV6ZqqjazKWQv3kfeozrm-fbZTXU80vLaWYflw07nkDhmX3KJHsEVxQ";
         "expires_in" = 7200;
         openid = xxxxxxxxxxxxxxxxxxxxxxxxxx;
         "refresh_token" = "OezXcEiiBSKSxW0eoylIeBPKSgTfwua1QABCnleka9CqGYr9J4wP2NHLDEFTP0vq6O1ZVOcyb8uL5dLrcuRaydRmY9BcYgJeOLqRjlLyp5HpBlYc2Ikja-RFm6ghGQ32r_iZfQfAQhtEqwk9ibf8vA";
         scope = "snsapi_userinfo";
         unionid = o4bo2vzI0vCvGTa11GBMkx0SbcwQ;*/
        [[NSUserDefaults standardUserDefaults] setObject:dict forKey:WXSaveToken];
        [self saveTokenAndRequireWXInfo];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"access_token error-->%@", error.localizedDescription);
    }];
}

10、微信登陆—>在控制器里面通过token请求得到微信部分个人信息

- (void)saveTokenAndRequireWXInfo
{
    NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:WXSaveToken];
   AFHTTPRequestOperationManager *manage = [AFHTTPRequestOperationManager manager];
    manage.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manage GET:@"https://api.weixin.qq.com/sns/userinfo" parameters:@{@"openid":dict[@"openid"], @"access_token":dict[@"access_token"]} success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
//        NSLog(@"%@",dict);
//        {
//            city = "xxx";
//            country = xxx;
//            headimgurl = “http://wx.qlogo.cn/mmopen/xxxxxxx/0”;
//            language = "zh_CN";
//            nickname = xxx;
//            openid = xxxxxxxxxxxxxxxxxxx; //授权用户唯一标识
//            privilege =     (
//            );
//            province = "xxx";
//            sex = 0;
//            unionid = xxxxxxxxxxxxxxxxxx;
//        }
        [[NSUserDefaults standardUserDefaults] setObject:dict forKey:WXResponse_UserInfo];       
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"userinfo error-->%@", error.localizedDescription);
    }];     }

你可能感兴趣的:(iOS-微信的登录与分享)