swift集成微信原生分享,並沒有用友盟的第三方sdk,直接對接的原生,相比較OC版的話,swift來說代碼量很少,代碼如下:
1,導入WechatOpenSDK,推薦使用cocoapods集成的話,非常便捷,具體操作流程就不多說了,可查看我的關於cocoapods的博客,如下圖:
注:CD到當前項目路徑,然后使用pod search WechatOpenSDK,可以查找最新版本;
執行vim Podfile命令,按 i 鍵,進入編輯模式,在文件中加入 pod 'WechatOpenSDK'
最后執行 pod install,或者 pod update,如需更新本地倉庫執行 pod repo update命令
按esc鍵,:wq,退出即可
2,集成完后,需要創建橋接文件,然后配置下橋接文件的路徑,可配置一個絕對路徑:
從工程的路徑開始,前面使用$(SRCROOT)代替,這樣的話,就不用每次變更項目路徑就得配置橋接文件路徑了。
3,添加白名單:
如上圖紅框里面一樣,添加“LSApplicationQueriesSchemes”,添加 wechat,weixin,weixinULAPI
4,在橋接文件里面導入頭文件
5,添加URL Types:
6,在AppDelegate文件里面,添加如下代碼:
universal link,這個通用鏈接的話,可以參考微信官方文檔,這里就不在詳細敘述了:
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html
7,回調方法,代碼如下:
1 //iOS 9.0以前使用 2 func application(_ application: UIApplication, handleOpen url : URL) -> Bool{ 3 let handleUrlStr = url.absoluteString 4 if let handleUrl = URL(string: handleUrlStr) { 5 return WXApi.handleOpen(handleUrl, delegate: self) 6 } 7 return false 8 } 9 10 //ios 9.0及以后推薦使用 11 func application(_ app: UIApplication, open url: URL, options : [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool{ 12 let handleUrlStr = url.absoluteString 13 if let handleUrl = URL(string: handleUrlStr) { 14 return WXApi.handleOpen(handleUrl, delegate: self) 15 } 16 return false 17 } 18 19 //必須實現 20 func application(_ application: UIApplication, open url: URL, sourceApplication:String?, annotation:Any) -> Bool{ 21 let handleUrlStr = url.absoluteString 22 if let handleUrl = URL(string: handleUrlStr) { 23 return WXApi.handleOpen(handleUrl, delegate: self) 24 } 25 return false 26 } 27 28 func application(_ application: UIApplication, continue userActivity: NSUserActivity,restorationHandler:@escaping([UIUserActivityRestoring]?) -> Void) -> Bool{ 29 return WXApi.handleOpenUniversalLink(userActivity, delegate: self) 30 31 }
8,具體調用,代碼如下:
聲明一個枚舉:
1 enum LDShareType { 2 case Session, Timeline, Favorite/*會話, 朋友圈, 收藏*/ 3 }
分享文本:
1 func shareText(_ text: String, to scene: LDShareType) { 2 3 let req = SendMessageToWXReq() 4 req.text = text 5 req.bText = true 6 7 switch scene { 8 case .Session: 9 req.scene = Int32(WXSceneSession.rawValue) 10 case .Timeline: 11 req.scene = Int32(WXSceneTimeline.rawValue) 12 case .Favorite: 13 req.scene = Int32(WXSceneFavorite.rawValue) 14 } 15 16 WXApi.send(req) 17 }
分享圖片:
1 func shareImage(_ data: Data, thumbImage: UIImage, title: String, description: String, to scene: LDShareType) { 2 3 let message = WXMediaMessage() 4 message.setThumbImage(thumbImage) 5 message.title = title 6 message.description = description 7 8 let obj = WXImageObject() 9 obj.imageData = data 10 message.mediaObject = obj 11 12 let req = SendMessageToWXReq() 13 req.bText = false 14 req.message = message 15 16 switch scene { 17 case .Session: 18 req.scene = Int32(WXSceneSession.rawValue) 19 case .Timeline: 20 req.scene = Int32(WXSceneTimeline.rawValue) 21 case .Favorite: 22 req.scene = Int32(WXSceneFavorite.rawValue) 23 } 24 25 WXApi.send(req) 26 }
分享音樂:
1 func shareMusic(to scene: LDShareType) { 2 let message = WXMediaMessage() 3 message.title = "音樂標題" 4 message.description = "音樂描述" 5 message.setThumbImage(UIImage()) 6 7 let obj = WXMusicObject() 8 obj.musicUrl = "音樂鏈接" 9 obj.musicLowBandUrl = obj.musicUrl 10 11 obj.musicDataUrl = "音樂數據鏈接地址" 12 obj.musicLowBandDataUrl = obj.musicDataUrl 13 message.mediaObject = obj 14 15 let req = SendMessageToWXReq() 16 req.bText = false 17 req.message = message 18 switch scene { 19 case .Session: 20 req.scene = Int32(WXSceneSession.rawValue) 21 case .Timeline: 22 req.scene = Int32(WXSceneTimeline.rawValue) 23 case .Favorite: 24 req.scene = Int32(WXSceneFavorite.rawValue) 25 } 26 27 WXApi.send(req) 28 }
分享視頻:
1 func shareVideo(to scene: LDShareType) { 2 3 let message = WXMediaMessage() 4 message.title = "視頻標題" 5 message.description = "視頻描述" 6 message.setThumbImage(UIImage()) 7 8 let obj = WXVideoObject() 9 obj.videoUrl = "視頻鏈接地址" 10 obj.videoLowBandUrl = "低分辨率視頻地址" 11 12 let req = SendMessageToWXReq() 13 req.bText = false 14 req.message = message 15 16 switch scene { 17 case .Session: 18 req.scene = Int32(WXSceneSession.rawValue) 19 case .Timeline: 20 req.scene = Int32(WXSceneTimeline.rawValue) 21 case .Favorite: 22 req.scene = Int32(WXSceneFavorite.rawValue) 23 } 24 25 WXApi.send(req) 26 }
分享URL:
1 func shareURL(to scene: LDShareType) { 2 3 let message = WXMediaMessage() 4 message.title = "title" 5 message.description = "description" 6 message.setThumbImage(UIImage()) 7 8 let obj = WXWebpageObject() 9 obj.webpageUrl = "http://www.baidu.com" 10 message.mediaObject = obj 11 12 let req = SendMessageToWXReq() 13 req.bText = false 14 req.message = message 15 16 switch scene { 17 case .Session: 18 req.scene = Int32(WXSceneSession.rawValue) 19 case .Timeline: 20 req.scene = Int32(WXSceneTimeline.rawValue) 21 case .Favorite: 22 req.scene = Int32(WXSceneFavorite.rawValue) 23 } 24 25 WXApi.send(req) 26 }
結果回調方法:
1 func onResp(_ resp: BaseResp!) { 2 if resp is SendAuthResp { 3 // 微信登錄 4 5 } else if resp is SendMessageToWXResp { 6 let send = resp as? SendMessageToWXResp 7 if let sm = send { 8 if sm.errCode == 0 { 9 print("分享成功") 10 } else { 11 print("分享失敗") 12 } 13 } 14 } 15 16 }
以上代碼親測過,僅做記錄,剛寫swift代碼,感謝下面簡書兩位博主的博客,微信的sdk寫的也還行。