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


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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM