iOS友盟第三方登录及分享

2,034 阅读3分钟

第一步: 需要引入以下框架

// 需要引入框架:
1. SystemConfiguration.framework
2. CoreGraphics.framework
3. libsqlite3.dylib
4. CoreTelephony.framework
5. libstdc++.dylib,
6. libz.dyli

第二步: 下载最新的SDK 下载SDK链接,http://dev.umeng.com/social/ios/sdk-download

// 将UMSocial_Sdk-x.x.x的文件夹拖入工程目录下
确认勾选了“Copy items to destination's group folder”选项,并选择你要添加到的Target

// libUMSocial_Sdk-x.x.x.a  libUMSocial_Sdk_comment_3.0.a   库文件

// Header  头文字

// SocialSDKXib     xib文件

// en.Iproj, zh-Hans.Iproj  英文和中文语言文件

// frameworks   使用的第三方SDK,里面的Wechat,TencentOperAPI,TencentWeiboSSO,分别代表微信、手机QQ和腾讯微博SDK

978D1A62-DBE6-4937-818F-3DB2C7E39B15.png

**注意:**由于苹果要求在6月之前全部应用兼容IPv6,需要大家更新SDK至5.2.1版本,避免提交APPstore审核被拒!!!

第三步: 适配iOS9系统 由于iOS 9之后苹果加强了安全策略,如果使用 XCode7集成和开发使用友盟 SDK,对于适配 iOS 9需要配置:

  • A、在info.plist中加入安全域名白名单(右键info.plist用source code打开) 根据自己需要分享的平台添加你所需要的,具体参考友盟官方文档链接:http://dev.umeng.com/social/ios/ios9,太长这里就不放截图了
  • B、在info.plist的NSAppTransportSecurity下新增NSAllowsArbitraryLoads并设置为YES,指定所有HTTP连接都可正常请求
    8C347FCC-EA7C-42B8-9A23-0F803FFB5C20.png

第四步: 配置URL scheme http://dev.umeng.com/social/ios/quick-integration#1_4 在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes。如果使用的是Xcode3或更低版本,则需要在plist文件中添加。获取各个平台appkey或者appid的方法可以参考分享详细文档绑定各个平台部分,各个平台的url scheme格式如下表:

95185E55-3E18-4CAA-BB87-89E72DD61791.png

CF430AFE-E46A-453C-AFB8-FB253FB68299.png

**第五步:**其他注意事项

  • 1.新浪微博分享时,在other linker flags增加-ObjC 选项,并添加ImageIO 系统framework
  • 2.QQ空间分享时必须有图片,否则分享失败

**第六步:**具体实现如下: 1.在AppDelegate里使用友盟:


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // 使用友盟
    [self useUMengSocialData];
    
    return YES;
}

- (void)useUMengSocialData {
    
    // 设置友盟AppKey
    [UMSocialData setAppKey:UMengAppKey];
    
    
    //第一个参数为新浪appkey,第二个参数为新浪secret,第三个参数是新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。
    [UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:WBShareAppKey
                                              secret:WBShareAppSecret
                                         RedirectURL:@"http://sns.whalecloud.com"];
    
    //设置微信AppId,设置分享url,默认使用友盟的网址
    [UMSocialWechatHandler setWXAppId:WXAppID appSecret:WXShareAppSecret url:@"http://www.baidu.com"];
    
    //设置分享到QQ空间的应用Id,和分享url链接
    [UMSocialQQHandler setQQWithAppId:QQShareAppID appKey:QQShareAppKey url:@"http://www.baidu.com"];

}

/**
 这里处理新浪微博SSO授权进入新浪微博客户端后进入后台,再返回原来应用
 */
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [UMSocialSnsService  applicationDidBecomeActive];
}

2.具体调用控制器里调取第三方分享:

5E6DE6B5-C27B-4892-B92C-B0E21FD40D7C.png

#import "UMSocial.h"

#pragma mark - UMSocialUIDelegate

- (void)shareBtnClick {
    
    //分享内嵌文字
    NSString *shareText = @"测试分享文字";
    //分享内嵌图片
    UIImage *shareImage = [UIImage imageNamed:@"icon"];
    // 分享组顺序 按照需求自己相对应修改
    NSArray *arr =  [NSArray arrayWithObjects:UMShareToSina, UMShareToQQ, UMShareToQzone, UMShareToWechatSession, UMShareToWechatTimeline, nil];
    
    // 自定义title
    [UMSocialData defaultData].extConfig.qqData.title = @"测试";
    [UMSocialData defaultData].extConfig.qzoneData.title = @"测试";
    [UMSocialData defaultData].extConfig.wechatSessionData.title = @"测试";
    [UMSocialData defaultData].extConfig.wechatTimelineData.title = @"测试";
    
    // 设置点击分享内容跳转链接
    //    [UMSocialData defaultData].extConfig.qqData.url = @"http://baidu.com";
    
    //调用快速分享接口
    [UMSocialSnsService presentSnsIconSheetView:self
                                         appKey:UMengAppKey
                                      shareText:shareText
                                     shareImage:shareImage
                                shareToSnsNames:arr
                                       delegate:self];
    
    // 测试SDK在控制台的输出后能看到相应的错误码。
    [UMSocialData openLog:YES];
    
}

-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
    //根据`responseCode`得到发送结果,如果分享成功
    if(response.responseCode == UMSResponseCodeSuccess)
    {
        //得到分享到的微博平台名
        NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
    }
}

3.在具体控制器里调取第三方登录

#pragma mark - 第三方登录 1.在第三方平台完成授权 2.获取第三方平台的accesstoken信息及用户资料

- (void)qqLoginClick {
    
    UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToQQ];
    
    snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){
        
        // 获取微博用户名、uid、token等
        
        if (response.responseCode == UMSResponseCodeSuccess) {
            
            UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToQQ];
            
            NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);
            
        }});
}

- (void)wechatLoginClick {
    
    UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToWechatSession];
    
    snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){
        
        if (response.responseCode == UMSResponseCodeSuccess) {
            
            UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary]valueForKey:UMShareToWechatSession];
            
            NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);
            
        }
        
    });
}

- (void)weiboLoginClick {
    
    UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];
    
    snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){
        
        // 获取微博用户名、uid、token等
        
        if (response.responseCode == UMSResponseCodeSuccess) {
            
            UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToSina];
            
            NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);
            
    }});
}

最近针对 iOS10兼容写的 iOS10之友盟分享6.0.3, 目前已更新至6.8.0版本, 有需要请移步: 友盟分享6.8.0