友盟集成--第三方分享、登录

集成设置:

1.导入SDK

common、share下文件加入项目:
UMCommon.framework
UMShare.framework
UMSocialUI文件夹
SocialLibraries文件夹

2.添加项目配置

Other Linker Flags加入-ObjC

3.依赖库:

UMCommon:
SystemConfiguration.framework//判断网络状态
CoreTelephony.framework//获取运营商标识
libz.tbd//数据压缩
libsqlite3.tbd//数据缓存

UMShare:
CoreGraphics.framework
libsqlite3.tbd
新浪:Photos.framework

4.第三方平台配置

4.1 配置SSO白名单 info.plist中加入LSApplicationQueriesSchemes
4.2 配置URL Scheme

初始化设置及功能实现

1.第三方分享
#import <UMCommon/UMCommon.h>
#import <UMShare/UMShare.h>
#import <UShareUI/UMSocialUIManager.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    /* 打开调试日志 */
    [[UMSocialManager defaultManager] openLog:YES];
    /* 设置友盟appkey */
    [UMConfigure initWithAppkey:@"USHARE_APPKEY" channel:@"App Store"];

    [self configUSharePlatforms];
    [self confitUShareSettings];
    [UMSocialGlobal shareInstance].isClearCacheWhenGetUserInfo = YES;

    return YES;
}

- (void)confitUShareSettings
{
    /*
     * 打开图片水印
     */
    //[UMSocialGlobal shareInstance].isUsingWaterMark = YES;
    
    /*
     * 关闭强制验证https,可允许http图片分享,但需要在info.plist设置安全域名
     <key>NSAppTransportSecurity</key>
     <dict>
     <key>NSAllowsArbitraryLoads</key>
     <true/>
     </dict>
     */
    [UMSocialGlobal shareInstance].isUsingHttpsWhenShareContent = NO;
    
}

- (void)configUSharePlatforms
{
    /* 设置微信的appKey和appSecret */
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey: WECHAT_APPKEY appSecret:WECHAT_APPSECRET redirectURL:YOUR_URL];
    
    /*
     * 移除相应平台的分享,如微信收藏
     */
    //    [[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite)]];
    
    /* 设置分享到QQ互联的appID
     * U-Share SDK为了兼容大部分平台命名,统一用appKey和appSecret进行参数设置,而QQ平台仅需将appID作为U-Share的appKey参数传进即可。
     */
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:QQ_APPKEY/*设置QQ平台的appID*/  appSecret:QQ_APPSECRET redirectURL:YOUR_URL];
    
    /* 设置新浪的appKey和appSecret */
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:SINA_APPKEY  appSecret:SINA_APPSECRET redirectURL:YOUR_URL];
    
    /* 设置的自定义按钮 */
    [UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Qrcode withPlatformIcon:[UIImage imageNamed:@"umsocial_qrcode"] withPlatformName:@"二维码"];
}

PS:在UMSocialPlatformConfig.h
//用户自定义的平台
UMSocialPlatformType_UserDefine_Begin = 1000,
UMSocialPlatformType_UserDefine_Qrcode = 1001,//自定义的平台写在1000与2000之间,且值设置为1000~2000之间
UMSocialPlatformType_UserDefine_End = 2000,

// 支持所有iOS系统(包括8.0) swift4.1(Xcode9.3)已废弃,OC项目不影响。新浪 平台外的其他平台可在swift项目中使用下面两种回调方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
    if (!result) {
        // 其他如支付等SDK的回调
    }
    return result;
}

// 仅支持iOS9以上系统,iOS8及以下系统不会回调
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    BOOL result = [[UMSocialManager defaultManager]  handleOpenURL:url options:options];
    if (!result) {
        // 其他如支付等SDK的回调
    }
    return result;
}

// 支持目前所有iOS系统
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
    if (!result) {
        // 其他如支付等SDK的回调
    }
    return result;
}

在需要实现分享的页面:

