微信分享好友+朋友圈 开发文档

微信分享好友+朋友圈

准备工做

资源申请

申请微信开放平台帐号 申请本身的AppID
地址
准备开发资源java

  • 开发工具包
    android项目,添加依赖库
    2018.12.12最新
    implementation ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.1.6’
  • 示例代码
  • 必要的签名文件和工具
    准备好本身的签名文件和签名获取工具
    工具下载地址
  • 视觉设计资源
  • WeDemo开源项目

配置AS

  • 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"/>
  • 注册到微信
// APP_ID 替换为你的应用从官方网站申请到的合法appID
private static final String APP_ID = "wx88888888";

// IWXAPI 是第三方app和微信通讯的openApi接口
private IWXAPI api;

private regToWx() {
    // 经过WXAPIFactory工厂,获取IWXAPI的实例
    api = WXAPIFactory.createWXAPI(this, APP_ID, true);

    // 将应用的appId注册到微信
    api.registerApp(APP_ID);
}
  • 发送请求或响应到微信
    如今,你的程序要发送请求或发送响应到微信终端,能够经过IWXAPI的 sendReq 和 sendResp 两个方法来实现。

boolean sendReq(BaseReq req);android

sendReq是第三方app主动发送消息给微信,发送完成以后会切回到第三方app界面。web

boolean sendResp(BaseResp resp);canvas

sendResp是微信向第三方app请求数据,第三方app回应数据以后会切回到微信界面。api

sendReq的实现示例,以下图所示:微信

/初始化一个 WXTextObject 对象,填写分享的文本内容
WXTextObject textObj = new WXTextObject();
textObj.text = text;

//用 WXTextObject 对象初始化一个 WXMediaMessage 对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObj;
msg.description = text;

SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());  //transaction字段用与惟一标示一个请求
req.message = msg;
req.scene = mTargetScene; 

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

scene 字段 int类型常量,表明消息发送的目的
文档中给定的常量
分享到对话:
SendMessageToWX.Req.WXSceneSession
分享到朋友圈:
SendMessageToWX.Req.WXSceneTimeline ;
分享到收藏:
SendMessageToWX.Req.WXSceneFavoriteapp

报错 checkArgs fail, thumbData is invalid
缘由,WXWebpageObject .userOpenId ,网页缩略图,要求大小在32K如下
原有的方法
Bitmap thumbBmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb)
常常超标
本身控制下缩略图大小ide

Bitmap thumbBmp = Bitmap.createScaledBitmap(getBitmap(context,R.drawable.page_title),120,120,true);
// 因为一部分图像资源是svg,须要对5.0以上的系统作兼容
    private Bitmap getBitmap(Context context,int vectorDrawableId) {
        Bitmap bitmap = null;
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
            Drawable vectorDrawable = context.getDrawable(vectorDrawableId);
            bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),
                    vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
            vectorDrawable.draw(canvas);
        } else {
            bitmap = BitmapFactory.decodeResource(context.getResources(), vectorDrawableId,new BitmapFactory.Options());
        }
        return bitmap;
    }
  • 接收微信的请求及返回值
    若是你的程序须要接收微信发送的请求,或者接收发送到微信请求的响应结果,须要下面3步操做:
    1.在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity
<activity android:name=".wxapi.WXEntryActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="true" android:taskAffinity="net.sourceforge.simcpux" android:launchMode="singleTask">
</activity>

2.实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
记得在处理完操做后,finish()当前活动
3. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法
须要在onCreate()和onNewIntent()中实现svg

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID,false);
// api.registerApp(WEIXIN_APP_ID);
        api.handleIntent(getIntent(),this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent,this);
    }

版本的适配
分享到朋友圈,须要微信4.2版本以上工具

if (api.getWXAppSupportAPI() >= Build.TIMELINE_SUPPORTED_SDK_INT) {
    //do share
}

另外须要判断是否安装微信
资料来源

/    检查是否安装微信
    public  boolean isWeChatAppInstalled(Context context) {
        if(api.isWXAppInstalled()) {
            return true;
        } else {
            final PackageManager packageManager = context.getPackageManager();// 获取packagemanager
            List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 获取全部已安装程序的包信息
            if (pinfo != null) {
                for (int i = 0; i < pinfo.size(); i++) {
                    String pn = pinfo.get(i).packageName;
                    if (pn.equalsIgnoreCase("com.tencent.mm")) {
                        return true;
                    }
                }
            }
            return false;
        }
    }
  • 权限申请
    微信分享须要获取READ_PHONE_STATE权限,因为在6.0之后,该权限为系统敏感权限,须要动态申请
// 检查读取本机状态的权限
    private void checkPhoneState() {
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
        if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 0);
        }
    }
  • 图片资源

好友和朋友圈图标下载地址

备注

6.72微信更新后,分享回调,cancel和success事件变成一个结果
回调方法onResp(BaseResp baseResp) 返回的baseResp.errCode,不会出现BaseResp.ErrCode.ERR_USER_CANCEL,只会返回BaseResp.ErrCode.ERR_OK(0)
微信更新连接