微信分享接入

一.接入

?APP申請(qǐng)審核

首先項(xiàng)目集成微信SDK切揭,需要到官網(wǎng)注冊(cè),因?yàn)槲⑿艑?duì)第三方的調(diào)用有著嚴(yán)格的驗(yàn)證:App ID等曼,包名,及應(yīng)用簽名,只有這三個(gè)跟申請(qǐng)的都完全匹配禁谦,才能調(diào)用分享胁黑。

需要注意點(diǎn):

1) 應(yīng)用官網(wǎng)那欄可以直接填寫你的博客地址或其他

2) 包名需填寫你所要集成項(xiàng)目的包名,后續(xù)可修改

3) 應(yīng)用簽名格式為小寫連續(xù)州泊,并且注意填寫簽名的版本

二.搭建開發(fā)環(huán)境

Android Studio環(huán)境下:

在build.gradle文件中丧蘸,添加如下依賴即可:

dependencies {

compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

}

dependencies {

compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

}

[1] AndroidManifest.xml 設(shè)置

添加必要的權(quán)限支持:

manifest 權(quán)限

三.分享集成

3.1? 接口方法類及屬性

WXMediaMessage -- 微信媒體消息內(nèi)容

mediaObject描述一個(gè)媒體對(duì)象的基類

媒體對(duì)象包括WXTextObject,WXImageObect 等

3.2 分享或收藏的目標(biāo)場(chǎng)景遥皂,通過(guò)修改scene場(chǎng)景值實(shí)現(xiàn)

發(fā)送到聊天界面 ——WXSceneSession

發(fā)送到朋友圈 ——WXSceneTimeline

添加到微信收藏 ——WXSceneFavorite

3.3 集成

要使你的程序啟動(dòng)后微信終端能響應(yīng)你的程序力喷,必須在代碼中向微信終端注冊(cè)你的id:

api = WXAPIFactory.createWWXAPI(this,APP_ID,ture);// 第三個(gè)參數(shù)作用??

api.registerApp(APP_ID)

Steps: > 1.

//將要分享的內(nèi)容shareContent演训,傳給新建出來(lái)的相應(yīng)類型媒體對(duì)象?

WXTypeObject typeObj = new WXTypeObject(); // typeObj為分享內(nèi)容類型

typeObj = shareContent;// 分享內(nèi)容

>2. 初始化WXMediaMessage對(duì)象弟孟,并將帶有分享內(nèi)容的類型媒體對(duì)象typeObj賦值給其mediaObject屬性 WXMediaMessage msg = new WXMediaMessage();

msg.mediaObject = typeObject;?

>3. 構(gòu)造Req,并選擇分享的目標(biāo)場(chǎng)景**scene**

SendMessageToWX.Req req = new SendMessageToWX.Req();

req.transaction = buildTransaction("text");// 用于唯一標(biāo)識(shí)一個(gè)請(qǐng)求

req.message = msg;

req.scene = SendMessageToWX.Req.WXSceneSession;?

>4. 調(diào)用api.sendReq(req);

?api.sendReq(req);

?每個(gè)類型的分享流程大致都如上样悟,只是需要根據(jù)具體的分享類型修改第1拂募,2步驟

2. 文字分享

// 初始化一個(gè)WXTextObject對(duì)象,并填寫分享的內(nèi)容

WXTextObject textObject = new WXTextObject();

textObject.text = "textObject.text"; // 分享的內(nèi)容,即對(duì)方收到的消息

// 用WXTextObject對(duì)象初始化WXMediaMessage對(duì)象

WXMediaMessage msg = new WXMediaMessage();

msg.mediaObject = textObject;

msg.description = "description"; // 分享框的title文字

// 構(gòu)造一個(gè)Req

SendMessageToWX.Req req = new SendMessageToWX.Req(); // 用于唯一標(biāo)識(shí)一個(gè)請(qǐng)求

req.transaction = buildTransaction("text");

req.message = msg;

req.scene = SendMessageToWX.Req.WXSceneSession;// 聊天界面

// 調(diào)用api接口發(fā)送數(shù)據(jù)到微信

Toast.makeText(this,"" + api.sendReq(req),Toast.LENGTH_SHORT).show();

>- 圖片分享

// 獲取索要分享的圖片

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.little);

// 初始化WXImageObject乌奇,并將圖片傳入

WXImageObject imgObject = new WXImageObject(bmp);

// 初始化WXMediaMessage對(duì)象,并將imgObj賦值給媒體對(duì)象mediaObject

WXMediaMessage msg = new WXMediaMessage();

msg.mediaObject = imgObject;

Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);

bmp.recycle();

msg.thumbData = bmpToByteArray(thumbBmp, true);

// 構(gòu)造一個(gè)Req

SendMessageToWX.Req req = new SendMessageToWX.Req();

req.transaction = buildTransaction("img");

req.message = msg;

req.scene = SendMessageToWX.Req.WXSceneSession;

