干货二:微信SDK-分享初探-更新中
微信開放平臺簡介
官方網址:
微信開放平臺
在這里我們只探討移動應用開發~
當我們的客戶端接入微信之后,可以:
- 分享文本
- 分享圖片
- 分享聲音
- 分享連接
- 分享APP
開發前提:
- 注冊一個開發者賬號
- 至少申請一個APP
注冊與申請
注冊
登錄 微信開放平臺,注冊開發者賬號:
根據引導,完成注冊即可。
提交申請
使用注冊的開發者賬號登錄后:
創建應用:
接下來就等著微信審核了,上傳圖標的時候,我用了微信的案例圖標,不知道會不會審核不通過 o(╯□╰)o
果然被槍斃了….
換logo
簡單粗暴制作符合微信要求的logo
百度上搞了個512×512的png圖片,微信要求大圖108*108像素 ,小圖28*28像素
看動畫~
同樣的方式制作28*28像素的png圖片
如何生成應用簽名
官方提供了簽名工具,現在后安裝到手機上,如下所示:
將你的APP安裝到手機上, 接著輸入你的包名(如果未安裝 根據包名查找 無法生成應用簽名)
工程目錄:
包名需要保持一致,否則無法調用微信的API。
歲月靜好 不到1個小時就審核通過了
特別注意:
- 在申請應用的時候填寫的應用簽名,這個簽名是由應用的簽名文件keystore決定的,在填這個簽名的時候,一定要用正式的keyStore生成apk,安裝到手機,然后用微信提供的獲取應用簽名的apk工具獲取你應用的簽名,然后這會生成的這個簽名才是正確的,千萬記得,不要使用debug的ketStore測試,雖然可以修改,但是還是要微信審核,就不要給自己添麻煩了。
- 在測試微信分享的時候,如果你直接在Android Studio運行項目,那樣使用的肯定是debug的keyStore了,這樣分享的時候會被微信拒絕,微信會生成緩存,即便后來你更換了正式的keystore來分享顯示的還會是被微信拒絕,就算重啟微信重啟手機也不管用,那你就要清空微信的數據了,造成數據的丟失….
那問題來了 怎么才能搞成正式版的呢?請看下圖:
切記,之前我都是直接運行程序安裝到手機,結果分享,一閃而過…..
生成APK后,安裝到手機,再分享下,good ,233333333333….
添加微信SDK到工程
微信SDK下載
下載解壓后,我們可以看到
doc使用文檔和lib包
你也可以順便下載官方提供的范例代碼以便快速上手。
微信SDK引用到AS工程
第一種方式:
將lib包下的libammsdk.jar復制到你的AS工程lib目錄下,如下所示:
然后在AS項目中引用即可,選中項目 F4快捷鍵打開Module設置(或者右鍵-Open Module Settings ),添加jar.
第二種方式:
- 復制jar,到app— —src— —main— —libs文件夾下
- 在AS工程中右鍵點擊要添加的jar,在彈出菜單中點擊Add As Library.
- 檢查下工程的build.gradle文件,如下所示(一般都是AS自動完成的,無需手工添加,檢查下即可):
compile files('libs/libammsdk.jar'
截至到此,我們就可以在我們程序中使用微信SDK提供的API了。
如何使用
官方指導
如何使用API? 當然還是官方的指導文檔了
請查看
根據說明文檔:
- 1.申請你的AppID—-DONE
- 2.下載微信終端開發工具包—-DONE
- 3.搭建開發環境(這里我們在AS中搭建)—-DONE
包括新建工程,添加jar包依賴,清單文件配置權限
- 4.在代碼中使用開發工具包即可
我們分別就常用的幾個功能做下演示
啟動微信客戶端
在這里我們需要使用我們之前申請的APP_ID
在 管理中心-移動應用-your APP -查看
這里我將APP_ID封裝到了Constants類中。
很簡單,代碼中的注釋已經很明白了
Code
package com.turing.share;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Toast;import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.WXAPIFactory;public class MainActivity extends AppCompatActivity {// IWXAPI 是第三方app和微信通信的openapi接口private IWXAPI api;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 通過WXAPIFactory工廠,獲取IWXAPI的實例api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);}/*** 啟動微信** @param view*/public void launch_wx(View view) {//api.openWXApp() 查看官方的API文檔可知:true if launchedToast.makeText(MainActivity.this, "launch result = " + api.openWXApp(), Toast.LENGTH_SHORT).show();} }運行圖
如果你已經登陸了,就會直接進入主頁面了。我這里并沒有登錄~
分享文本到好友或朋友圈
TIP:記得使用release版本來測試 親
Code
核心代碼:
/*** 發送文本到微信** @param view*/public void send_text(View view) {// 初始化一個EditTextfinal EditText editText = new EditText(this);// 組件的寬高是必須要指定的 LayoutParams包含了布局的信息editText.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));// 設置文本editText.setText(R.string.send_text_default);// 初始化對話框new AlertDialog.Builder(this).setIcon(R.drawable.flag_mark_blue).setTitle("小工匠").setMessage("小工匠的分享")// 設置自定義布局.setView(editText).setPositiveButton("分享", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Log.d("TAG", "分享");String text = editText.getText().toString();if (text == null || text.length() == 0) {return;}// 初始化一個WXTextObject對象WXTextObject textObj = new WXTextObject();textObj.text = text;// 用WXTextObject對象初始化一個WXMediaMessage對象WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = textObj;// 發送文本類型的消息時,title字段不起作用// msg.title = "Will be ignored";msg.description = text;// 構造一個ReqSendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("text"); // transaction字段用于唯一標識一個請求req.message = msg;// 發送給朋友還是朋友圈req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;// 調用api接口發送數據到微信 成功返回trueapi.sendReq(req);finish();}}).setNegativeButton("取消", null).create().show();}運行圖
分享圖片到好友或朋友圈
發送圖片的二進制數據
/*** 發送圖片的二進制數據*/private void sendBinaryImg() {Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.girl);WXImageObject imgObj = new WXImageObject(bmp);WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = imgObj;//壓縮圖片Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);// 釋放圖像bmp占用的資源bmp.recycle();// 將bitmap轉化成二進制的數組msg.thumbData = Util.bmpToByteArray(thumbBmp, true); // 設置縮略圖SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("img");req.message = msg;req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;api.sendReq(req);finish();} /*** 注意 CompressFormat.JPEG ,因為我要傳的圖片是JPEG格式的。* 如果是PNG格式的,需要寫成CompressFormat.JPEG* 否則無法分享成功* @param bmp* @param needRecycle* @return*/public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {ByteArrayOutputStream output = new ByteArrayOutputStream();bmp.compress(CompressFormat.JPEG, 100, output);if (needRecycle) {bmp.recycle();}byte[] result = output.toByteArray();try {output.close();} catch (Exception e) {e.printStackTrace();}return result;}注意事項:
需要格外注意compress方法中的參數。一定要對應你分享的圖片的格式,否則無法完成分享
發送圖片的本地路徑
發送圖片的URL
- 此方法必須在一個新的線程中調用,不能直接在UI線程中調用
- 圖片的分享:圖片包括本地圖片(可以是二進制數據也可以是一個url)、網絡圖片。此處特別注意圖片的大小微信有限制不能超過32k.
前人才的坑
總結
以上是生活随笔為你收集整理的干货二:微信SDK-分享初探-更新中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干货一:通过自定义PopupWindow
- 下一篇: 干货三:CountDownTimer倒计