android分享支付經(jīng)驗分享

最近由于公司想弄一個新手推薦活動青灼,因為是推薦活動急灭,必須借用現(xiàn)在流行的社交軟件進行各種分享帽借,只要形式有微信分享到好友或者朋友圈珠增、QQ分享給好友或者空間、微博分享和短信分享等砍艾。下面我就跟大家一起聊下在分享的過程中所遇到的各種坑蒂教。本文來自于自己的經(jīng)驗,不足的地方還請指正脆荷。首先說下我是怎么實現(xiàn)的凝垛,然后給大家說下實現(xiàn)過程中應(yīng)該注意的。

##微信支付

1. 微信支付注冊``` api = WXAPIFactory.createWXAPI(this, AppConfig.WEIXIN_PAY_ID, false);```? > 第二個參數(shù)是我們在微信開放平臺申請的Pay_ID? > 第三個參數(shù)代表是否進行校驗.2. 微信推薦我們從后臺生成訂單蜓谋,然后再通過app調(diào)起微信進行支付梦皮,其實也可以App里面就生成訂單,然后Appc里面進行支付桃焕。兩種都是可行的剑肯,但是大多數(shù)App并不是簡簡單單的支付,可能還要數(shù)據(jù)庫入庫覆旭,或者進行一些其他的操作退子,通過后臺生成訂單就比較好岖妄,大家可以根據(jù)自己的需求型将,選擇適合自己的。3. 當訂單生成之后荐虐,我們需要拼接調(diào)起微信支付的請求PayReq: ```javaPayReq request = new PayReq(); request.appId = object.getString("appId"); request.partnerId = object.getString("partnerId"); request.prepayId = object.getString("prepayId"); request.packageValue = object.getString("package"); request.nonceStr = object.getString("nonceStr"); request.timeStamp = object.getString("timeStamp"); request.sign = object.getString("sign"); api.sendReq(request); ```? **通過api.sendReq(),我們就能調(diào)起微信進行支付啦七兜。一般情況下還是比較容易調(diào)起 的,如果沒反應(yīng)福扬,請檢查自己的APP_ID腕铸,然后在檢查一下自己的PayReq惜犀,然后在檢查一下,是否添加了必須的權(quán)限狠裹。**? 4. 微信成功調(diào)起虽界,輸入密碼成功支付之后,如果我們想要知道微信支付的結(jié)果涛菠,就必須在應(yīng)用包名下莉御,新建一個wxapi的包,然后新建一個WXPayEntryActivity俗冻,重點注意包名和activity的名字不要寫錯礁叔,微信是通過包名加activity的名稱通過反射跳轉(zhuǎn)到該頁面。這樣還不夠迄薄,需要實現(xiàn)微信定義的IWXAPIEventHandler琅关,重寫onResp和onReq,在onReq里面我們可以對app發(fā)送到微信的請求做些處理讥蔽,在onResp我們可以接收到微信返回的結(jié)果涣易。返回結(jié)果bean里面的errCode比較簡單,0代表成功都毒,-1代表失敗碰缔,-2代表取消金抡。這樣還不夠,還要調(diào)用iwxapi.handleIntent(getIntent(), this)在能正真的接收到微信返回的消息榛瓮。如果沒能成功的接收到微信返回的消息禀晓,依次檢查包名activity名是否與規(guī)定的不符坝锰,檢查是否在AndroidMianfest里面注冊了activity顷级,然后是否調(diào)用了iwxapi.handleIntent(getIntent(), this)。###以上就是微信支付的總結(jié)帽芽,主要注意1. 權(quán)限是否添加2. **wxapi和WXPayEntryActivity的包名是否正確**3. **在 WXPayEntryActivity里面是否調(diào)用了iwxapi.handleIntent(getIntent(), this)**## 微信分享1. 首先檢測手機是否安裝了微信,通過微信自定義的方法```javaIWXAPI api = WXAPIFactory.createWXAPI(context, AppConfig.WEIXIN_PAY_ID, false);? if (api.isWXAppInstalled() && api.isWXAppSupportAPI()) {? ? ? ? flag = true;? ? }```>api.isWXAppInstalled()返回微信是否安裝>api.isWXAppSupportAPI()返回微信是否支持支付2. 在初始化了api之后披泪,我們需要把應(yīng)用注冊到微信`api.registerApp(AppConfig.WEIXIN_PAY_ID);`3. 下面就是創(chuàng)建WXobject和wxMessage付呕,說明文檔上有具體的代碼跌捆,分享文字佩厚,圖片,音頻等詳細代碼潮瓶,我就不一一重述了毯辅,大家自己去微信開放平臺查看代碼煞额。通過api.sendReq(req)我們就能調(diào)起微信分享的界面膊毁。4. 跟微信支付一樣,我們 需要在wxapi包下面新建一個WXEntryActivity描焰,并且實現(xiàn)IWXAPIEventHandler才能接收到是否分享成功荆秦。###如果沒有分享成功力图,依次檢查:1. **分享之前時候注冊了應(yīng)用到微信**```javaapi.registerApp(AppConfig.WEIXIN_PAY_ID);```2. **WXEntryActivity是否注冊了**3. **是否添加了必要的權(quán)限**## QQ分享1. 首先導(dǎo)入必須的mta_sdk.jar和open_sdk.jar2. AndroidManifest里面添加3. Tencent是QQ的入口搪哪,需要實例化Tencent:`Tencent:mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());`4. 實現(xiàn)回調(diào):IUiListener,QQ的所有操作都是通過這個回調(diào)的晓折,如果要想接收到QQ的回調(diào),還需要重寫onActivityRes###如果沒有分享成功漾月,依次檢查:1. **是否添加必要的權(quán)限**2. **是否在Manifest里面注冊了必要的activity梁肿,重點注意的是觅彰,這里以Tencent 開頭,后面的數(shù)字是自己申請的appkey烛芬,當初就是這里沒有處理赘娄,導(dǎo)致QQ一直無法調(diào)起**3. **如果分享成功宏蛉,但是不能接收到回調(diào)拾并,檢查是否重寫了onActivityResult()**## 微博分享#####微博里面文檔比較全,他涉及到的東西也非常多个榕,我們移動app比較關(guān)注的是他的分享和登陸芥喇。 1. 導(dǎo)入jar包和so庫 2. 在Manifest里面添加:? ```xml```? ? ? >這是微博自帶的有個webview,當你手機沒有安裝微博的時候械馆,可以通過H5實現(xiàn)分享和登陸霹崎。如果沒有注冊的話冶忱,當沒安裝微博客戶端的時候,無法調(diào)起微博H5頁面派诬; 3. 實現(xiàn)IWeiboHandler.Response接口默赂,用于接收微博分享的結(jié)果 4. 實例化IWeiboShareAPI缆八、注冊,處理微博分享 的結(jié)果:? ```java mWeiboShareAPI=WeiboShareSDK.createWeiboAPI(context.getApplicationContext(), AppConfig.WEIBO_APPID);? ? ? ? mWeiboShareAPI.registerApp(); mWeiboShareAPI.handleWeiboResponse(getIntent(), this);//處理微博分享的結(jié)果栏妖; ```###如果沒有分享成功底哥,一次檢查:1. 因為微博審核比較嚴格趾徽,只有當審核通過之后才能分享成功翰守,有可能并不是你的代碼問題蜡峰,而是審核沒有通過湿颅,導(dǎo)致分享失敗2. 在沒有安裝微博的情況下,不能跳到微博分享的H5,檢查Manifest里面是否注冊了微博的H5 webview;3. 添加必須的權(quán)限**下面分享我自己寫的一個ShareUtils崭庸,里面實現(xiàn)了QQ怕享,微信函筋,微博分享跌帐,大家可以自行下載對照。```javaimport android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.widget.Toast;import com.sina.weibo.sdk.api.TextObject;import com.sina.weibo.sdk.api.WebpageObject;import com.sina.weibo.sdk.api.WeiboMessage;import com.sina.weibo.sdk.api.WeiboMultiMessage;import com.sina.weibo.sdk.api.share.IWeiboShareAPI;import com.sina.weibo.sdk.api.share.SendMessageToWeiboRequest;import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;import com.sina.weibo.sdk.api.share.WeiboShareSDK;import com.sina.weibo.sdk.auth.AuthInfo;import com.sina.weibo.sdk.auth.Oauth2AccessToken;import com.sina.weibo.sdk.auth.WeiboAuthListener;import com.sina.weibo.sdk.exception.WeiboException;import com.sina.weibo.sdk.utils.Utility;import com.tencent.connect.common.Constants;import com.tencent.connect.share.QQShare;import com.tencent.connect.share.QzoneShare;import com.tencent.mm.sdk.modelmsg.SendMessageToWX;import com.tencent.mm.sdk.modelmsg.WXMediaMessage;import com.tencent.mm.sdk.modelmsg.WXWebpageObject;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.WXAPIFactory;import com.tencent.tauth.IUiListener;import com.tencent.tauth.Tencent;import java.io.ByteArrayOutputStream;import java.util.ArrayList;public class ShareUtils {? ? private static final String PREFERENCES_NAME = "com_weibo_sdk_android";? ? private static final String KEY_UID = "uid";? ? private static final String KEY_ACCESS_TOKEN = "access_token";? ? private static final String KEY_EXPIRES_IN = "expires_in";? ? private static final String KEY_REFRESH_TOKEN = "refresh_token";? ? public static boolean isWeiXinInstallAndSupport(Context context) {? ? ? ? boolean flag = false;? ? ? ? IWXAPI api = WXAPIFactory.createWXAPI(context, AppConfig.WEIXIN_PAY_ID, false);? ? ? ? if (api.isWXAppInstalled() && api.isWXAppSupportAPI()) {? ? ? ? ? ? flag = true;? ? ? ? }? ? ? ? return flag;? ? }? ? /**? ? * @param context? ? * @param type? ? 1:分享到朋友圈? ? ? ? ? ? 2:分享到微信好友? ? * @param title? 標題? ? * @param url? ? 跳轉(zhuǎn)url? ? * @param imageId 圖片id? ? */? ? public static void shareToWeChat(Context context, int type, String title, String url, int imageId) {? ? ? ? IWXAPI api = WXAPIFactory.createWXAPI(context, AppConfig.WEIXIN_PAY_ID);? ? ? ? api.registerApp(AppConfig.WEIXIN_PAY_ID);? ? ? ? Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), imageId);? ? ? ? Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 150, 150, true);? ? ? ? bitmap.recycle();? ? ? ? WXWebpageObject webpageObject = new WXWebpageObject();? ? ? ? webpageObject.webpageUrl = url;? ? ? ? WXMediaMessage msg = new WXMediaMessage();? ? ? ? msg.mediaObject = webpageObject;? ? ? ? msg.title = title;? ? ? ? msg.thumbData = bmpToByteArray(thumbBmp, true);? ? ? ? SendMessageToWX.Req req = new SendMessageToWX.Req();? ? ? ? req.message = msg;? ? ? ? req.transaction = System.currentTimeMillis() + "";? ? ? ? req.scene = type == 1 ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;? ? ? ? api.sendReq(req);? ? }? ? /**? ? * @param context? ? * @param title? ? ? 標題? ? * @param description 描述? ? * @param url? ? ? ? 跳轉(zhuǎn)URL? ? * @param imageUrl? ? 圖片鏈接? ? * @param callBack? ? */? ? public static void shareToQQ(Tencent mTencent, Context context, String title, String description, String url, String imageUrl, IUiListener callBack) {? ? ? ? Bundle params = new Bundle();? ? ? ? params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);? ? ? ? params.putString(QQShare.SHARE_TO_QQ_TITLE, title);? ? ? ? params.putString(QQShare.SHARE_TO_QQ_SUMMARY, description);? ? ? ? params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, url);? ? ? ? params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, imageUrl);? ? ? ? params.putString(QQShare.SHARE_TO_QQ_APP_NAME, App名字);? ? ? ? mTencent.shareToQQ((Activity) context, params, callBack);? ? }? ? /**? ? * @param context? ? * @param picLists? ? 圖片arraylist,可以分享多張圖片? ? * @param title? ? ? 標題? ? * @param description 描述? ? * @param url? ? ? ? 跳轉(zhuǎn)url? ? * @param callBack? ? */? ? public static void shareToZone(Context context, ArrayListpicLists, String title, String description, String url, IUiListener callBack) {

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肥惭,一起剝皮案震驚了整個濱河市蜜葱,隨后出現(xiàn)的幾起案子牵囤,更是在濱河造成了極大的恐慌揭鳞,老刑警劉巖野崇,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乓梨,死亡現(xiàn)場離奇詭異扶镀,居然都是意外死亡臭觉,警方通過查閱死者的電腦和手機辱志,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門菱肖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稳强,“玉大人退疫,你說我怎么就攤上這事褒繁“艋担” “怎么了坝冕?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵测暗,是天一觀的道長碗啄。 經(jīng)常有香客問我稚字,道長尉共,這世上最難降的妖魔是什么袄友? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上目尖,老公的妹妹穿的比我還像新娘瑟曲。我一直安慰自己洞拨,他們只是感情好歹河,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寥茫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪险耀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天贬派,我揣著相機與錄音,去河邊找鬼。 笑死侍筛,一個胖子當著我的面吹牛匣椰,可吹牛的內(nèi)容都是我干的弛车。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芦疏,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎薪捍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晴裹,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡被济,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了息拜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溉潭。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖少欺,靈堂內(nèi)的尸體忽然破棺而出喳瓣,到底是詐尸還是另有隱情,我是刑警寧澤赞别,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布畏陕,位于F島的核電站,受9級特大地震影響仿滔,放射性物質(zhì)發(fā)生泄漏惠毁。R本人自食惡果不足惜犹芹,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鞠绰。 院中可真熱鬧腰埂,春花似錦、人聲如沸蜈膨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翁巍。三九已至驴一,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灶壶,已是汗流浹背肝断。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驰凛,地道東北人胸懈。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像洒嗤,于是被迫代替她去往敵國和親箫荡。 傳聞我的和親對象是個殘疾皇子魁亦,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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