效果
![Android分享到微信好友、朋友圈 Android分享到微信好友、朋友圈](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzg4LzllZWMzMjYyMmJhNzU1NDdmZDE0YmRlYmQwZjEwZWEwLnBuZw==)
介绍
要实现微信分享,首先请认真阅读微信开放平台官网的Android接入指南。
然后,在开讲之前,我们必须明确一个前提,那就是微信Android API调用是需要严格的三个验证的,只有当app_id,包名和应用签名完全对了的情况下才可以调得通,即你的应用里的这三个地方必须和你申请的应用都能够一一对应上,只要有任意一个地方对不上,那么微信分享就永远调不起来。
![Android分享到微信好友、朋友圈 Android分享到微信好友、朋友圈](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzgzMS82NjI1MWEzYjE2Y2I0N2VlNGZiNGJkNjUxZjI2NDhkZi5wbmc=)
前两步应该没什么问题,关键就是保证应用签名能够对应上,而应用签名是随着keystore的不同而不同的,所以有两种情况需要特别注意:
1.不同电脑上都会有一个默认的keystore,我们平时直接在电脑上运行调试时用的就是那个默认的debug.keystore,所以,当你将你原本可运行的项目迁移到另一台电脑后,必须将微信开发平台上的应用签名改为你这台电脑上对应的MD5
fingerprint(去掉所有冒号),或者将那台电脑上的debug.keystore复制过来,设置为你自己的Custom debug keystore;
2.打包应用时往往是用了自定义的一个keystore,所以打包出来后,为了保证微信分享的功能继续可用,也需要将微信开发平台上的应用签名改为你自定义的keystore所对应的MD5 fingerprint;
实现
初始化分享对话框,设置样式、位置、动画以及点击事件
-
private Dialog dlgShare;
-
-
private void initShareDlg() {
-
// TODO 自动生成的方法存根
-
/* 设置对话框样式 */
-
View root = getLayoutInflater().inflate(R.layout.dlg_share_way, null);
-
dlgShare = new Dialog(this, R.style.CustomDialogTheme);
-
dlgShare.setContentView(root);
-
-
/* 设置对话框宽高 */
-
Window window = dlgShare.getWindow();
-
WindowManager.LayoutParams lp = window.getAttributes();
-
lp.height = LayoutParams.WRAP_CONTENT;
-
lp.width = LayoutParams.MATCH_PARENT;
-
window.setAttributes(lp);
-
-
window.setGravity(Gravity.BOTTOM); // 设置对话框位置
-
window.setWindowAnimations(R.style.CustomDialogAnim);// 设置对话框动画
-
-
root.findViewById(R.id.tv_wechat_friend).setOnClickListener(
-
new OnClickListener() {
-
-
@Override
-
public void onClick(View v) {
-
// TODO 自动生成的方法存根
-
dlgShare.dismiss();
-
shareToWeChat(ABOUT_WEB_URL + "?&", WX_SCENE_SESSION);
-
}
-
});
-
-
root.findViewById(R.id.tv_wechat_timelinde).setOnClickListener(
-
new OnClickListener() {
-
-
@Override
-
public void onClick(View v) {
-
// TODO 自动生成的方法存根
-
dlgShare.dismiss();
-
shareToWeChat(ABOUT_WEB_URL + "?&", WX_SCENE_TIMELINE);
-
}
-
});
-
-
root.findViewById(R.id.tv_quit_share).setOnClickListener(
-
new OnClickListener() {
-
-
@Override
-
public void onClick(View v) {
-
// TODO 自动生成的方法存根
-
dlgShare.dismiss();
-
}
-
});
-
}
将微信分享示例Demo的主要实现提取出来,包括
1.将应用的appId注册到微信
2.因为这里我分享的是一个网页,所以我构造了一个WXWebpageObject
3.初始化一个WXMediaMessage,设置mediaObject为我前面构造的WXWebpageObject
4.构造一个Req,通过sence判断是分享到微信好友或朋友圈,然后将该请求发送到微信
-
public static final String APP_ID = "wxd7f6861481765b04";
-
public static final int WX_SCENE_SESSION = 0;
-
public static final int WX_SCENE_TIMELINE = 1;
-
-
public void shareToWeChat(String url, int scene) {
-
-
// 获取IWXAPI实例,IWXAPI是第三方app和微信通信的openapi接口
-
IWXAPI api = WXAPIFactory.createWXAPI(getApplicationContext(), APP_ID,
-
false);
-
// 将应用的appId注册到微信
-
api.registerApp(APP_ID);
-
-
// 网页
-
WXWebpageObject webPageObj = new WXWebpageObject();
-
webPageObj.webpageUrl = url;
-
-
// 用WXTextObject对象初始化一个WXMediaMessage对象
-
WXMediaMessage msg = new WXMediaMessage();
-
// msg.mediaObject = textObj;
-
msg.mediaObject = webPageObj;
-
// 发送文本类型的消息时,title字段不起作用
-
msg.title = "云球-专业足球App";
-
msg.description = "专业足球的数据统计,深入草根的社交平台,数据、足球连接你我";
-
-
// 构造一个Req
-
SendMessageToWX.Req req = new SendMessageToWX.Req();
-
req.transaction = String.valueOf(System.currentTimeMillis()); // transaction字段用于唯一标识一个请求
-
req.message = msg;
-
if (scene == WX_SCENE_SESSION)
-
req.scene = SendMessageToWX.Req.WXSceneSession; // 微信好友
-
else if (scene == WX_SCENE_TIMELINE)
-
req.scene = SendMessageToWX.Req.WXSceneTimeline; // 朋友圈
-
-
// 调用api接口发送数据到微信
-
api.sendReq(req);
-
}
源码
http://download.csdn.net/detail/alfred_c/9256019
请先将压缩包里的debug.keystore设置为你自己的Custom debug keystore
![Android分享到微信好友、朋友圈 Android分享到微信好友、朋友圈](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzE3LzJlZDZlNjE0MDg0NzRjOWI4YjMxOGQ2Y2Y0YTJkZjAxLnBuZw==)