您的位置:首页 > 移动开发 > 微信开发

微信分享官方第三方接入(图片及文字)

2016-05-29 14:41 936 查看
微信分享官方第三方接入:

第一步、官方接入文档必须要读的。

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN

第二步、导入jar包



第三步、权限支持。在AndroidManifest.xml中

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

第四步、注册到微信。

// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;wxapi = WXAPIFactory.createWXAPI(getApplicationContext(),
Constants.APP_ID);
// 将该app注册到微信
<span style="white-space:pre">			</span>    api.registerApp(Constants.APP_ID);   
若不加这句,则可能需要用签名包才能注册 
第五步、分享一条文本消息。

sendResp是微信向第三方app请求数据,第三方app回应数据之后会切回到微信界面。

本次我们使用sendReq是第三方app主动发送消息给微信,发送完成之后会切回到第三方app界面。

举个栗子:

Override
public void onClick(DialogInterface dialog, int which) {
String text = editor.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;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求
req.message = msg;
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline: 	SendMessageToWX.Req.WXSceneSession;
// 调用api接口发送数据到微信
api.sendReq(req);
finish();
}
}, null);
}
});

基本上。完成上面的操作就可以分享文字到微信了。

第五步、分享图片到微信。

普通图片不多说,说下截图分享。直接上代码:

/**
* 分享一个图片
*
* @author YOLANDA
* @param wxApi
* @param shareBitmap
*            要分享的图片
* @param isToFriend
*            是否是分享到朋友圈
*/
public static void shareImg(IWXAPI wxApi, Bitmap shareBitmap,
boolean isToFriend, String title, String content) {
WXImageObject imgObj = new WXImageObject(shareBitmap);

WXMediaMessage msg = new WXMediaMessage();
if (TextUtils.isEmpty(title)) {
title = content;
} else {
if (TextUtils.isEmpty(title.trim())) {
title = content;
}
}
msg.title = title;
msg.description = content;
msg.mediaObject = imgObj;

Bitmap thumbBmp = Bitmap.createScaledBitmap(shareBitmap, MeasureSpec
.makeMeasureSpec(shareBitmap.getWidth() / 10,
MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(
shareBitmap.getHeight() / 10, MeasureSpec.UNSPECIFIED), true);
msg.thumbData = bmpToByteArray(thumbBmp); // 设置缩略图

SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = isToFriend ? SendMessageToWX.Req.WXSceneTimeline
: SendMessageToWX.Req.WXSceneSession;
wxApi.sendReq(req);
}


/**
* 得到Bitmap的byte
*
* @author YOLANDA
* @param bmp
* @param needRecycle
* @return
*/
private static byte[] bmpToByteArray(Bitmap bmp) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 100, output);

byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}


/**
* 构建一个唯一标志
*
* @author YOLANDA
* @param type
* @return
*/
private static String buildTransaction(String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis())
: (type + System.currentTimeMillis());
}


注意一:

SendMessageToWX.Req.WXSceneTimeline
SendMessageToWX.Req.WXSceneSession
SendMessageToWX.Req的scene成员,如果scene填WXSceneSession,那么消息会发送至微信的会话内。

如果scene填WXSceneTimeline(微信4.2以上支持,如果需要检查微信版本支持API的情况,
可调用IWXAPI的getWXAppSupportAPI方法,0x21020001及以上支持发送朋友圈),那么消息会发送至朋友圈。

scene默认值为WXSceneSession。

注意二、如果分享的时候出现闪一下没有任何反应。

去微信官网,注册appID,用正确的APPID,绑定成功再试试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: