Swift版微信分享詳細(xì)步驟

  • 作者:Mandarava(鰻駝螺)
  • 參考:

準(zhǔn)備工作

首先到微信開(kāi)放平臺(tái)注冊(cè)開(kāi)發(fā)者帳號(hào),并在后臺(tái)的“管理中心”創(chuàng)建應(yīng)用、遞交審核,獲取應(yīng)用的AppID后即可用于開(kāi)發(fā);同時(shí),在微信的“資源中心”下載微信的最新SDK。這些基本的東西某就不曰(yue)了,如果有問(wèn)題請(qǐng)閱讀微信開(kāi)放平臺(tái)的幫助。

工具和版本

某這里使用Xcode7.1和微信SDK1.6.2。

微信分享詳細(xì)步驟

  1. 使用Xcode新建一個(gè)iOS項(xiàng)目,命名為:WeixinShareTest。
  2. 將SDK壓縮包中的 libWeChatSDK.a,WXApi.h,WXApiObject.h 三個(gè)文件添加到項(xiàng)目中。


    image.png
  3. 建立橋接文件:WeixinShareTest-Bridging-Header.h,文件內(nèi)容:
@import UIKit; //使用1.6版必須有(PS:1.5版可以不要)
#import "WXApiObject.h"
#import "WXApi.h"

建立橋接(PS:搜索“bridging”可以快速定位)


image.png
  1. 導(dǎo)入有關(guān)的類庫(kù):SystemConfiguration.framework,libz.tbd,libsqlite3.0.tbd,libc++.tbd(注:Xcode7開(kāi)始把.dylib改成了.tbd了,如果是用Xcode6.4這里的.tbd還原成.dylib;另外,實(shí)際上,這里還缺少一個(gè)依賴包,后面再曰)。


    image.png
  2. 設(shè)置Url schame:添加一個(gè)URL Type,identifier中填寫(xiě):weixin,URL Schemes中填寫(xiě)你的AppID。


    image.png
  3. 另外,按照SDK中說(shuō)明文件的說(shuō)法,還需要將下面的內(nèi)容加入到項(xiàng)目的Info.plist中(用文本編輯器打開(kāi),放在倒數(shù)第2行上面即可)。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
  1. 聲明AppDelegate實(shí)現(xiàn)WXApiDelegate協(xié)議
class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate 
  1. 在 AppDelegate的application:didFinishLaunchingWithOptions:函數(shù)中向微信注冊(cè)id
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        WXApi.registerApp("Your_AppID") //改成你實(shí)際的AppID
        return true
    }
  1. 重寫(xiě)AppDelegate的application:handleOpenURL:和application:openURL:sourceApplication:annotation:方法
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
    return WXApi.handleOpenURL(url, delegate: self)
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return WXApi.handleOpenURL(url, delegate: self)
}
  1. 實(shí)現(xiàn)WXApiDelegate中的方法onReq和onResp方法。這二個(gè)方法怎么使用某先不表,后面再曰,這里只空實(shí)現(xiàn)它們;這二個(gè)方法不影響分享操作,只是你可能需要知道分享結(jié)果,如分享是否成功,發(fā)生了什么錯(cuò)誤等,需要用到onResp;onReq是微信終端向第三方應(yīng)用發(fā)起請(qǐng)求,要求第三方應(yīng)用響應(yīng)的操作,咱這里用不到。
func onReq(req: BaseReq!) {
    //onReq是微信終端向第三方程序發(fā)起請(qǐng)求,要求第三方程序響應(yīng)。第三方程序響應(yīng)完后必須調(diào)用sendRsp返回。在調(diào)用sendRsp返回時(shí),會(huì)切回到微信終端程序界面。
}
func onResp(resp: BaseResp!) {
    //如果第三方程序向微信發(fā)送了sendReq的請(qǐng)求,那么onResp會(huì)被回調(diào)。sendReq請(qǐng)求調(diào)用后,會(huì)切到微信終端程序界面。
}
  1. 到這里,我們可以嘗試編譯一下,看看到目前為止的工作是否都正常。而事實(shí)是,編譯結(jié)果出現(xiàn)2個(gè)錯(cuò)誤,主要是前一個(gè)錯(cuò)誤:


    image.png
"_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:
objc-class-ref in libWeChatSDK.a(MTAHelper.o)

這個(gè)錯(cuò)誤是因?yàn)槿鄙倭薈oreTelephony.framework,不過(guò)微信SDK并沒(méi)有說(shuō)這是個(gè)依賴庫(kù)(PS:微信SDK1.5不需要,應(yīng)該是1.6新增的),但不管它,加進(jìn)來(lái)再說(shuō)。再次編譯,成功!


image.png
  1. 下面開(kāi)始實(shí)現(xiàn)分享操作,微信有很多分享方式,可以分享文本、鏈接、圖片、音頻、視頻、文件等,可以將資源分享到朋友圈、聊天界面、收藏等。具體實(shí)現(xiàn)方法都可以在參考微信SDK Demo中的WXApiRequestHandler.m中的方法(當(dāng)然它是OC代碼),這里某只實(shí)現(xiàn)二個(gè)常用的,一個(gè)是文本分享,一個(gè)圖片分享,圖片分享自動(dòng)生成縮略圖。具體實(shí)現(xiàn)如下,其中inScene可選的值有三個(gè):WXSceneTimeline(朋友圈)、WXSceneSession(聊天界面) 、WXSceneFavorite(收藏)。
