Android QQ和微信分享

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chennai1101/article/details/87194272

1. QQ分享

  • 申请AppID

    直接在腾讯开放平台申请就可以了。

  • 搭建环境

    直接去SDK下载界面下载,下载后拷贝jar包到libs目录
    配置AndroidManifest.xml文件

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
      <activity
          android:name="com.tencent.tauth.AuthActivity"
          android:noHistory="true"
          android:launchMode="singleTask" >
          <intent-filter>
              <action android:name="android.intent.action.VIEW" />
              <category android:name="android.intent.category.DEFAULT" />
              <category android:name="android.intent.category.BROWSABLE" />
              <data android:scheme="tencent**********" />
          </intent-filter>
      </activity>
      <activity android:name="com.tencent.connect.common.AssistActivity"
          android:theme="@android:style/Theme.Translucent.NoTitleBar"
          android:configChanges="orientation|keyboardHidden|screenSize" />
    

    其中,把**********换成你的AppID

      <data android:scheme="tencent**********" />
    

    混淆配置

      -dontwarn com.tencent.**
      -keep class com.tencent.** {*; }
    
  • QQ分享

    创建一个链接分享

      Tencent mTencent = Tencent.createInstance(appId, context);
    
      final Bundle params = new Bundle();
      params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
      params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的标题");
      params.putString(QQShare.SHARE_TO_QQ_SUMMARY,  "要分享的摘要");
      params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,  "http://www.qq.com/news/1.html");
      params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"https://www.baidu.com/img/bd_logo1.png");
    
      mTencent.shareToQQ(activity, params, null);
    

    如果是本地图片,可以用QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL
    其它分享可参考资料:腾讯开放平台-Android_Api调用说明

2. 微信分享

不得不说,微信分享比QQ分享的坑大了很多。

  • 申请AppID

    创建APP应用时,需要输入应用签名,搞了半天才终于明白是怎么回事。
    在微信开放平台的Android资源下载,下载签名生成工具。把这个apk和你的应用安装到同一设备下,并输入应用的包名。
    在这里插入图片描述

  • 搭建环境

    build.gradle中添加依赖

      dependencies {
          ... ...
    
          implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.1.6'
    
          ... ...
      }
    

    配置AndroidManifest.xml文件

      <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
      <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    混淆配置

      -keep class com.tencent.mm.opensdk.** {
         *;
      }
      -keep class com.tencent.wxop.** {
         *;
      }
      -keep class com.tencent.mm.sdk.** {
         *;
      }
    
  • 微信分享

    创建一个链接分享

      private static final int THUMB_SIZE = 150;
    
      IWXAPI api = WXAPIFactory.createWXAPI(context, appId, true);
    
      WXWebpageObject webpage = new WXWebpageObject();
      webpage.webpageUrl = url; // 链接
    
      WXMediaMessage msg = new WXMediaMessage(webpage);
      msg.title = title; // 标题
      msg.description = desc; // 描述
    
      SendMessageToWX.Req req = new SendMessageToWX.Req();
      req.transaction = System.currentTimeMillis() + "";
      req.message = msg;
    
      req.scene = SendMessageToWX.Req.WXSceneTimeline; // 分享到微信朋友圈
      // req.scene = SendMessageToWX.Req.WXSceneSession; // 分享到微信好友
      mApi.sendReq(req)
    

    分享链接时,分享内容可以包含图片,不过这也是个坑点。图片必须在32K以下,而且还要指定宽高,否则极易发生“checkArgs fail, thumbData is invalid”的错误,让人找不着北。

      Bitmap bmp = BitmapFactory.decodeResource(App.instance().getResources(), R.drawable.share);
      Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
      bmp.recycle();
      if (thumbBmp != null) {
          msg.thumbData = bmpToByteArray(thumbBmp, true);
      }
    
      private byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
          ByteArrayOutputStream output = new ByteArrayOutputStream();
          bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
          if (needRecycle) {
              bmp.recycle();
          }
    
          byte[] result = output.toByteArray();
          try {
              output.close();
          } catch (Exception e) {
          }
    
          return result;
      }
    

    其他分享可参考资料:微信开放平台-Android应用

猜你喜欢

转载自blog.csdn.net/chennai1101/article/details/87194272