// 調(diào)用api接口發(fā)送數(shù)據(jù)到微信

Toast.makeText(this,"" + api.sendReq(req),Toast.LENGTH_SHORT).show();

>- 其余媒體類型可具體參照-- 微信官方文檔:(分享與收藏功能開發(fā)文檔)

3. Tips: >- 注意所分享類型的限制條件没讲,例如分享的文字及圖片有大小限制眯娱,所以若圖片縮略圖大于32k則分享不成功礁苗。

3.4.跳轉(zhuǎn)小程序

val miniProgramObj = WXMiniProgramObject()

miniProgramObj.webpageUrl = "http://www.qq.com"

// 兼容低版本的網(wǎng)頁(yè)鏈接

miniProgramObj.miniprogramType = WXMiniProgramObject.MINIPROGRAM_TYPE_PREVIEW // 正式版:0,測(cè)試版:1徙缴,體驗(yàn)版:2

miniProgramObj.userName = "gh_b7a83a16c048" // 小程序原始id

miniProgramObj.path = "pages/index/index" //小程序頁(yè)面路徑

val msg = WXMediaMessage(miniProgramObj)

msg.title = "小程序消息Title" // 小程序消息title

msg.description = "小程序消息Desc" // 小程序消息desc

msg.thumbData = getThumb() // 小程序消息封面圖片试伙,小于128k

val req = SendMessageToWX.Req()req.transaction = buildTransaction("webpage")

req.message = msgreq.scene = SendMessageToWX.Req.WXSceneSession // 目前只支持會(huì)話

api.sendReq(req)


3.5接收微信的請(qǐng)求及返回值(從小程序跳回app必須要實(shí)現(xiàn))

如果你的程序需要接收微信發(fā)送的請(qǐng)求,或者接收發(fā)送到微信請(qǐng)求的響應(yīng)結(jié)果于样,需要下面3步操作:

a. 在你的包名相應(yīng)目錄下新建一個(gè)wxapi目錄疏叨,并在該wxapi目錄下新增一個(gè)WXEntryActivity類(保命,類名不可改)穿剖,該類繼承自Activity


WXEntryActivity

并在manifest文件里面加上exported屬性蚤蔓,設(shè)置為true,例如:


activity配置

b. 實(shí)現(xiàn)IWXAPIEventHandler接口糊余,微信發(fā)送的請(qǐng)求將回調(diào)到onReq方法秀又,發(fā)送到微信請(qǐng)求的響應(yīng)結(jié)果將回調(diào)到onResp方法

c. 在WXEntryActivity中將接收到的intent及實(shí)現(xiàn)了IWXAPIEventHandler接口的對(duì)象傳遞給IWXAPI接口的handleIntent方法,示例如下圖:


app接收微信回傳信息

當(dāng)微信發(fā)送請(qǐng)求到你的應(yīng)用贬芥,將通過(guò)IWXAPIEventHandler接口的onReq方法進(jìn)行回調(diào)吐辙,類似的,應(yīng)用請(qǐng)求微信的響應(yīng)結(jié)果將通過(guò)onResp回調(diào)蘸劈。

四.?點(diǎn)擊微信分享的內(nèi)容后跳轉(zhuǎn)來(lái)源App的實(shí)現(xiàn)

方案一

從WebView(該WebView從屬于另一個(gè)App昏苏,并非我們自己的App)跳轉(zhuǎn)到MyApp的某個(gè)界面(這里以跳轉(zhuǎn)到MyApp的Acticity?A為例)。具體的實(shí)現(xiàn)邏輯如下:

(1)該WebView顯示的網(wǎng)頁(yè)內(nèi)容只是一個(gè)超鏈接,自定義了一個(gè)scheme=myapp://贤惯,后邊可以附加一些參數(shù)洼专,如果需要從網(wǎng)頁(yè)向App傳值的話。


html配置

(2)MyApp中的Activity?A需要配置特定的infliter孵构,如下:


activity intent-filter配置

(3)當(dāng)在WebView上點(diǎn)擊上述自定義的超鏈接時(shí)就可以打開MyApp的A界面壶熏,所傳遞的參數(shù)也可以在所跳轉(zhuǎn)到的Activity中獲取,方法如下:

getIntent().getScheme();//獲得Scheme名稱??

getIntent().getDataString();//獲得Uri全部路徑浦译,根據(jù)自定義的格式解析字符串即可獲取我們上面附加的參數(shù)棒假。

問(wèn)題1:如果用戶安裝了MyApp,就可以點(diǎn)擊網(wǎng)頁(yè)跳轉(zhuǎn)精盅,如果沒(méi)有安裝MyApp的話帽哑,WebView就會(huì)提示找不到該頁(yè)面。制作網(wǎng)頁(yè)時(shí)可以在網(wǎng)頁(yè)中做檢測(cè)叹俏,沒(méi)安裝MyApp的話妻枕,頁(yè)面就重定向到應(yīng)用的下載頁(yè)面。