#import <UShareUI/UShareUI.h>
//显示分享面板
- (void)showSharePlatform:(NSDictionary *)data {
    
    [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
        // 根据获取的platformType确定所选平台进行下一步操作
        if (platformType == UMSocialPlatformType_UserDefine_Qrcore) {
            // 自定义按钮方法
        } else {
            [self shareWebPageToPlatformType:platformType userInfo:data];
        }
    }];
}

- (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType userInfo:(NSDictionary *)userInfo
{
    NSString *title = userInfo[@"title"];
    NSString *content = userInfo[@"content"];
    NSString *url = userInfo[@"url"];
    NSString *imageUrl = userInfo[@"imageUrl"];

    //创建分享消息对象
    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
    
    //创建网页内容对象
    UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:title descr:content thumImage:imageUrl];
    
    //设置网页地址
    shareObject.webpageUrl = url;
    
    //分享消息对象设置分享内容对象
    messageObject.shareObject = shareObject;
    
    //调用分享接口
    [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
        if (error) {
            UMSocialLogInfo(@"************Share fail with error %@*********",error);
        }else{
            if ([data isKindOfClass:[UMSocialShareResponse class]]) {
                UMSocialShareResponse *resp = data;
                //分享结果消息
                UMSocialLogInfo(@"response message is %@",resp.message);
                //第三方原始返回的数据
                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
                
            }else{
                UMSocialLogInfo(@"response data is %@",data);
            }
        }
        
    }];
}

2.第三方登录

#import <UMShare/UMShare.h>
#pragma mark - 微信登录
- (void)getAuthWithUserInfoFromWechat
{
    
    [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_WechatSession currentViewController:nil completion:^(id result, NSError *error) {
        if (error) {
            NSLog(@"error == %@",error);
        } else {
            UMSocialUserInfoResponse *resp = result;
            
            // 授权信息
            NSLog(@"Wechat uid: %@", resp.uid);
            NSLog(@"Wechat openid: %@", resp.openid);
            NSLog(@"Wechat unionid: %@", resp.unionId);
            NSLog(@"Wechat accessToken: %@", resp.accessToken);
            NSLog(@"Wechat refreshToken: %@", resp.refreshToken);
            NSLog(@"Wechat expiration: %@", resp.expiration);
            
            // 用户信息
            NSLog(@"Wechat name: %@", resp.name);
            NSLog(@"Wechat iconurl: %@", resp.iconurl);
            NSLog(@"Wechat gender: %@", resp.unionGender);
            
            // 第三方平台SDK源数据
            NSLog(@"Wechat originalResponse: %@", resp.originalResponse);
            
            // 通过第三方平台SDK源数据进行 登录、注册、绑定账号 等操作 需与后台配合设置接口
            // 登录、注册
            [LoginNetManager boolBindingWithType:2 unionId:resp.unionId completionHandler:^(ThirdInfoModel *model, NSError *error) {
                if (!error) {
                    if ([model.meta.code isEqualToNumber:@0]) {//账户已存在,直接登录
                        username = [NSString stringWithFormat:@"WX_%@",resp.unionId];
                        password = @"123456";
                        isThirdLogin = YES;
                        [self getLoginJson];
                    } else {//账户不存在,申请注册
                        ThirdRegisterViewController *viewController = [[ThirdRegisterViewController alloc] init];
                        viewController.loginType = 2;
                        viewController.userInfo = resp;
                        [self.navigationController pushViewController:viewController animated:YES];
                    }
                }
            }];

            // 绑定账号
            NSDictionary *qq = @{};
            NSDictionary *wechat = @{@"unionId":resp.unionId};
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            NSString *phone = [defaults objectForKey:@"loginName"];
            [LoginNetManager bindRegisterInfoWithType:2 phone:phone weChatAttentionInfoVO:wechat qqAttentionInfoVO:qq completionHandler:^(ThirdInfoModel *model, NSError *error) {
                if (!error) {
                    if ([model.meta.code isEqualToNumber:@0]) {
                        [self.view showMsg:@"绑定成功"];
                        [self getThirdRegeisteInfo];
                    }else{
                        [self.view showMsg:model.meta.message];
                    }
                }
            }];
        }
    }];
}

