iOS-微信的登录与分享

作者: BestVast | 来源:发表于2016-04-10 16:44 被阅读4623次

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


2、导入需要的framework


3、添加URL Type

4、在plist文件里添加iOS9 URL Schemes 白名单
<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>wechat</string>
        <string>weixin</string>
        <string>sinaweibohd</string>
        <string>sinaweibo</string>
        <string>sinaweibosso</string>
        <string>weibosdk</string>
        <string>weibosdk2.5</string>
        <string>mqqapi</string>
        <string>mqq</string>
        <string>mqqOpensdkSSoLogin</string>
        <string>mqqconnect</string>
        <string>mqqopensdkdataline</string>
        <string>mqqopensdkgrouptribeshare</string>
        <string>mqqopensdkfriend</string>
        <string>mqqopensdkapi</string>
        <string>mqqopensdkapiV2</string>
        <string>mqqopensdkapiV3</string>
        <string>mqzoneopensdk</string>
        <string>wtloginmqq</string>
        <string>wtloginmqq2</string>
        <string>mqqwpa</string>
        <string>mqzone</string>
        <string>mqzonev2</string>
        <string>mqzoneshare</string>
        <string>wtloginqzone</string>
        <string>mqzonewx</string>
        <string>mqzoneopensdkapiV2</string>
        <string>mqzoneopensdkapi19</string>
        <string>mqzoneopensdkapi</string>
        <string>mqzoneopensdk</string>
        <string>alipay</string>
        <string>alipayshare</string>
    </array>

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

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [WXApi registerApp:@"WX_AppID" withDescription:@"weixin"];
    return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)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 = @"<xml>extend info</xml>";
static NSString *kAppContnetExURL = @"http://weixin.qq.com";
static NSString *kAppMessageExt = @"这是第三方带的测试字段";
static NSString *kAppMessageAction = @"<action>dotaliTest</action>";

//分享本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-微信的登录与分享

    微信登录与分享微信开发平台-移动应用微信登录开发指南1、首先导入微信的SDK 5、向微信终端程序注册第三方应用,并...

  • iOS 开发第三方登录和分享

    微信登录: Facebook 登录: 短信分享: 邮件分享: 微信分享: // Facebook 开放图谱动态分享...

  • iOS - 集成ShareSDK/友盟分享之后,导致原生微信登录

    项目涉及微信登录、微信分享、微博分享、Facebook分享、Twitter分享。 使用 ShareSDK 的微信登...

  • 物业管理小程序功能简介

    1、注册与登录 微信分享、群分享、扫码打开小程序 使用微信登录,用户不需要注册(程序自动注册),点开即可使用 绑定...

  • 微信公众号开发

    采用 TP5 + vue 实现如下功能 微信登录微信分享微信支付 微信登录 前端输入参数跳转 前端获取code码 ...

  • iOS微信登录与分享

    由于公司需要、要求此次三方登录全部用官方SDK,需要配置友盟和ShareSDK的同学,这篇文章帮不上太多忙,看一下...

  • 微信分享登录

    一、导入依赖 二、注册 三、创建回调Activity 四、微信分享 五、授权登录 六、注意事项 官网注册时填写的应...

  • 微信平台简介

    微信开放平台 移动应用网站应用第三方平台功能微信登录 微信支付 分享收藏微信登录N/A其他拉起小程序 图像识...

  • 第三方服务篇——微信好友分享、朋友圈分享、收藏

    在上一篇微信登录详细实现中,实现了微信登录,那么本篇探索一下微信分享. 笔者基于DIalogFragment实现了...

  • iOS-微信分享

    一、微信原生的分享--准备工作.1、在微信开发平台获取已审核通过的AppId和AppSecrect2、导入微信SD...

网友评论

  • 8814d8c64dab:有些APP的微信登录还可以在没有微信客户端的时候弹出web页面,怎么做的
    BestVast:@天下我有good 这个第一次见,不知道,微信开发平台上面没见到过:joy:
    8814d8c64dab:@风_雨 好多的。最美有物,LIFE等
    BestVast:@天下我有good :scream:没见过这种,什么App呀
  • c96787cb33a7:请问kAuthOpenID这个是从哪里获取?
    BestVast:@luy丶z 不好意思,具体我也忘了,现在这个参数我不使用了。这两天我重新整理一下
  • 95760f305bda:很好,刚好派上用场,比官网的方便详细

本文标题:iOS-微信的登录与分享

本文链接:https://www.haomeiwen.com/subject/svwblttx.html