問(wèn)題2:在普通App的WebView中和瀏覽器中上述機(jī)制是可以的粘驰,但是在微信的WebView是不可以點(diǎn)擊直接跳轉(zhuǎn)我們的應(yīng)用的屡谐,可能是微信做了某些過(guò)濾,且僅僅支持跟微信有深度合作的應(yīng)用的跳轉(zhuǎn)蝌数,如大眾點(diǎn)評(píng)是可以的愕掏。針對(duì)這種情況,我們可以引導(dǎo)用戶使用瀏覽器打開所分享的網(wǎng)頁(yè)顶伞,然后點(diǎn)擊就可以跳轉(zhuǎn)應(yīng)用了饵撑。

方案二

使用微信SDK分享WXAppExtendObject數(shù)據(jù)給好友,好友點(diǎn)擊跳轉(zhuǎn)MyApp的某個(gè)頁(yè)面(需要在分享時(shí)傳遞構(gòu)造跳轉(zhuǎn)Intent的參數(shù))唆貌。

1.該類型的分享(具體請(qǐng)參考微信分享SDK)可以帶幾個(gè)參數(shù)滑潘,參數(shù)中必須附帶一些構(gòu)造跳轉(zhuǎn)Intent的數(shù)據(jù)。

2.好友點(diǎn)擊分享的內(nèi)容锨咙,回調(diào)IWXAPIEventHandler接口的類的onReq方法语卤,具體為

ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:這種情況才會(huì)調(diào)用,此時(shí)可以取出分享時(shí)附帶在參數(shù)中的一些數(shù)據(jù)酪刀,構(gòu)造一個(gè)跳轉(zhuǎn)Intent,調(diào)用startActivity(intent)?來(lái)打開MyApp粹舵。

問(wèn)題0:現(xiàn)版本無(wú)法分享App類型消息(低版本可以,微信抽風(fēng))

問(wèn)題1:該分享方式只能分享給好友蓖宦,不能分享到朋友圈齐婴。

問(wèn)題2:如果好友沒(méi)安裝MyApp,點(diǎn)擊微信中好友分享過(guò)來(lái)的消息后無(wú)反應(yīng)稠茂,無(wú)法提醒“未安裝MyApp柠偶,請(qǐng)下載”情妖,因?yàn)檫@些邏輯要實(shí)現(xiàn)的話本身就是在MyApp里面寫的,原本沒(méi)裝的話根本無(wú)法檢測(cè)诱担。

問(wèn)題3:WXAppExtendObject類型的分享毡证,數(shù)據(jù)有大小限制,

extInfo(String)限制2KB蔫仙;

fileData(byte[])供第三方使用的文件二進(jìn)制數(shù)據(jù)料睛,最大10M;

filePath:(String)Local?directory?of?the?file?provided?for?applications,本身長(zhǎng)度最大10KB,文件大小同上摇邦,不超過(guò)10M恤煞。

五.目前存在問(wèn)題

1.無(wú)法分享App類型消息


分享App失敗

解決方式:用老版本的微信,新版本的微信不支持WXAppExtendObject

疑問(wèn):但是微信分享的官方demo是可以分享app類型消息的施籍,猜測(cè)是否微信官方對(duì)app類型消息做了過(guò)濾居扒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丑慎,隨后出現(xiàn)的幾起案子喜喂,更是在濱河造成了極大的恐慌,老刑警劉巖竿裂,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玉吁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡腻异,警方通過(guò)查閱死者的電腦和手機(jī)进副,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捂掰,“玉大人敢会,你說(shuō)我怎么就攤上這事曾沈≌庀” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵塞俱,是天一觀的道長(zhǎng)姐帚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)障涯,這世上最難降的妖魔是什么罐旗? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮唯蝶,結(jié)果婚禮上九秀,老公的妹妹穿的比我還像新娘。我一直安慰自己粘我,他們只是感情好鼓蜒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布痹换。 她就那樣靜靜地躺著,像睡著了一般都弹。 火紅的嫁衣襯著肌膚如雪娇豫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天畅厢,我揣著相機(jī)與錄音冯痢,去河邊找鬼。 笑死框杜,一個(gè)胖子當(dāng)著我的面吹牛浦楣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咪辱,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼椒振,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了梧乘?” 一聲冷哼從身側(cè)響起澎迎,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎选调,沒(méi)想到半個(gè)月后夹供,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仁堪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年哮洽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弦聂。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸟辅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莺葫,到底是詐尸還是另有隱情匪凉,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布捺檬,位于F島的核電站再层,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏堡纬。R本人自食惡果不足惜聂受,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烤镐。 院中可真熱鬧蛋济,春花似錦、人聲如沸炮叶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扛芽,卻和暖如春骂蓖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背川尖。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工登下, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叮喳。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓被芳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親馍悟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畔濒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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