#pragma mark - QQ登录
- (void)getAuthWithUserInfoFromQQ
{
    [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_QQ currentViewController:nil completion:^(id result, NSError *error) {
        if (error) {
            NSLog(@"error == %@",error);
        } else {
            UMSocialUserInfoResponse *resp = result;
            
            // 授权信息
            NSLog(@"QQ uid: %@", resp.uid); // 此值为QQ的openid数据
            NSLog(@"QQ openid: %@", resp.openid); // 此值为QQ的openid数据
            NSLog(@"QQ unionId: %@", resp.unionId);// 此值为QQ的union id数据,目前仅支持有在QQ互联获得union id获取权限的App id获取。
            NSLog(@"QQ accessToken: %@", resp.accessToken);
            NSLog(@"QQ expiration: %@", resp.expiration);
            
            // 用户信息
            NSLog(@"QQ name: %@", resp.name);
            NSLog(@"QQ iconurl: %@", resp.iconurl);
            NSLog(@"QQ gender: %@", resp.unionGender);
            
            // 第三方平台SDK源数据
            NSLog(@"QQ originalResponse: %@", resp.originalResponse);
            
            // 通过第三方平台SDK源数据进行 登录、注册、绑定账号 等操作 需与后台配合设置接口
            // 登录、注册
            [LoginNetManager boolBindingWithType:1 unionId:resp.openid completionHandler:^(ThirdInfoModel *model, NSError *error) {
                if (!error) {                    
                    if ([model.meta.code isEqualToNumber:@0]) {
                        username = [NSString stringWithFormat:@"QQ_%@",resp.openid];
                        password = @"123456";
                        isThirdLogin = YES;
                        [self getLoginJson];
                    } else {
                        ThirdRegisterViewController *viewController = [[ThirdRegisterViewController alloc] init];
                        viewController.loginType = 1;
                        viewController.userInfo = resp;
                        [self.navigationController pushViewController:viewController animated:YES]; 
                    }
                }
            }];

            // 绑定账号
            NSDictionary *wechat = @{};
            NSDictionary *qq = @{@"unionId":resp.openid};
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            NSString *phone = [defaults objectForKey:@"loginName"];
            [LoginNetManager bindRegisterInfoWithType:1 phone:phone weChatAttentionInfoVO:wechat qqAttentionInfoVO:qq completionHandler:^(ThirdInfoModel *model, NSError *error) {
                if (!error) {
                    if ([model.meta.code isEqualToNumber:@0]) {
                        [self.view showMsg:@"绑定成功"];
                        [self getThirdRegeisteInfo];
                    }else{
                        [self.view showMsg:model.meta.message];
                    }
                }
            }];
        }
    }];
}

#pragma mark - 新浪微博登录
- (void)getAuthWithUserInfoFromSina
{
    [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_Sina currentViewController:nil completion:^(id result, NSError *error) {
        if (error) {
            NSLog(@"error == %@",error);
        } else {
            UMSocialUserInfoResponse *resp = result;
            
            // 授权信息
            NSLog(@"Sina uid: %@", resp.uid);
            NSLog(@"Sina accessToken: %@", resp.accessToken);
            NSLog(@"Sina refreshToken: %@", resp.refreshToken);
            NSLog(@"Sina expiration: %@", resp.expiration);
            
            // 用户信息
            NSLog(@"Sina name: %@", resp.name);
            NSLog(@"Sina iconurl: %@", resp.iconurl);
            NSLog(@"Sina gender: %@", resp.unionGender);
            
            // 第三方平台SDK源数据
            NSLog(@"Sina originalResponse: %@", resp.originalResponse);
        }
    }];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342