在APP中集成微信的分享功能,官方的說明是在太簡潔了.....幾乎沒法用....
不過一開始按照官方文檔去做沒問題
1.注冊你的APP
登錄 微信開放平臺 把你的開發者信息填上,這些就不上圖了,都是中文字,應該看得懂
然后進入 管理中心 點擊創建++移動應用++
把你的應用信息填上,有些項目不知道怎么填隨便填就行了,但是注意: 應用的包名和簽名不能隨便填!!
- 包名就是你的應用的包名例如: fucker.idiot.asshole.wanker
怎么獲取簽名?
先下載微信提供的一些工具
首先將你的app安裝在手機或者模擬器上,
由于平時我們調試軟件都是使用debug的簽名生成應用,所以我們要特別注意如果使用了debug的簽名,等到APP正式發布的時候,微信的分享就不能用了.
所以我們要使用release的簽名文件
怎么讓我們debug的時候也使用release的簽名文件呢?
打開應用Module的build.gradle文件 添加這樣一份代碼:
android {
signingConfigs{
debug{ //這里配置的就是debug的簽名配置了
storeFile file("C:\\Users\\Administrator\\.android\\asd") //這個文件是我的,改成你自己的release簽名文件
storePassword "asd123456" //密碼改成自己的
keyAlias "asd" //再改成你自己的
keyPassword "asd123456" //再改成你自己的
}
}
}
再使用工具包中的軟件便可以獲取到應用的簽名了,
填上應用的包名,然后"Get Signature"
綠色的字就是簽名
最后等待審核,可能要一兩天把...
通過審核是這樣的
當然要把 AppID 和 AppSecret 記錄下來,在代碼中需要使用
++注意如果臨時改變了簽名或者包名,當時還不能生效(也就是你APP用不了微信的功能了),可能得等個一天才能生效!!!!血的教訓!!++
2.添加依賴包
之前下載獲取簽名工具的時候就已經下載下來了
放入AS項目的libs文件夾中
添加依賴
3.向微信sdk注冊你的應用
在我自己寫的學習demo中,注冊是在一個單例模式的類中注冊的,只有在第一次使用的時候才會注冊,免得提早注冊了浪費資源
當然你也可以在application或者activity的oncrete中注冊,隨你!
private static final String APP_ID = "12312313212313213213"; //這個APP_ID就是注冊APP的時候生成的
private static final String APP_SECRET = "12312312313212313213213";
public IWXAPI api; //這個對象是專門用來向微信發送數據的一個重要接口,使用強引用持有,所有的信息發送都是基于這個對象的
public void registerWeChat(Context context) { //向微信注冊app
api = WXAPIFactory.createWXAPI(context, APP_ID, true);
api.registerApp(APP_ID);
}
4.發送圖片或文字,給朋友或者朋友圈
因為發文字,圖片,或者鏈接都是類同的程序,所以在這只舉一個發送圖片的例子
public void sharePicByFile(File picFile, String tag) {
if (!picFile.exists()) {return;}
Bitmap pic = BitmapFactory.decodeFile(picFile.toString());
WXImageObject imageObject = new WXImageObject(pic);
//這個構造方法中自動把傳入的bitmap轉化為2進制數據,或者你直接傳入byte[]也行
//注意傳入的數據不能大于10M,開發文檔上寫的
WXMediaMessage msg = new WXMediaMessage(); //這個對象是用來包裹發送信息的對象
msg.mediaObject = imageObject;
//msg.mediaObject實際上是個IMediaObject對象,
//它有很多實現類,每一種實現類對應一種發送的信息,
//比如WXTextObject對應發送的信息是文字,想要發送文字直接傳入WXTextObject對象就行
Bitmap thumbBitmap = Bitmap.createScaledBitmap(pic, 150, 150, true);
msg.thumbData = bitmap2ByteArray(thumbBitmap);
//在這設置縮略圖
//官方文檔介紹這個bitmap不能超過32kb
//如果一個像素是8bit的話換算成正方形的bitmap則邊長不超過181像素,邊長設置成150是比較保險的
//或者使用msg.setThumbImage(thumbBitmap);省去自己轉換二進制數據的過程
//如果超過32kb則拋異常
SendMessageToWX.Req req = new SendMessageToWX.Req(); //創建一個請求對象
req.message = msg; //把msg放入請求對象中
req.scene = SendMessageToWX.Req.WXSceneTimeline; //設置發送到朋友圈
//req.scene = SendMessageToWX.Req.WXSceneSession; //設置發送給朋友
req.transaction = tag; //這個tag要唯一,用于在回調中分辨是哪個分享請求
boolean b = api.sendReq(req); //如果調用成功微信,會返回true
}
調用這個方法之后會自動打開微信的界面,可以發送你要分享的信息了!
5.分享后的回調
微信只能回調指定包下的指定Activity!!!
所以一定要按照我下面的例子來寫
(1)創建包
在注冊的包名下面創建一個叫"wxapi"的包
package com.zhouyijin.zyj.fakeshanbay.wxapi;
(2)創建指定名字的Activity
創建一個Acitivty,必須是這個名字!#### (3)
public class WXEntryActivity extends AppCompatActivity {}
并在manifest文件中注冊!!!
<activity android:name=".wxapi.WXEntryActivity"
android:launchMode="singleTop"
android:exported="true"/> //注意這個屬性一定是true,不然微信不能調用
(3)處理回調
微信會把數據包裝在Intent中傳入這個"WXEntryActivity"中
我們不需要自己處理Intent,
只需要在這個activity中調用api.handleIntent(Intent intent, IWXAPIEventHandler i),
這個方法會自動調用 IWXAPIEventHandler 對象的 onResp(BaseResp resp) 方法
我們只需要把處理回調的邏輯寫進onResp(BaseResp resp) 方法中即可!
為了方便,我們使WXEntryActivity實現IWXAPIEventHandler的方法
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.entry);
WeChatModule.getInstance().api.handleIntent(getIntent(), this); //處理微信傳回的Intent,當然你也可以在別的地方處理
}
@Override
public void onResp(BaseResp resp) { //在這個方法中處理微信傳回的數據
//形參resp 有下面兩個個屬性比較重要
//1.resp.errCode
//2.resp.transaction則是在分享數據的時候手動指定的字符創,用來分辨是那次分享(參照4.中req.transaction)
switch (resp.errCode) { //根據需要的情況進行處理
case BaseResp.ErrCode.ERR_OK:
//正確返回
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//用戶取消
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
//認證被否決
break;
case BaseResp.ErrCode.ERR_SENT_FAILED:
//發送失敗
break;
case BaseResp.ErrCode.ERR_UNSUPPORT:
/不支持錯誤
break;
case BaseResp.ErrCode.ERR_COMM:
//一般錯誤
break;
default:
//其他不可名狀的情況
break;
}
}
@Override
public void onReq(BaseReq req) {
//......這里是用來處理接收的請求,暫不做討論
}
}
這里需要提醒下,因為微信只能回調這個Activity,如果不想把業務邏輯寫在這個Activity中,那么可以把具體邏輯再轉移到別的Activity中處理,如下:
@Override
public void onResp(BaseResp resp) {
Intent intent = new Intent(this, xxx.class);
intent.putExtra("errCode", resp.errCode);
intent.putExtra("errStr", resp.transaction);
startActivity(intent);
finish();
}
我寶貴的半天時間就浪費在這了,看過給個贊好嗎