浅谈iOS友盟分享SDK6.4.4

最近公司在做第三方登录,遇到的坑那叫一个多啊,所以我一定要写个东西记录下来,毕竟我在做的时候,网上关于友盟最新SDK的资料实在太少了。
在我尝试了用QQ,微信,微博SDK后最终还是决定用友盟的,因为之前项目里集成了分享,也是用的友盟的SDK,里面也已经有了现成的也不用在集成了。可是QQ的unionId在友盟SDK5.2.1获取不到怎么都获取不到,那个坎坷啊,最终走向了升级的道路。下面进入正题。。
首先删掉原有的SDK,我是用的cocoapods,在Podfilel里面把原有的SDK删掉,加上最新的要下载的SDK

集成SDK.png

至于开始怎么集成的步骤之类的我在这里就不讲了,认真仔细的看集成文档,上面都是有的。

接下来直接上代码
首先在AppDelegate加上下面的代码

 #import <UMSocialCore/UMSocialCore.h>   //友盟头文件
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  /* 设置友盟appkey */
[[UMSocialManager defaultManager] setUmSocialAppkey:YM_Share_App_Key];

/* 设置微信的appKey和appSecret */
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:wbAPPKey appSecret:wbAPPSecret redirectURL:@"http://sns.whalecloud.com/sina2/callback"];

/* 设置微信的appKey和appSecret */
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:wxAPPID appSecret:wxAPPSecret redirectURL:@"http://mobile.umeng.com/social"];

/* 设置分享到QQ互联的appID
 * U-Share SDK为了兼容大部分平台命名,统一用appKey和appSecret进行参数设置,而QQ平台仅需将appID作为U-Share的appKey参数传进即可。
 */
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:QQAPPID/*设置QQ平台的appID*/  appSecret:nil redirectURL:@"http://mobile.umeng.com/social"];

//允许HTTP传输,分享图片
[UMSocialGlobal shareInstance].isUsingHttpsWhenShareContent = NO;
}

接着创建一个分享面板,也可以用友盟自带的,分享面板这里我已经创建好了
直接在按钮点击事件里面加上下面的代码这里是分享的web页面

   //            分享按钮
        [button addActionWithTouchUpInside:^{
            switch (i) {
                    
                case 0 :
                    //微信
                    [self shareWebPageToPlatformType:UMSocialPlatformType_WechatSession];
                    break;
                case 1 :
                     //朋友圈
                    [self shareWebPageToPlatformType:UMSocialPlatformType_WechatTimeLine];
                    break;
                case 2 :
                     //QQ
                    [self shareWebPageToPlatformType:UMSocialPlatformType_QQ];
                    break;
                case 3 :
                    //QQ空间
                    [self shareWebPageToPlatformType:UMSocialPlatformType_Qzone];
                    break;
                case 4 :
                    //新浪
                    [self shareWebPageToPlatformType:UMSocialPlatformType_Sina];
                    break;

                default:
                    break;
            }
        }];

  
  - (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType
  {
//创建分享消息对象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];

//创建网页内容对象 这里给了图片
UIImage *thumbURL = self.image;
UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:self.artTiltle descr:self.artTiltle thumImage:thumbURL];
//设置网页地址 文章的url
shareObject.webpageUrl = self.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);
        }
    }
    [self alertWithError:error]; //分享调试错误弹框
}];
}

pragma mark -- 分享调试信息打印

- (void)alertWithError:(NSError *)error
 {
NSString *result = nil;
if (!error) {
    result = [NSString stringWithFormat:@"分享成功"];
}
else{
    NSMutableString *str = [NSMutableString string];
    if (error.userInfo) {
        for (NSString *key in error.userInfo) {
            [str appendFormat:@"%@ = %@\n", key, error.userInfo[key]];
        }
    }
    if (error) {
        result = [NSString stringWithFormat:@"Share fail with error code: %d\n%@",(int)error.code, str];
    }
    else{
        result = [NSString stringWithFormat:@"Share fail"];
    }
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"share"
                                                message:result
                                               delegate:nil
                                      cancelButtonTitle:NSLocalizedString(@"sure", @"确定")
                                      otherButtonTitles:nil];
[alert show];
  }

接下来讲分享图片的,iOS里面已经都必须用https了,如果报下面的这个错误

2014错误.png

需要在这样操作

 /*
 * 关闭强制验证https,可允许http图片分享,但需要在info.plist设置安全域名
 <key>NSAppTransportSecurity</key>
 <dict>
 <key>NSAllowsArbitraryLoads</key>
 <true/>
 </dict>
 */

光上面的配置了还不可以,这句代码一定一定要在AppDelegate加上,否则这个错误是不会消失的

 [UMSocialGlobal shareInstance].isUsingHttpsWhenShareContent = NO;

加上这句代码就可以分享网络图片了,下面附上分享网络图片的代码

