Android移动应用接入微信分享功能

1.申请应用的AppID

移动应用要想接入微信分享功能,得先到微信开放平台创建并提交审核,只有审核通过的应用才能进行开发。具体参考微信开放平台创建移动应用

2.AndroidStudio集成微信SDK

  • 在 build.gradle 文件中,添加如下依赖即可:
dependencies {
    api 'com.tencent.mm.opensdk:wechat-sdk-android:+'
}

(从6.8.0版本开始,请使用 wechat-sdk-android )

  • 由于 jCenter 服务关停,需要修改成引用 Maven Central,在项目的根 build.gradle 文件中,添加如下代码即可:
buildscript {
    repositories {
        jcenter()       // 原有 jCenter 引用可继续保留
        mavenCentral()
    }
}

allprojects {
    repositories {
        jcenter()      // 原有 jCenter 引用可继续保留
        mavenCentral()
    }
}

特别注意,目前 Maven Central仅支持部分版本:6.6.4、6.6.5、6.6.23、6.7.0、6.7.9、6.8.0,建议开发者升级至最新版本6.8.0。后续所有版本更新都会上传至Maven Central。

3.注册到微信

要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的 AppID。(如下图所示,可以在程序入口 Activity 的 onCreate 回调函数处,或其他合适的地方将你的应用 id 注册到微信。注册函数示例如下图所示。

// APP_ID 替换为你的应用从官方网站申请到的合法AppID
private static final String APP_ID = "wx123456";
// IWXAPI 是第三方app和微信通信的openApi接口
private IWXAPI api;

private regToWx() {
    // 通过WXAPIFactory工厂,获取IWXAPI的实例
    api = WXAPIFactory.createWXAPI(this, APP_ID, true);
    // 将应用的appId注册到微信
    api.registerApp(APP_ID);

   //建议动态监听微信启动广播进行注册到微信
   registerReceiver(new BroadcastReceiver() {
     @Override
     public void onReceive(Context context, Intent intent) {
       // 将该app注册到微信
      api.registerApp(Constants.APP_ID);
     }
    }, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));

  }

4.发送分享请求到微信

通过 IWXAPI 的 sendReq来实现,sendReq 是第三方 app 主动发送消息给微信,发送完成之后会切回到第三方 app 界面。下面是发送网页的示例:

//初始化一个WXWebpageObject,填写url
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl ="网页url";

//用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title ="网页标题 ";
msg.description ="网页描述";
Bitmap thumbBmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb);
msg.thumbData =Util.bmpToByteArray(thumbBmp, true);

//构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message =msg;
req.scene =mTargetScene;
req.userOpenId = getOpenId();

//调用api接口,发送数据到微信
api.sendReq(req);

需要注意的是,SendMessageToWX.Req 的 scene 成员,如果 scene 填 WXSceneSession,那么消息会发送至微信的会话内。如果 scene 填 WXSceneTimeline,那么消息会发送至朋友圈。scene 默认值为 WXSceneSession。

5.接收微信的请求及返回值

发送分享请求后,想知道请求的返回结果,需要下面3步操作:
a. 在你的包名相应目录下新建一个 wxapi 目录,并在该 wxapi 目录下新增一个 WXEntryActivity 类,该类继承自 Activity(例如应用程序的包名为 com.xu.sharetime,则新添加的类如下图所示)



并在 manifest 文件里面加上exported、taskAffinity及launchMode属性,其中exported设置为true,taskAffinity设置为你的包名,launchMode设置为singleTask,例如:

<activity
    android:name=".wxapi.WXEntryActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:exported="true"
    android:taskAffinity="填写你的包名"
    android:launchMode="singleTask">
</activity>

b. 实现 IWXAPIEventHandler 接口,微信发送的请求将回调到 onReq 方法,发送到微信请求的响应结果将回调到 onResp 方法。
c. 在 WXEntryActivity 的onCreate方法中将接收到的 intent 及实现了 IWXAPIEventHandler 接口的对象传递给 IWXAPI 接口的 handleIntent 方法,示例如下图:

api.handleIntent(getIntent(), this);

应用请求微信的响应结果将通过 onResp 回调。

6.运行工程

运行工程,需要通过指定的.keystore来签名

signingConfigs {
    debug {
        storeFile file("../debug.keystore")
    }
}

注:这里和创建应用时的签名要保持一致,否则分享失败

本文参考微信开放平台移动应用开发:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Resource_Center_Homepage.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容