美文网首页
Android移动应用接入微信分享功能

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

作者: 皎__皎 | 来源:发表于2021-11-24 10:05 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Android移动应用接入微信分享功能

          本文链接:https://www.haomeiwen.com/subject/aijwtrtx.html