//分享文本
func sendText(text:String, inScene: WXScene)->Bool{
    let req=SendMessageToWXReq()
    req.text=text
    req.bText=true
    req.scene=Int32(inScene.rawValue)
    return WXApi.sendReq(req)
}
///分享圖片
func sendImage(image:UIImage, inScene:WXScene)->Bool{
    let ext=WXImageObject()
    ext.imageData=UIImagePNGRepresentation(image)
    
    let message=WXMediaMessage()
    message.title=nil
    message.description=nil
    message.mediaObject=ext
    message.mediaTagName="MyPic"
    //生成縮略圖
    UIGraphicsBeginImageContext(CGSize(width: 100, height: 100))
    image.drawInRect(CGRectMake(0, 0, 100, 100))
    let thumbImage=UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    message.thumbData=UIImagePNGRepresentation(thumbImage)
    
    let req=SendMessageToWXReq()
    req.text=nil
    req.message=message
    req.bText=false
    req.scene=Int32(inScene.rawValue)
    return WXApi.sendReq(req)
}
  1. 調(diào)用分享方法的代碼:
sendText("這是來(lái)自Mandarava(鰻駝螺)的分享", inScene: WXSceneTimeline) //分享文本到朋友圈
sendImage(UIImage(named: "MyImage.png")!, inScene: WXSceneTimeline) //分享圖片到朋友圈,假設(shè)項(xiàng)目中已經(jīng)添加了一張名曰MyImage.png的大圖片作為分享圖片

下面是文本分享和圖片分享到朋友圈的結(jié)果;另外這里顯示的是“未審核應(yīng)用”,因?yàn)槟尺@個(gè)只是測(cè)試應(yīng)用,用了一個(gè)未經(jīng)審核過(guò)的AppID。


image.png
  1. 事情還沒(méi)完,如果你想知道用戶是否完成了分享,需要實(shí)現(xiàn)前面說(shuō)過(guò)的onResp方法,回到AppDelegate.swift中去實(shí)現(xiàn)它;這個(gè)方法實(shí)現(xiàn)起來(lái)其實(shí)很簡(jiǎn)單,代碼如下;其中,可以用resp.isKindOfClass(SendMessageToWXResp)來(lái)確保的是分享操作的回調(diào)(當(dāng)然,因?yàn)槲覀冞@里只有分享操作,這個(gè)檢測(cè)不要也罷)。
func onResp(resp: BaseResp!) {
    if resp.isKindOfClass(SendMessageToWXResp){//確保是對(duì)我們分享操作的回調(diào)
        if resp.errCode == WXSuccess.rawValue{//分享成功
            NSLog("分享成功")
        }else{//分享失敗
            NSLog("分享失敗,錯(cuò)誤碼:%d, 錯(cuò)誤描述:%@", resp.errCode, resp.errStr)
        }
    }
}

題外話:寫(xiě)這篇文章時(shí),某用的AppID一直是個(gè)亂取的值(并不是來(lái)自微信開(kāi)放平臺(tái)后臺(tái)創(chuàng)建應(yīng)用的AppID),整個(gè)開(kāi)發(fā)過(guò)程沒(méi)什么問(wèn)題,直到測(cè)試這個(gè)onResp時(shí)發(fā)現(xiàn)一直沒(méi)反應(yīng),但代碼肯定沒(méi)問(wèn)題(因?yàn)橐郧霸陧?xiàng)目中也是這樣做的),后來(lái)發(fā)現(xiàn)原來(lái)是這個(gè)AppID的問(wèn)題,用回了在開(kāi)放平臺(tái)創(chuàng)建的AppID后就能正常收到onResp了。所以,實(shí)踐之前,盡量先去開(kāi)放平臺(tái)創(chuàng)建應(yīng)用獲得真實(shí)的AppID來(lái)測(cè)試。

  1. 題外話:可以用 WXApi.isWXAppInstalled() 來(lái)檢查系統(tǒng)中是否安裝了微信,在未安裝時(shí)隱藏分享按鈕,避免Appstore審核被拒;也不要用通過(guò)分享來(lái)提供應(yīng)用內(nèi)獎(jiǎng)勵(lì),這屬于“使用App Store以外的軟件提供額外功能”,也會(huì)被拒。我納悶的是,審核的系統(tǒng)中會(huì)裝有微信嗎?通過(guò)隱藏微信分享的方式或許能混過(guò)去。
  2. 打完收工!若有錯(cuò)誤歡迎批評(píng)指證;轉(zhuǎn)載本文請(qǐng)注明來(lái)源。
    by Mandarava(鰻駝螺)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,540評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,028評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,801評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,223評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,442評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,800評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,996評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,233評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,926評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,702評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容