Android微信分享功能集成开发指南(这一篇就够了)
前言
本文介绍的只是微信开发中的一个功能,分享。看到网上很多关于微信分享的博客、帖子,说实话,没几篇写的全的,很多都是复制粘贴,介绍的也不全,缺少代码的分析,关键性的代码总是漏一句两句,看着就很难受。所以,在这里我打算写一篇关于微信分享的博客,总结一下知识点,贴上详细的代码。学微信分享,这一篇就够了。
准备工作
1.微信开放平台申请应用,分享需要用到appId,这里注意了,申请时用到的是MD5值,而不是SHA1值(这里我就弄错过,导致分享一直都是失败,返回的状态码为-6)。不知道怎么在AS中得到签名信息的同学也不要紧,微信开放平台上有一个apk专门可以用来获取签名,这里附上链接点击前往。
2.在自定义的Application中的onCreate方法中,注册一下app,代码如下:
// 三个参数分别是上下文、应用的appId、是否检查签名(默认为false)
IWXAPI mWxApi = WXAPIFactory.createWXAPI(this, "你的appId", true);
// 注册
mWxApi.registerApp("你的appId");
3.微信分享是肯定需要请求网络的,所以要在manifests文件中允许网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
4.在app模块的build.gradle文件中,添加如下依赖:
dependencies {compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
或者
dependencies {compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
这两个依赖乍一看是一样的,区别在于,第一个是with,第二个是without。其中,第一个依赖包含统计功能。说实话,我也没用过它的统计功能,但是我一般都是依赖第一个,说不定什么时候就需要用到了呢。依赖好后,同步一下。
开始使用
微信分享,可以是纯文本类型、图片类型、音乐类型、视频类型、网页类型、小程序类型。这么多类型如何实现,微信开放平台上有完整的代码实现,只是少了一个参数,看过的同学就知道啦,老样子,还是附上链接点击前往。我的项目中用到的是网页类型,所以我下面贴出的也是分享网页类型的代码,如果需要用到别的类型的,去我上面的链接里看一下就清晰了,其实代码本质都是一样的,只是个别参数变了一下。我把请求的代码写到了一个工具类里,方便调用,下面附上代码:
public class WxShareUtils {/*** 分享网页类型至微信** @param context 上下文* @param appId 微信的appId* @param webUrl 网页的url* @param title 网页标题* @param content 网页描述* @param bitmap 位图*/public static void shareWeb(Context context, String appId, String webUrl, String title, String content, Bitmap bitmap) {// 通过appId得到IWXAPI这个对象IWXAPI wxapi = WXAPIFactory.createWXAPI(context, appId);// 检查手机或者模拟器是否安装了微信if (!wxapi.isWXAppInstalled()) {ToastUtil.makeText("您还没有安装微信");return;}// 初始化一个WXWebpageObject对象WXWebpageObject webpageObject = new WXWebpageObject();// 填写网页的urlwebpageObject.webpageUrl = webUrl;// 用WXWebpageObject对象初始化一个WXMediaMessage对象WXMediaMessage msg = new WXMediaMessage(webpageObject);// 填写网页标题、描述、位图msg.title = title;msg.description = content;// 如果没有位图,可以传null,会显示默认的图片msg.setThumbImage(bitmap);// 构造一个ReqSendMessageToWX.Req req = new SendMessageToWX.Req();// transaction用于唯一标识一个请求(可自定义)req.transaction = "webpage";// 上文的WXMediaMessage对象req.message = msg;// SendMessageToWX.Req.WXSceneSession是分享到好友会话// SendMessageToWX.Req.WXSceneTimeline是分享到朋友圈req.scene = SendMessageToWX.Req.WXSceneSession;// 向微信发送请求wxapi.sendReq(req);}
}
工具类写好了,最后只要在你需要的地方调用就行了。这里补充一下,得到本地的bitmap很简单,只要通过工厂类就能实现,如果是网络图片呢?不知道的继续往下看,我这里使用了Glide这个控件。这个控件有多NB,不需要我在这里展开说明了吧。Glide有个方法可以直接异步获取网络图片的位图(我这里使用的是4.0.0版本,别的版本大家可以去Github查看,看有没有变化),老样子,贴上代码:
Glide.with(this).asBitmap().load("图片url").into(new SimpleTarget<Bitmap>() {/*** 成功的回调*/@Overridepublic void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition) {// 下面这句代码是一个过度dialog,因为是获取网络图片,需要等待时间mDialog.dismiss();// 调用方法WxShareUtils.shareWeb(this, "你的appId","网页url", "网页标题", "网页描述",bitmap);}/*** 失败的回调*/@Overridepublic void onLoadFailed(@Nullable Drawable errorDrawable) {super.onLoadFailed(errorDrawable);mDialog.dismiss();WxShareUtils.shareWeb(this, "你的appId","网页url", "网页标题", "网页描述",null);}
});
这里还是需要补充一下,图片大小超过32KB(我记得没错应该是这个值),会导致分享界面调不起来,这里就需要压缩一下图片了,压缩图片的代码大家去网上找一下吧,以前我写过,但是暂时找不到了,怕网上随便找的有问题,误导大家,大家就辛苦一下自己找找吧,还是有很多的,基本没啥大问题。
收尾工作
在app模块包的根目录下新建一个wxapi的包,在这个包下面新建一个WXEntryActivity,这两步缺一不可,而且名字也要一模一样,不要问我为什么,微信规定的。
这个WXEntryActivity就是个普通的Activity,先贴上布局,其实就是一个最简单的空布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.constraint.ConstraintLayout>
下面就是这个Activity的代码:
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {private IWXAPI wxapi;@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);wxapi.handleIntent(intent, this);}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_wxentry);wxapi = WXAPIFactory.createWXAPI(this, "你的appId");wxapi.handleIntent(getIntent(), this);}/*** 微信发送请求到第三方应用时,会回调到该方法*/@Overridepublic void onReq(BaseReq baseReq) {// 这里不作深究}/*** 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法* app发送消息给微信,处理返回消息的回调*/@Overridepublic void onResp(BaseResp baseResp) {switch (baseResp.errCode) {// 正确返回case BaseResp.ErrCode.ERR_OK:switch (baseResp.getType()) {// ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX是微信分享,api自带case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX:// 只是做了简单的finish操作finish();break;default:break;}break;default:// 错误返回switch (baseResp.getType()) {// 微信分享case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX:Log.i("WXEntryActivity" , ">>>errCode = " + baseResp.errCode);finish();break;default:break;}break;}}
}
这样还没完,最后需要在manifests文件中申明这个Activity,代码如下(复制粘贴的话,把代码中的注释去掉就可以了):
<activity// 下面三行代码必须要有android:name=".wxapi.WXEntryActivity"android:exported="true"android:launchMode="singleTop"// 下面两行代码可有可无android:screenOrientation="portrait"// 指定一个主题,这里是无标题、半透明的主题android:theme="@style/NoTitleTranslucent80Theme"/>
下面是指定主题的代码,写在style.xml文件里(windowAnimationStyle可以不添加,这里只是一个动画):
<style name="NoTitleTranslucent80Theme" parent="BaseAppTheme"><item name="android:windowNoTitle">true</item><item name="android:windowBackground">#80000000</item><item name="android:windowIsTranslucent">true</item><item name="android:windowAnimationStyle">@style/AlphaAnim</item>
</style>
下面是动画的style(代码中两个item从上至下分别是进入动画、退出动画):
<style name="AlphaAnim" parent="android:Animation"><item name="@android:windowEnterAnimation">@anim/bottom_in</item><item name="@android:windowExitAnimation">@anim/bottom_out</item>
</style>
bottom_in 的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate
android:duration="300"android:fromXDelta="0"android:fromYDelta="100%"android:toXDelta="0"android:toYDelta="0" />
</set>
bottom_out 的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate
android:duration="300"android:fromXDelta="0"android:fromYDelta="0"android:toXDelta="0"android:toYDelta="100%" />
</set>
至此,一个完整的微信分享功能就实现了。
总结
只要按照上面的步骤一步步来,基本就能实现微信分享功能了。其中,要注意一点,
分享的图片大小不能大于32KB,
分享的图片大小不能大于32KB,
分享的图片大小不能大于32KB,
最好自己写个压缩的方法。
Android微信分享功能集成开发指南(这一篇就够了)相关推荐
- 微信分享功能android,Android微信分享功能实例+demo
Android微信分享功能实例 1 微信开放平台注册 2 获得appId,添加到程序中,并运行程序 3 使用应用签名apk生成签名,添加到微信开放平台应用签名,完成注册 4 测试分享功能. 有问题请留 ...
- 一分钟让你实现Android微信分享功能
Android实现微信分享功能(手把手教你实现,让你迅速完成产品经理分配的任务) 1,应公司业务需求需要给APP加一个微信分享功能,首先去微信开放平台注册一下点击进入获取APPID,话不多说直接上代码 ...
- android 微信分享 源码,记录Android微信分享功能的吐槽与思考
在App内潜入分享到微信好友或朋友圈的功能想必大家已经屡见不鲜了,比如Android分享一个网页信息(URL)到微信客户端的代码: /** * 微信分享:分享网页 * @param context * ...
- 友推app微信分享功能集成攻略
一:已实现功能 1.支持微信,QQ,新浪微博,QQ空间,短信,邮件等多家大型社交媒体平台一键分享 2.支持积分抽奖活动在线活动创建,通过分享应用邀请好友拿积分 3.支持截屏涂鸦个性分享 4.集成简单, ...
- android微信分享工具,记录Android微信分享功能的吐槽与思考
在App内潜入分享到微信好友或朋友圈的功能想必大家已经屡见不鲜了,比如Android分享一个网页信息(URL)到微信客户端的代码: /** * 微信分享:分享网页 * @param context * ...
- Android微信h5分享,H5网页实现微信分享功能
H5网页实现微信分享功能 一,首先在公众号管理后台"公众号设置"的"功能设置"里填写JS接口安全域名,域名需要通过ICP备案,没有备案域名可以用SAE.BAE等 ...
- centos + nodejs + egg2.x 开发微信分享功能
前言 近期把自用的微信公众号微信分享模块从 php 修改为 nodejs 的版本,虽然这是一个很小的功能,但仍然选择了 egg 框架,也算是为未来继续开发公众号,做点扩展的准备. 本文章仅为项目介绍, ...
- vue 如何调用微信分享_Vue开发 添加微信分享功能(全局分享)
在Vue4.0开发微信公众号的时候,需要做微信分享功能.这个功能其实还算简单,具体的思路如下: 1.安装微信JSSDK和Axios(axios是http请求插件) 2.向后台请求微信配置参数 3.初始 ...
- Android 微信分享与QQ分享功能(原生实现)
微信分享与QQ分享功能现在都挺常见的,可以根据一些第三方社会化分功能快速实现,不过多多少少都不怎么纯净,最好都是自己看官方文档来实现就最好了~ 一.微信分享 微信分享功能需要先在微信开放平台注册应用并 ...
最新文章
- mysql教程多表查询_mysql重点,表查询操作和多表查询
- PaddleOCR转ONNX
- u-boot的mkconfig文件详解
- 如何用 Linq 进行多重 Orderby ?
- 数据安全架构设计与实战~如何加密结构化数据
- 学习Java之前先学C语言
- mybatis SqlMapConfig.xml typeAliases
- 流水线的几个指标总结
- 尚硅谷大数据课程flink1.13代码实现与笔记记录
- meta分析一般步骤
- 小米线刷工具 MiFlash 提示长度不能小于 0 参数名 length,无法读取设备解决方法
- 清华紫光输入法linux,清华紫光拼音输入法
- python生成exe文件
- 2018年的最后一周,说些心里话
- Python 视频制作神器 -- Manim入门篇
- 在Pycharm中输入中文显示为繁体的解决办法
- SD NAND flash使用说明
- ikbc键盘解锁上锁 解决win键失灵的问题
- Qt打包成setup.exe安装包
- Java实现三人年龄
热门文章
- 应急广播项目测试总结
- 配置全面升级!骨传导耳机南卡Pro 4新发布!
- cesium矩阵和方位角heading ,pitch, roll的相互转换
- 提供完善的类似于Outlook 2003 Calendar的风格日历日程控件Xtreme Calendar
- 如何用FMEA方法排除架构隐患
- (转)图森技术汇 | 聊聊Anchor的前世今生(下)
- 基于JAVA二手儿童闲置物品交易平台计算机毕业设计源码+系统+lw文档+部署
- 现象级火爆的《王者荣耀》,究竟是被谁打败的?
- 2023四川安全员(B证)模拟
- java web程序示例_示例Web应用程序提示列表