有几个注意事项:
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自定义
真是搞不明白为何友盟要把这个代码和方法隐藏的那么深呢?
希望对各位有帮助!!!