Android分享到微信好友、朋友圈

Android分享到微信好友、朋友圈

标签: Android开发微信分享
2015-11-09 21:41  610人阅读  评论(0)  收藏  举报
  分类:

效果

        

      


介绍

要实现微信分享,首先请认真阅读微信开放平台官网的Android接入指南

然后,在开讲之前,我们必须明确一个前提,那就是微信Android  API调用是需要严格的三个验证的,只有当app_id,包名应用签名完全对了的情况下才可以调得通,即你的应用里的这三个地方必须和你申请的应用都能够一一对应上,只要有任意一个地方对不上,那么微信分享就永远调不起来。


前两步应该没什么问题,关键就是保证应用签名能够对应上,而应用签名是随着keystore的不同而不同的,所以有两种情况需要特别注意:

1.不同电脑上都会有一个默认的keystore,我们平时直接在电脑上运行调试时用的就是那个默认的debug.keystore,所以,当你将你原本可运行的项目迁移到另一台电脑后,必须将微信开发平台上的应用签名改为你这台电脑上对应的MD5 fingerprint(去掉所有冒号),或者将那台电脑上的debug.keystore复制过来,设置为你自己的Custom debug keystore;

2.打包应用时往往是用了自定义的一个keystore,所以打包出来后,为了保证微信分享的功能继续可用,也需要将微信开发平台上的应用签名改为你自定义的keystore所对应的MD5 fingerprint;

实现

初始化分享对话框,设置样式、位置、动画以及点击事件

  1. private Dialog dlgShare;  
  2.   
  3.     private void initShareDlg() {  
  4.         // TODO 自动生成的方法存根  
  5.         /* 设置对话框样式 */  
  6.         View root = getLayoutInflater().inflate(R.layout.dlg_share_way, null);  
  7.         dlgShare = new Dialog(this, R.style.CustomDialogTheme);  
  8.         dlgShare.setContentView(root);  
  9.   
  10.         /* 设置对话框宽高 */  
  11.         Window window = dlgShare.getWindow();  
  12.         WindowManager.LayoutParams lp = window.getAttributes();  
  13.         lp.height = LayoutParams.WRAP_CONTENT;  
  14.         lp.width = LayoutParams.MATCH_PARENT;  
  15.         window.setAttributes(lp);  
  16.   
  17.         window.setGravity(Gravity.BOTTOM); // 设置对话框位置  
  18.         window.setWindowAnimations(R.style.CustomDialogAnim);// 设置对话框动画  
  19.   
  20.         root.findViewById(R.id.tv_wechat_friend).setOnClickListener(  
  21.                 new OnClickListener() {  
  22.   
  23.                     @Override  
  24.                     public void onClick(View v) {  
  25.                         // TODO 自动生成的方法存根  
  26.                         dlgShare.dismiss();  
  27.                         shareToWeChat(ABOUT_WEB_URL + "?&", WX_SCENE_SESSION);  
  28.                     }  
  29.                 });  
  30.   
  31.         root.findViewById(R.id.tv_wechat_timelinde).setOnClickListener(  
  32.                 new OnClickListener() {  
  33.   
  34.                     @Override  
  35.                     public void onClick(View v) {  
  36.                         // TODO 自动生成的方法存根  
  37.                         dlgShare.dismiss();  
  38.                         shareToWeChat(ABOUT_WEB_URL + "?&", WX_SCENE_TIMELINE);  
  39.                     }  
  40.                 });  
  41.   
  42.         root.findViewById(R.id.tv_quit_share).setOnClickListener(  
  43.                 new OnClickListener() {  
  44.   
  45.                     @Override  
  46.                     public void onClick(View v) {  
  47.                         // TODO 自动生成的方法存根  
  48.                         dlgShare.dismiss();  
  49.                     }  
  50.                 });  
  51.     }  

将微信分享示例Demo的主要实现提取出来,包括

1.将应用的appId注册到微信

2.因为这里我分享的是一个网页,所以我构造了一个WXWebpageObject

3.初始化一个WXMediaMessage,设置mediaObject为我前面构造的WXWebpageObject

4.构造一个Req,通过sence判断是分享到微信好友或朋友圈,然后将该请求发送到微信


  1. public static final String APP_ID = "wxd7f6861481765b04";  
  2.     public static final int WX_SCENE_SESSION = 0;  
  3.     public static final int WX_SCENE_TIMELINE = 1;  
  4.   
  5.     public void shareToWeChat(String url, int scene) {  
  6.   
  7.         // 获取IWXAPI实例,IWXAPI是第三方app和微信通信的openapi接口  
  8.         IWXAPI api = WXAPIFactory.createWXAPI(getApplicationContext(), APP_ID,  
  9.                 false);  
  10.         // 将应用的appId注册到微信  
  11.         api.registerApp(APP_ID);  
  12.   
  13.         // 网页  
  14.         WXWebpageObject webPageObj = new WXWebpageObject();  
  15.         webPageObj.webpageUrl = url;  
  16.   
  17.         // 用WXTextObject对象初始化一个WXMediaMessage对象  
  18.         WXMediaMessage msg = new WXMediaMessage();  
  19.         // msg.mediaObject = textObj;  
  20.         msg.mediaObject = webPageObj;  
  21.         // 发送文本类型的消息时,title字段不起作用  
  22.         msg.title = "云球-专业足球App";  
  23.         msg.description = "专业足球的数据统计,深入草根的社交平台,数据、足球连接你我";  
  24.   
  25.         // 构造一个Req  
  26.         SendMessageToWX.Req req = new SendMessageToWX.Req();  
  27.         req.transaction = String.valueOf(System.currentTimeMillis()); // transaction字段用于唯一标识一个请求  
  28.         req.message = msg;  
  29.         if (scene == WX_SCENE_SESSION)  
  30.             req.scene = SendMessageToWX.Req.WXSceneSession; // 微信好友  
  31.         else if (scene == WX_SCENE_TIMELINE)  
  32.             req.scene = SendMessageToWX.Req.WXSceneTimeline; // 朋友圈  
  33.   
  34.         // 调用api接口发送数据到微信  
  35.         api.sendReq(req);  
  36.     }  

源码

http://download.csdn.net/detail/alfred_c/9256019

请先将压缩包里的debug.keystore设置为你自己的Custom debug keystore