美文网首页
浅谈iOS友盟分享SDK6.4.4

浅谈iOS友盟分享SDK6.4.4

作者: 红太狼的小灰帽丶 | 来源:发表于2017-06-07 23:11 被阅读401次

    最近公司在做第三方登录,遇到的坑那叫一个多啊,所以我一定要写个东西记录下来,毕竟我在做的时候,网上关于友盟最新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
    };

    相关文章

      网友评论

          本文标题:浅谈iOS友盟分享SDK6.4.4

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