zoukankan      html  css  js  c++  java
  • iOS 通过MOB平台集成第三方分享,自定义UI

    一、前言

      前些年写了一篇类似的博客,老是有人来问,代码已经很老了,正好上周做了微信和支付宝的支付,所以今天花一点时间重新梳理下这块的代码,集成最新的MobSDK。

      为什么选择MOB平台?

      官网:https://www.mob.com/mobService/sharesdk

      答:对于移动客户端来说,第三方分享和登陆是基本功能,但是目前流行的三方APP太多了,微信、QQ、新浪微博、淘宝、易信、美拍、、、如果没集成一个特殊的分享就要去集成一个APP,对于开发者来说这种方式不友好,而MOB的作用就是它会集成基本所有的第三方平台,你在集成mob的时候可以选择性的选择想要集成的哪几个平台。

        而且,mob平台是支持双端的。

    二、集成

      1、直接cocopods集成吧(我这边只需要微信和QQ的分享,而且项目里面如果集成了微信支付的话,要选择简略版的微信集成)

    # 主模块(必须)
      pod 'mob_sharesdk'
      pod 'mob_sharesdk/ShareSDKExtension'
      pod 'mob_sharesdk/ShareSDKPlatforms/QQ'
      pod 'mob_sharesdk/ShareSDKPlatforms/WeChat_Lite'

      注:我这里只集成了微信和QQ的分享模块,对于其他模块自己选择

    # 平台SDK模块其他平台,按需添加
    pod 'mob_sharesdk/ShareSDKPlatforms/RenRen'
    pod 'mob_sharesdk/ShareSDKPlatforms/AliPaySocial'
    pod 'mob_sharesdk/ShareSDKPlatforms/Kakao'
    pod 'mob_sharesdk/ShareSDKPlatforms/Yixin'
    pod 'mob_sharesdk/ShareSDKPlatforms/Facebook'
    pod 'mob_sharesdk/ShareSDKPlatforms/Messenger'
    pod 'mob_sharesdk/ShareSDKPlatforms/Copy'
    pod 'mob_sharesdk/ShareSDKPlatforms/Evernote'
    pod 'mob_sharesdk/ShareSDKPlatforms/GooglePlus'
    pod 'mob_sharesdk/ShareSDKPlatforms/Instagram'
    pod 'mob_sharesdk/ShareSDKPlatforms/Instapaper'
    pod 'mob_sharesdk/ShareSDKPlatforms/Line'
    pod 'mob_sharesdk/ShareSDKPlatforms/Mail'
    pod 'mob_sharesdk/ShareSDKPlatforms/SMS'
    pod 'mob_sharesdk/ShareSDKPlatforms/WhatsApp'
    pod 'mob_sharesdk/ShareSDKPlatforms/MeiPai'
    pod 'mob_sharesdk/ShareSDKPlatforms/DingTalk'
    pod 'mob_sharesdk/ShareSDKPlatforms/YouTube'
    pod 'mob_sharesdk/ShareSDKPlatforms/Twitter'
    pod 'mob_sharesdk/ShareSDKPlatforms/Dropbox'
    pod 'mob_sharesdk/ShareSDKPlatforms/DingTalk'
    pod 'mob_sharesdk/ShareSDKPlatforms/CMCC'
    pod 'mob_sharesdk/ShareSDKPlatforms/Telegram'
    pod 'mob_sharesdk/ShareSDKPlatforms/Reddit'
    pod 'mob_sharesdk/ShareSDKPlatforms/DouBan'
    pod 'mob_sharesdk/ShareSDKPlatforms/Flickr'
    pod 'mob_sharesdk/ShareSDKPlatforms/KaiXin'
    pod 'mob_sharesdk/ShareSDKPlatforms/LinkedIn'
    pod 'mob_sharesdk/ShareSDKPlatforms/MingDao'
    pod 'mob_sharesdk/ShareSDKPlatforms/Pinterest'
    pod 'mob_sharesdk/ShareSDKPlatforms/Pocket'
    pod 'mob_sharesdk/ShareSDKPlatforms/Print'
    pod 'mob_sharesdk/ShareSDKPlatforms/TencentWeibo'
    pod 'mob_sharesdk/ShareSDKPlatforms/Tumblr'
    pod 'mob_sharesdk/ShareSDKPlatforms/VKontakte'
    pod 'mob_sharesdk/ShareSDKPlatforms/YouDaoNote'
    pod 'mob_sharesdk/ShareSDKPlatforms/ESurfing'
    pod 'mob_sharesdk/ShareSDKPlatforms/FacebookAccount'

      2、注册

      2.1、首先在plist文件里面添加两个参数,MOBAppkey 和 MOBAppSecret 两个字段。

      2.2、在didFinishLaunchingWithOptions方法里面注册相关 的平台

    //share分享注册
        [ShareSDK registPlatforms:^(SSDKRegister *platformsRegister) {//注册QQ,QQ空间
            [platformsRegister setupQQWithAppId:@"QQID" appkey:@"key"];
        }];
        
        [ShareSDK registPlatforms:^(SSDKRegister *platformsRegister) {//注册微信,朋友圈
            [platformsRegister setupWeChatWithAppId:WeiXinPayKey appSecret:@"key" universalLink:WeiXinLinks];
        }];

      2.3、在info --> URL Types 里面添加schemes,以微信和QQ为例,QQ又分为QQ会话和QQ空间,QQ的AppID,其格式为:”QQ” + AppId的16进制(如果appId转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为:QQ05FB8B52 注意:转换后的字母要大写) 转换16进制的方法:echo ‘ibase=10;obase=16;801312852’ |bc,其中801312852为QQ的AppID

      注:这块是有点麻烦的,要细心点

      2.4、配置白名单

    <key>LSApplicationQueriesSchemes</key>
        <array>
            <string>wechat</string>
            <string>weixin</string>
            <string>weixinULAPI</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>mqqopensdkapiV4</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>mqqbrowser</string>
            <string>mttbrowser</string>
            <string>fbapi</string>
            <string>fb-messenger-api</string>
            <string>fbauth2</string>
            <string>fbshareextension</string>
            <string>twitter</string>
            <string>twitterauth</string>
            <string>JChatPro</string>
        </array>

      注:直接放到plist文件里面就好。

      3、调用

      由于我们这边采用的是自定义UI,所以调用放大有所差异,直接上代码吧

    //点击分享
    - (void)userClickShareBtnAction {
        BYShareALertView *shareView = [[BYShareALertView alloc] initWithAlert];
        [shareView showAlert];
        NSMutableDictionary *parameters = [NSMutableDictionary new];
        NSString *byText = :@"分享内容";
        shareView.clickShareBtnBlock = ^(NSInteger tag) {
            switch (tag) {
                case 100:
                    //微信
                    [parameters SSDKSetupShareParamsByText:byText
                                                    images:@[[UIImage imageNamed:@"Blink"]]
                                                       url:[NSURL URLWithString:@"www.baidu.com"]
                                                     title:@"分享标题"
                                                      type:SSDKContentTypeWebPage];
                    [self shareWithParameters:parameters withShareType:SSDKPlatformSubTypeWechatSession];
    
                    break;
                case 101:
                    //微信朋友圈
                    [parameters SSDKSetupShareParamsByText:byText
                                                    images:@[[UIImage imageNamed:@"Blink"]]
                                                       url:[NSURL URLWithString:@"www.baidu.com"]
                                                     title:@"分享标题"
                                                      type:SSDKContentTypeWebPage];
                    [self shareWithParameters:parameters withShareType:SSDKPlatformSubTypeWechatTimeline];
    
                    break;
                case 102:
                    //QQ
                    [parameters SSDKSetupShareParamsByText:byText
                                                    images:@[[UIImage imageNamed:@"APPicon"]]
                                                       url:[NSURL URLWithString:@"www.baidu.com"]
                                                     title:@"分享标题"
                                                      type:SSDKContentTypeWebPage];
                    [self shareWithParameters:parameters withShareType:SSDKPlatformSubTypeQQFriend];
    
                    break;
                case 103:
                    //QQ空间
                    [parameters SSDKSetupShareParamsByText:byText
                                                    images:@[[UIImage imageNamed:@"APPicon"]]
                                                       url:[NSURL URLWithString:@"http://www.baidu.com"]
                                                     title:@"分享标题"
                                                      type:SSDKContentTypeWebPage];
                    [self shareWithParameters:parameters withShareType:SSDKPlatformSubTypeQZone];
    
                    break;
                default:
                    break;
            }
        };
    }
    
    - (void)shareWithParameters:(NSMutableDictionary *)dict withShareType:(SSDKPlatformType)type {
        [ShareSDK share:type parameters:dict onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) {
            if (state == SSDKResponseStateSuccess) {
                [kKeyWindow makeToast:@"分享成功"];
            } else if (state == SSDKResponseStateFail) {
                [kKeyWindow makeToast:@"未检测到客户端 分享失败"];
            } else if (state == SSDKResponseStateCancel) {
                [kKeyWindow makeToast:@"分享已取消"];
            }
        }];
    
    }

      注:如遇到分享失败的情况,请第一时间检查来自QQ和微信的APPID、Key这些参数是否正确。

    三、总结

      总的来说还是蛮简单 的,关键是QQ与微信的相关Key不好申请。

      下次再来集成下第三方登陆吧,其实大同小异,调用不同的方法,获取头像与昵称罢了。

  • 相关阅读:
    Error[e46]: Undefined external "?V1" referred in AF
    总是遇到奇怪问题一
    BrokenPipeError: [Errno 32] Broken pipe
    Segment BANKED_CODE must be defined in a segment definition option (-Z, -b or -P)
    使用jupyter打开已存在的ipynb文件
    时钟控制命令
    中断系统以及外部中断
    pytorch上的循环层和全连接层操作
    02池化层
    距离毕业还有---100天
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/11967260.html
Copyright © 2011-2022 走看看