设置UIActivityViewController分享的开始和结束回调

UIActivityViewController 可以用来做社交化分享,系统内置了许多服务,例如国内的WeChat、QQ、Weibo,国外的Facebook、Twitter等。采用这种分享方式,很容易就可以提供社交化分享功能,而且不需要去各个社交化平台申请 Key 和集成 SDK。

简单的使用

1
2
3
4
let text = "Google"
let url = NSURL(string: "https://www.google.com")
let activityViewController: UIActivityViewController = UIActivityViewController(activityItems: [text, url], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)

设置分享的开始回调

如果要为不同平台提供不同的分享内容,可以通过继承 UIActivityItemProvider 并且实现必要的协议方法:

1
2
3
4
5
6
7
8
9
10
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
print("=====share url start=====")
if activityType.rawValue == "com.tencent.xin.sharetimeline" {// WeChat
return NSURL(string: "https://weixin.qq.com")
}
let shareUrl = NSURL(string: "https://www.google.com")
return shareUrl
}

设置分享的结束回调

1
2
3
activityViewController.completionWithItemsHandler = { (activityType, completed, returnedItems, activityError) in
print("=====share \(activityType) end=====")
}

具体的使用

1
2
3
4
5
6
let url = UrlActivityItemProvider(placeholderItem: "placeholder")
let activityViewController: UIActivityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil)
activityViewController.completionWithItemsHandler = { (activityType, completed, returnedItems, activityError) in
print("=====share \(activityType) end=====")
}
self.present(activityViewController, animated: true, completion: nil)

如果需要分享除了url之外的内容,可以继续通过继承 UIActivityItemProvider 并且实现必要的协议方法,返回需要的数据类型,例如 String、Image等,每一个子类处理一种类型的数据,具体见 Demo。

遇到的问题

WeChat 必须提供 URL 分享内容,否则会报错“抱歉,暂时不支持此类型内容的分享”。

Demo地址: Setup UIActivityViewController share start and end callback