友盟UShare分享+复制链接 Swift Version

有几个注意事项:
1、直接用Cocoapod导入吧,能简单pod为何还要手工导入呢,装X?
2、桥接OC还有引入 UMSocialSwiftInterface.swift 文件
3、AppKey换成自己在各大第三方平台上申请的AppKey
4、分享的图片Logo要为Https的
5、URL Types 记得上
6、info.plist的LSApplicationQueriesSchemes也要记得
7、直接上码了

cocopods

# 友盟分享
# U-Share SDK UI模块(分享面板,建议添加)
pod 'UMengUShare/UI'
# 集成微信(精简版0.2M)
pod 'UMengUShare/Social/ReducedWeChat'
# 集成QQ(精简版0.5M)
pod 'UMengUShare/Social/ReducedQQ'
# 集成新浪微博(精简版1M)
pod 'UMengUShare/Social/ReducedSina'

info.plist

LSApplicationQueriesSchemes
    
        wechat
        weixin
        sinaweibohd
        sinaweibo
        sinaweibosso
        weibosdk
        weibosdk2.5
        mqqapi
        mqq
        mqqOpensdkSSoLogin
        mqqconnect
        mqqopensdkdataline
        mqqopensdkgrouptribeshare
        mqqopensdkfriend
        mqqopensdkapi
        mqqopensdkapiV2
        mqqopensdkapiV3
        mqqopensdkapiV4
        mqzoneopensdk
        wtloginmqq
        wtloginmqq2
        mqqwpa
        mqzone
        mqzonev2
        mqzoneshare
        wtloginqzone
        mqzonewx
        mqzoneopensdkapiV2
        mqzoneopensdkapi19
        mqzoneopensdkapi
        mqqbrowser
        mttbrowser
    

URL Types

weixin wxdc1e388c3822c80b // 微信
tencent1105821097 // QQ
QQ41E97DA9 // QQ对话
wb3921700954 // 微博

OC桥接

#import 
#import 

UMSocialSwiftInterface.swift

//
//  UMSocialSwiftInterface.swift
//  UMSocialDemo
//

import Foundation
class UMSocialSwiftInterface: NSObject {
    
    //swift的分享
    static func share(plattype:UMSocialPlatformType,
                      messageObject:UMSocialMessageObject,
                      viewController:UIViewController?,
                      completion: @escaping (_ data:Any?,_ error:Error?) -> Void) -> Void{
        UMSocialManager.default().share(to: plattype, messageObject: messageObject, currentViewController: viewController) { (shareResponse, error) in
            completion(shareResponse, error);
        }
    }
    
    //授权
    static func auth(plattype:UMSocialPlatformType,
                      viewController:UIViewController?,
                      completion: @escaping (_ data:Any?,_ error:Error?) -> Void) -> Void{
        UMSocialManager.default().auth(with: plattype, currentViewController: viewController) { (shareResponse, error) in
                completion(shareResponse, error);
        }
    }
    
    //取消授权
    static func cancelAuth(plattype:UMSocialPlatformType,
                     completion: @escaping (_ data:Any?,_ error:Error?) -> Void) -> Void{
        UMSocialManager.default().cancelAuth(with: plattype) { (shareResponse, error) in
            completion(shareResponse, error);
        }
    }
    
    //获得用户资料
    static func getUserInfo(plattype:UMSocialPlatformType,
                     viewController:UIViewController?,
                     completion: @escaping (_ data:Any?,_ error:Error?) -> Void) -> Void{
        UMSocialManager.default().getUserInfo(with: plattype, currentViewController: viewController) { (shareResponse, error) in
            completion(shareResponse, error);
        }
    }
    
    //弹出分享面板
    static func showShareMenuViewInWindowWithPlatformSelectionBlock(selectionBlock:@escaping (_ platformType:UMSocialPlatformType, _ userinfo:Any?) -> Void) -> Void {
        UMSocialUIManager.showShareMenuViewInWindow { (platformType, userinfo) in
            selectionBlock(platformType,userinfo);
        }
    }
    
    //设置预定义平台
    //备注:preDefinePlatforms为[NSNumber]的类型
    static func setPreDefinePlatforms(_ preDefinePlatforms: [Any]!) -> Void {
          //调用setPreDefinePlatforms的示例
//        UMSocialUIManager.setPreDefinePlatforms(
//            [NSNumber(integerLiteral:UMSocialPlatformType.wechatSession.rawValue)
//            ,NSNumber(integerLiteral:UMSocialPlatformType.QQ.rawValue)
//            ,NSNumber(integerLiteral:UMSocialPlatformType.sina.rawValue)
//            ]
//        )
        UMSocialUIManager.setPreDefinePlatforms(preDefinePlatforms)
    }
}

AppDelegate 记得要把 AppKey换成自己的

 func initUMSocial(){
        
        UMSocialManager.default().openLog(true)
        UMSocialGlobal.shareInstance().isClearCacheWhenGetUserInfo = false
        UMSocialManager.default().umSocialAppkey = "593e209b7f2c7458e4001ad3"
         // FIXME: URL跳转到 a.app.qq.com on 并 把 appKey 改成上线的APP的  2017.06.12
         /* 微信聊天   */
         UMSocialManager.default().setPlaform(UMSocialPlatformType.wechatSession, appKey: "wxdc1e388c3822c80b", appSecret: "3baf1193c85774b3fd9d18447d76cab0", redirectURL: "http://www.sina.com.cn")
         /* 微信朋友圈*/
        UMSocialManager.default().setPlaform(UMSocialPlatformType.wechatTimeLine, appKey: "wxfd23fac852a54c97", appSecret: "d4624c36b6795d1d99dcf0547af5443d", redirectURL: "http://www.sina.com.cn")
        /* QQ聊天页面*/
         UMSocialManager.default().setPlaform(UMSocialPlatformType.QQ, appKey: "1105821097", appSecret: nil, redirectURL: "http://www.sina.com.cn")
        /* 新浪*/
         UMSocialManager.default().setPlaform(.sina, appKey: "3921700954", appSecret: "04b48b094faeb16683c32669824ebdad", redirectURL: "http://www.sina.com.cn")
    }

