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

微信分享好友+朋友圈

准备工作

资源申请

申请微信开放平台账号 申请自己的AppID
地址
准备开发资源

  • 开发工具包
    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);

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

boolean sendResp(BaseResp resp);

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

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.WXSceneFavorite

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

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()中实现

@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)
微信更新链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值