//分享图片
- (void)shareImageToPlatformType:(UMSocialPlatformType)platformType
{
//创建分享消息对象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];

//创建图片内容对象
UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
//如果有缩略图,则设置缩略图
shareObject.thumbImage = self.imageURL;//这里是图片的链接
[shareObject setShareImage:self.imageURL];
messageObject.shareObject = shareObject;

BLLog(@"ImageURL = %@",self.imageURL);
    //调用分享接口
    [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
        if (error) {
            UMSocialLogInfo(@"************Share fail with error %@*********",error);
            NSLog(@"1 ---");
        }else{
            if ([data isKindOfClass:[UMSocialShareResponse class]]) {
                UMSocialShareResponse *resp = data;
                //分享结果消息
                UMSocialLogInfo(@"response message is %@",resp.message);
                //第三方原始返回的数据
                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
                
                NSLog(@"2 ---");
                
            }else{
                UMSocialLogInfo(@"response data is %@",data);
                NSLog(@"; ---");
            }
        }
        [self alertWithError:error];
    }];
}

分享图片的时候有可能会遇到微信,QQ,新浪都可以分享,但是唯独QQ空间分享不成功,报下面的这个错误

QQ空间分享不成功错误.png

这个时候你需要在info.plist文件里面加入下面的这句话就可以了

 <string>mqqopensdkapiV4</string>
image.png

分享在这里就说完了。

接下来我们说一说登录,登录的也要在AppDelegate注册,但是只需要注册一遍就可以了,你分享的时候注册了,登录就不用了,它们是一起的。在登录界面创建三个登录按钮,微信,QQ,微博。三个的按钮点击事件里面写上下面的代码。别忘记导入头文件。

pragma mark--QQ登录

  -(void)qqButtonClick:(UIButton *)button{
BLLog(@"QQ");

[[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_QQ currentViewController:self completion:^(id result, NSError *error) {
     if (error) {
         //授权失败
    } else {
    UMSocialUserInfoResponse *resp = result;
    
    // 第三方登录数据(为空表示平台未提供)
    // 授权数据
    NSLog(@" uid: %@", resp.uid);
    NSLog(@" openid: %@", resp.openid);
    NSLog(@" accessToken: %@", resp.accessToken);
    NSLog(@" unionId: %@", resp.unionId);
  
    
    // 用户数据
    NSLog(@" name: %@", resp.name);
    NSLog(@" iconurl: %@", resp.iconurl);
    NSLog(@" gender: %@", resp.unionGender);
    
    // 第三方平台SDK原始数据
    NSLog(@" originalResponse: %@", resp.originalResponse);
}];
}

pragma mark -- 微信登录

-(void)WxButtonClick:(UIButton *)button{

[[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_WechatSession currentViewController:nil completion:^(id result, NSError *error) {
    if (error) {
        //授权失败
    } else {
        UMSocialUserInfoResponse *resp = result;
        
        // 授权信息
        NSLog(@"Wechat uid: %@", resp.uid);
        NSLog(@"Wechat openid: %@", resp.openid);
        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);
    }
}];

pragma mark--微博登录

-(void)SinaButtonClick:(UIButton *)button{

[[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_Sina currentViewController:nil completion:^(id result, NSError *error) {
    if (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);
    }
}];

登录会碰到微信有时候获取不到东西的情况,把运行的APP卸载了在运行一下就没问题了。配合官方的文档,再看看我的,应该很容易就懂了。之前集成过友盟SDK的,升级的时候只需要改方法就可以了,其它地方不需要动,一点都不要动,否则你懂得。。有什么错误不知道我没有说到的,然后搜了网上也没有答案的,问友盟的人工客服吧,有的客服还是可以很好的帮忙解决问题的。
最后附上错误码,集成文档里面有的,我总觉得应该有人和我一样粗心不会看错误码的,也有可能是我想当然(捂脸)。。

  //平台的失败错误码
/**
 *  U-Share返回错误类型
 */
typedef NS_ENUM(NSInteger, UMSocialPlatformErrorType) {
UMSocialPlatformErrorType_Unknow            = 2000,            // 未知错误
UMSocialPlatformErrorType_NotSupport        = 2001,            // 不支持(url scheme 没配置,或者没有配置-ObjC, 或则SDK版本不支持或则客户端版本不支持)
UMSocialPlatformErrorType_AuthorizeFailed   = 2002,            // 授权失败
UMSocialPlatformErrorType_ShareFailed       = 2003,            // 分享失败
UMSocialPlatformErrorType_RequestForUserProfileFailed = 2004,  // 请求用户信息失败
UMSocialPlatformErrorType_ShareDataNil      = 2005,             // 分享内容为空
UMSocialPlatformErrorType_ShareDataTypeIllegal = 2006,          // 分享内容不支持
UMSocialPlatformErrorType_CheckUrlSchemaFail = 2007,            // schemaurl fail
UMSocialPlatformErrorType_NotInstall        = 2008,             // 应用未安装
UMSocialPlatformErrorType_Cancel            = 2009,             // 取消操作
UMSocialPlatformErrorType_NotNetWork        = 2010,             // 网络异常
UMSocialPlatformErrorType_SourceError       = 2011,             // 第三方错误

UMSocialPlatformErrorType_ProtocolNotOverride = 2013,   // 对应的    UMSocialPlatformProvider的方法没有实现
UMSocialPlatformErrorType_NotUsingHttps      = 2014,   // 没有用https的请求,@see UMSocialGlobal isUsingHttpsWhenShareContent
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容