把代码放在你想调用的地方ViewController

 // FIXME: -  UM友盟 分享
    open func getShare(){
        
        print ("分享")
        //创建分享消息对象
        UMSocialSwiftInterface.setPreDefinePlatforms([
            (UMSocialPlatformType.wechatSession.rawValue),
            (UMSocialPlatformType.wechatTimeLine.rawValue),
            (UMSocialPlatformType.QQ.rawValue),
            (UMSocialPlatformType.sina.rawValue)
            ])
        
        UMSocialUIManager.removeAllCustomPlatformWithoutFilted()
        UMSocialShareUIConfig.shareInstance().sharePageGroupViewConfig.sharePageGroupViewPostionType = UMSocialSharePageGroupViewPositionType.middle
        UMSocialShareUIConfig.shareInstance().sharePageScrollViewConfig.shareScrollViewPageItemStyleType = UMSocialPlatformItemViewBackgroudType.none
        
        UMSocialSwiftInterface.showShareMenuViewInWindowWithPlatformSelectionBlock { (platformType, userInfo) in
            self.runShareWithType(type: platformType)
        }
        
    }
    
    open func runShareWithType(type:UMSocialPlatformType) -> Void {
        // print("runShareWithType-----\(type)")
        
        
        // FIXME: 图片必须为 https
        let UMS_THUMB_IMAGE = "https://www.elinknet.cn/img/logo.png"
        let UMS_Title = "我是标题"
        let UMS_Web_Desc = "我是描述!"
        let UMS_WebLink = "http://我是APP的下载地址"
        let messageObject = UMSocialMessageObject()
        let shareObject = UMShareWebpageObject.shareObject(withTitle: UMS_Title, descr: UMS_Web_Desc, thumImage: UMS_THUMB_IMAGE)
        //设置网页地址
        shareObject?.webpageUrl = UMS_WebLink
        //分享消息对象设置分享内容对象
        messageObject.shareObject = shareObject
        
        UMSocialSwiftInterface.share(plattype: type, messageObject: messageObject, viewController: self) { (data, error) in
            if (error != nil) {
                SVProgressHUD.showError(withStatus: "请先安装相应APP、再进行分享")
                print(error ?? "未知错误!")
                
            }else{
                
            }
        }
        
    }

2017.10.1日补充自定义icon

  // FIXME: -  UM友盟 分享
   @objc class func shareToAnother(){
        //创建分享消息对象
       //var snsPlatform = UMSocialPlatformConfig.platformName(with: self)
        UMSocialSwiftInterface.setPreDefinePlatforms([
            (UMSocialPlatformType.wechatSession.rawValue),
            (UMSocialPlatformType.wechatTimeLine.rawValue),
            (UMSocialPlatformType.QQ.rawValue),
            (UMSocialPlatformType.sina.rawValue),
            (UMSocialPlatformType.linkUrl.rawValue)
            ])
        UMSocialUIManager.removeAllCustomPlatformWithoutFilted()
        // 分享的POP位置
        UMSocialShareUIConfig.shareInstance().shareTitleViewConfig.isShow = true
        UMSocialShareUIConfig.shareInstance().shareTitleViewConfig.shareTitleViewTitleString = "分享给更多人"
        UMSocialShareUIConfig.shareInstance().sharePageGroupViewConfig.sharePageGroupViewPostionType = UMSocialSharePageGroupViewPositionType.bottom
        UMSocialShareUIConfig.shareInstance().sharePageScrollViewConfig.shareScrollViewPageItemStyleType = UMSocialPlatformItemViewBackgroudType.none

        UMSocialUIManager.addCustomPlatformWithoutFilted(UMSocialPlatformType.linkUrl, withPlatformIcon: UIImage(named:"channel_discover_28x28_"), withPlatformName: "复制链接")
    
        UMSocialSwiftInterface.showShareMenuViewInWindowWithPlatformSelectionBlock { (platformType, userInfo) in
            
            if platformType == UMSocialPlatformType.linkUrl {
                //设置网页地址
                let shareObject = UMShareWebpageObject.shareObject(withTitle: "网页标题", descr: "备注", thumImage: UIImage(named:"channel_discover_28x28_"))
                shareObject?.webpageUrl = "http://www.elinknet.cn"
                let pastboad = UIPasteboard.general
                pastboad.string = shareObject?.webpageUrl
                SVHUD.showSuccess("复制成功", 0.8)
                
            }else {
                self.runShareWithType(platformType)
            }
            
        }
        /*
        UMSocialUIManager.showShareMenuViewInWindow { (platformType, userinfo) in
            printLog(platformType)
            if platformType == UMSocialPlatformType.linkUrl {
                
            }else{
                self.runShareWithType(platformType)
            }
         }
        */
    }

// 关键语句 在UMSocialPlatformConfig.h的
typedef NS_ENUM(NSInteger,UMSocialPlatformType)
{}函数内增加   
UMSocialPlatformType_LinkUrl = 888, // URL自定义
真是搞不明白为何友盟要把这个代码和方法隐藏的那么深呢?

希望对各位有帮助!!!

你可能感兴趣的:(友盟UShare分享+复制链接 Swift Version)