Android利用微信SDK分享到微信教程,回撥分享結果錯誤解決和注意點
在正式開始之前這裡要著囉嗦一下,進來的同學一定要看,在申請應用的時候要填一個簽名,這個簽名是由應用的簽名檔案keystore決定的,那麼你在填這個簽名的時候,一定要把你的應用用正式的keyStore生成apk,安裝到手機,然後用微信提供的獲取應用簽名的apk工具獲取你應用的簽名,然後這會生成的這個簽名才是正確的,千萬記得,不要使用dubug的ketStore測試,不然後面雖然可以修改,修改了後要稽核,但是稽核也是需要時間的,會很麻煩。
還有一點,你在測試微信分享的時候可能會直接在Eclipse好或者Studio執行專案,那樣使用的肯定是dubug的keyStore了,這樣分享的時候會被微信拒絕,微信會生成快取,就算你這會換了正式的keystore來分享顯示的還會是被微信拒絕,就算重啟微信重啟手機也不管用,那你就要清空微信的資料了;很多東西是不是丟了?好吧,囉嗦夠了,正式進入主題。
今天會提供如果實現微信分享,並且對怎麼成功接受回撥結果做一個詳細的介紹和教程,有回撥結果失敗的同學,往下看吧
首先就是要去開放平臺申請應用,稽核通過後會分配給你一個AppID:
下面我做了一個圖片、文字、URL的封裝,因為這幾個是最常用的對吧,如果還需要其他的分享型別,那麼你在這裡新增幾個方法就可以了,很方便修改:(想看下一步的同學,可以直接掠過程式碼往下看)
/** * 分享文字 * * @param shareContent 分享內容 * @param type 分享型別,朋友圈、收藏、好友 */ public void shareText(String shareContent, ShareType type) { if (!TextUtils.isEmpty(shareContent)) { WXTextObject textObj = new WXTextObject(); textObj.text = shareContent; WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = textObj; // 傳送文字型別的訊息時,title欄位不起作用 // msg.title = "Title"; msg.description = shareContent; // 構造一個Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("text"); // transaction欄位用於唯一標識一個請求 req.message = msg; req.scene = ShareType.getWechatType(type); sendReq(req); } } /** * 分享一個圖片 * * @param shareBitmap 要分享的圖片 * @param type 分享型別,朋友圈、收藏、好友 */ public void shareImage(Bitmap shareBitmap, ShareType type) { WXImageObject imgObj = new WXImageObject(shareBitmap); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imgObj; Bitmap thumbBmp = Bitmap.createScaledBitmap(shareBitmap, THUMB_SIZE, THUMB_SIZE, true); msg.thumbData = bmpToByteArray(thumbBmp); // 設定縮圖 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg; req.scene = ShareType.getWechatType(type); sendReq(req); } /** * 分享一個網頁 * * @param httpUrl 要分享的連線 * @param type 分享型別,朋友圈、收藏、好友 * @param iconRes ICON * @param title 標題 * @param description 描述 */ public void shareWebPage(String httpUrl, ShareType type, int iconRes, String title, String description) { Bitmap icon = BitmapFactory.decodeResource(Application.getInstance().getResources(), iconRes); shareWebPage(httpUrl, type, icon, title, description); } /** * 分享一個網頁 * * @param httpUrl 連線 * @param type 分享型別,朋友圈、收藏、好友 * @param icon 連線前顯示的圖示 * @param title 別人看到的標題 * @param description 別人看到的描述 */ public void shareWebPage(String httpUrl, ShareType type, Bitmap icon, String title, String description) { WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = httpUrl; WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = title; msg.description = description; msg.thumbData = bmpToByteArray(icon); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("webpage"); req.message = msg; req.scene = ShareType.getWechatType(type); sendReq(req); } /** * 得到Bitmap的byte * * @param bmp 圖片 * @return 返回壓縮的圖片 */ private static byte[] bmpToByteArray(Bitmap bmp) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, output); byte[] result = output.toByteArray(); try { output.close(); } catch (Exception e) { e.printStackTrace(); } return result; } /** * 構建一個唯一標誌 * * @param type 分享的型別分字串 * @return 返回唯一字串 */ private static String buildTransaction(String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); }
如果你看了上面的方法的封裝,相比你一定看到了分享的方法都需要一個IWXAPI的引數,那麼現在就是要生成這個引數,在你分享之前或者在OnCreate的方法中可以:
IWXAPI wxapi = WXAPIFactory.createWXAPI(context, Constants.WECHAT_APP_ID);
注意,應該使用
IWXAPI wxapi = WXAPIFactory.createWXAPI(context, Constants.WECHAT_APP_ID);
而不是為什麼呢,原因在下面會解釋到。mWxApi = WXAPIFactory.createWXAPI(context, Constants.WECHAT_APP_ID, false);
其實現在已經可以分享成功了,但是我們怎麼知道是不是分享成功了呢?那就是要接受微信的分享結果回調了,我們需要提供一個專門的Activity,並且實現微信SDK的IWXAPIEventHandler介面
收不到微信的分享結果回撥?很多人在這裡就出問題了,我們的Activity實現了微信的IWXAPIEventHandler介面,但是收不到微信的回撥,那麼問題出在哪裡呢?且聽我細細道來
看過微信分享的demo的人就知道,微信接受的入口類在packagename.wxapi包下,它的分享結果回撥也在這個類,那麼我們實現這個IWXAPIEventHandler介面怎麼就不行呢?往下看
原來,我們在開放平臺註冊應用的時候要填包名,然後微信會在packagename.wxapi找這個回撥介面的類,並且這個類必須是集成了Activity的類,並且實現IWXAPIEventHandler介面,而且最重要的是:這個類的名字一定要是WXEntryActivity.java;這樣,你就可以接受到微信回撥結果了:
那麼注意的幾點總結出來就是:
1、我們必須有一個類繼承Activity,且實現微信SDK提供的IWXAPIEventHandler介面
2、實現IWXAPIEventHandler介面的Activity的檔名稱必須是:WXEntryActivity.java
3、這個WXEntryActivity.java類必須在packagename.wxapi包下,比如說我的程式包名是com.yoalnda.wechat,那麼這個檔案就放在com.yolanda.wechat.wxapi下
4、這個類WXEntryActivity.java在onCreate中
mWxApi = WXAPIFactory.createWXAPI(context, Constants.WECHAT_APP_ID, false);
mWxApi.handleIntent(getIntent(), this);
上邊是生成解析回撥結果的wxapi物件,下面就是把接受到的Intent給wxapi這個物件,它會解析回撥結果,通過我們實現的IWXAPIEventHandler介面回撥給我們,這個介面有兩個方法,大家可以看我下面的程式碼就清楚了5、不要忘記了onNewIntent這個方法,也要寫上,為了防止這個Activity處於棧頂的時候微信回撥我們
剛才 說到不能使用
IWXAPI wxapi = WXAPIFactory.createWXAPI(context, Constants.WECHAT_APP_ID, false);
下面就是原因,WXAPIFactory提供了兩個例項化WXAPI的方法,含有第三個Boolean引數的這個是接受回撥結果的時候用的,雖然前面用這個也可以成功。
/**
* @author YOLANDA
* @Time 2015年3月30日 下午4:55:56
*/
public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler {
/**分享到微信介面**/
private IWXAPI mWxApi;
/**分享結果資訊**/
private TextView txtShareResult;
/**分享結果圖片**/
private ImageView imgShareResult;
@Override
protected void onActivityCreate(Bundle savedInstanceState) {
setContentLayout(R.layout.activity_share2wechat_result);
setBackButtonVisibility(true);
mWxApi = WXAPIFactory.createWXAPI(context, Constants.WECHAT_APP_ID, false);
mWxApi.registerApp(Constants.WECHAT_APP_ID);
mWxApi.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
mWxApi.handleIntent(intent, this);
}
/***
* 請求微信的相應碼
* @author YOLANDA
* @param arg0
*/
@Override
public void onResp(BaseResp baseResp) {
txtShareResult = (TextView) findViewById(R.id.txt_share2wechat_result);
imgShareResult = (ImageView) findViewById(R.id.img_share2wechat_result);
imgShareResult.setImageResource(R.drawable.operation_failed);
setTitle("分享失敗");
int result = 0;
Log.i("錯誤號:" + baseResp.errCode + ";資訊:" + baseResp.errStr);
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK:
setTitle("分享成功");
result = R.string.sharewechat_success;//成功
imgShareResult.setImageResource(R.drawable.operation_succeed);
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = R.string.sharewechat_cancel;//取消
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = R.string.sharewechat_deny;//被拒絕
break;
default:
result = R.string.sharewechat_back;//返回
break;
}
txtShareResult.setText(result);
}
/**微信主動請求我們**/
@Override
public void onReq(BaseReq baseResp) {
try {
Intent intent = new Intent(Application.getInstance(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Application.getInstance().startActivity(intent);
} catch (Exception e) {
}
}
}
至此,微信分享和介面回撥結果都完成了。
相關推薦
Android利用微信SDK分享到微信教程,回撥分享結果錯誤解決和注意點
在正式開始之前這裡要著囉嗦一下,進來的同學一定要看,在申請應用的時候要填一個簽名,這個簽名是由應用的簽名檔案keystore決定的,那麼你在填這個簽名的時候,一定要把你的應用用正式的keyStore生成apk,安裝到手機,然後用微信提供的獲取應用簽名的apk工具獲取你應用
微信小程式下拉選項,回撥輸入框
wxml: <view class='select_box'> <view class='select' catchtap='selectTap'> <text class='select_text'>{{sele
Android中的介面回撥詳解,回撥機制:以Activity和Adapter傳遞資料為例。
首先解決啥是回撥: 我覺得這個例子比較好:某天,我打電話向你請教問題,當然是個難題,你一時想不出解決方法,我又不能拿著電話在那裡傻等,於是我們約定:等你想出辦法後打手機通知我,這樣,我就掛掉電話辦其它事情去了。過了XX分鐘,我的手機響了,你興高采烈的說問題已經搞定,應該
簡單粗暴教你在VUE中引入微信SDK 呼叫微信分享、朋友圈分享、QQ分享......
寫在前面: 剛做了一個微信端的網頁,用到了微信分享,在網上看了好多的資料,發現好多文件都寫得雲裡霧裡,讓人看的頭疼。通過對很多大佬文章的綜合整理,才完成了微信分享的部分。所以我想著自己寫一篇文章,能讓看到我這篇文章的親們能夠清楚的明白在vue上怎麼使用微信分享SDK,能夠按照
android使用友盟實現第三方登入、分享以及微信回撥無反應問題解決辦法
這裡介紹微信和新浪登入。微信登入和新浪登入都需要申請第三方賬號。可以參考官方文件http://dev.umeng.com/social/android/operation#2還是很清晰的。 新浪微博開放平臺http://open.weibo.com/有賬號就可以,經常刷微
iOS之 接入新浪微博 SDK(微信支付) 的坑(registerApp 的問題)
com .net symbols object type lan creat manager -o 最近在做一個 iOS 的 cocos2d-x 項目接入新浪微博 SDK 的時候被“坑”了,最後終於順利的解決了。發現網上也有不少人遇到一樣的問題,但是能找到的數量有限的解決辦
ASP.NET CORE下用盛派微信SDK取微信openid
open 頁面 try cloud fancybox 技術 article clas group 用CORE做項目用到微信的相關東西,聽說那個盛派微信SDK很火,自己弄了下,只是簡單的用用,用戶訪問頁面取微信openid
微信開發配置JSSDK,註入權限驗證,以及invalid signature簽名錯誤解決
工具 沒有 ans dem menus true 發現 bin ces 在微信開發中很多功能都要用到微信JSSDK,關於JSSDK的使用,微信官方的文檔已經比較詳細,一定要仔細去看文檔。 <script src="https://res.wx.qq.com/open
淺析微信支付:申請退款、退款回撥介面、查詢退款
本文是【淺析微信支付】系列文章的第八篇,主要講解商戶如何處理微信申請退款、退款回撥、查詢退款介面,其中有一些坑的地方,會著重強調。 淺析微信支付系列已經更新七篇了喲~,沒有看過的朋友們可以看一下哦。 淺析微信支付:查詢訂單和關閉訂單 淺析微信支付:支付結果通知 淺析微信支付:統一下單介面
微信支付統一下單的坑跟回撥地址程式碼示例
這裡我是把微信裡的回撥dome 拿出來重寫了一下, 在配置回撥地址的時候,要確定你的回撥連結地址一定要能夠訪問, 裡面註釋的比較多- -是我自己測試用的 也可以拿來作為參考, 配合上面一篇我寫的統一下單dome文章作為 結合來做,
android整合環信sdk出現app:transformClassesWithDexForDebug.” ---finished with non-zero exit value 2解決方法
android整合環信sdk出現app:transformClassesWithDexForDebug.” —finished with non-zero exit value 2解決方法 通常是架包衝突問題。 首先找到Gradle Scripts 然後找到 解決: impleme
微信H5支付完整版含PHP回撥頁面
注意事項: 一,微信H5支付只能用在手機瀏覽器中,比如百度瀏覽器,UC瀏覽器等,不可以用在微信中,微信中只可以使用公眾號支付.要特別注意. 二,如果你的h5手機版網站加殼打包封裝成了APP,根據我們的測試,也可以使用微信h5支付.不過.據微信官方說,可能會提示商家引數格式有誤,請聯絡商家解決
微信小程式 the server responded with a status of 404 錯誤解決方法
微信小程式開發,剛剛接觸這個小程式,遇到了題目中的問題,也就是在WXSS中無法使用background-image這個功能 後來經過各種查終於找到了解決方法。 首先官方給的說明是:background-image:可以使用網路圖片,或者 base64,或者使用<im
IOS微信第三方支付onResp方法不被回撥的解決辦法
首先是關於關於IOS微信的支付分享或登入 成功調起客戶端操作之後,返回你的應用之後onResp:方法不被執行的問題。//這裡說明一下,上次的整合告訴大家在Appdelegate.m里加入如下兩個方
微信H5支付完整版含PHP回撥頁面.程式碼精簡2018年2月
<?php $sj=date("Y-m-d H:i:s"); $userid=returnuserid($_SESSION["SHOPUSER"]); $uip=$_SERVER["REMOTE_ADDR"]; $money1=sqlzhuru($_POST[t1]); $bh=$ddbh=$_SES
java微信小程式支付,退款,回撥函式
package com.pay;import java.util.Date;import java.util.Map;public class test { /** * 生成統一下單 * @throws Exception */public s
iOS整合微信支付的一些坑:onResp不回撥、只顯示一個確定按鈕、閃回
iOS整合微信支付總體來說還是比較容易的(如果沒有那些坑的話),所有文件都在: https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1甚至只要看: https://pay.weixin.qq.com/w
微信網頁授權code請求多次回撥的坑
在之前的專案裡需要用到微信授權,我也是一次第一次用,看著微信開發文件寫了,然後就掉進了一個坑裡。剛開始在授權頁面寫的微信授權連結:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx5250b8b9d4cfd
微信企業號,回撥模式開通.net
企業號每個應用有普通模式和回撥模式兩種,普通模式直接開啟網頁,回撥模式可設定應用底部選單項、可增加互動開發、可把客戶端的操作事件傳給企業伺服器,企業伺服器做響應開發。 開通回撥模式,首先需要通過url的回撥驗證,那麼進入應用後臺設定項,設定好url、token、aes加密偏
微信支付開發本地接收非同步通知回撥【實戰】
前言 最近在除錯微信相關的介面,但是由於微信官方出於安全的考慮,對於呼叫介面的域名有限制。微信授權與微信支付統一下單介面在本地