1. 程式人生 > 其它 >swift開發之 -- 微信原生分享

swift開發之 -- 微信原生分享

swift整合微信原生分享,並沒有用友盟的第三方sdk,直接對接的原生,相比較OC版的話,swift來說程式碼量很少,程式碼如下:

1,匯入WechatOpenSDK,推薦使用cocoapods整合的話,非常便捷,具體操作流程就不多說了,可檢視我的關於cocoapods的部落格,如下圖:

注:CD到當前專案路徑,然後使用pod searchWechatOpenSDK,可以查詢最新版本;

執行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寫的也還行。

參考:https://www.jianshu.com/p/1b744a97e63d

https://www.jianshu.com/p/9ac702b07b94