android集成微信分享

1.注册你的APP

登录 微信开放平台 把你的开发者信息填上,这些就不上图了,都是中文字,应该看得懂
然后进入 管理中心 点击创建++移动应用++

创建移动应用

把你的应用信息填上,有些项目不知道怎么填随便填就行了,但是注意: 应用的包名和签名不能随便填!!

  • 包名就是你的应用的包名例如: fucker.idiot.asshole.wanker

怎么获取签名?

先下载微信提供的一些工具

工具

首先将你的app安装在手机或者模拟器上,

由于平时我们调试软件都是使用debug的签名生成应用,所以我们要特别注意如果使用了debug的签名,等到APP正式发布的时候,微信的分享就不能用了.
所以我们要使用release的签名文件
怎么让我们debug的时候也使用release的签名文件呢?

打开应用Module的build.gradle文件 添加这样一份代码:

android {
    signingConfigs{
        debug{  //这里配置的就是debug的签名配置了
            storeFile file("C:\\Users\\Administrator\\.android\\asd")   //这个文件是我的,改成你自己的release签名文件
            storePassword "asd123456"   //密码改成自己的
            keyAlias "asd"              //再改成你自己的
            keyPassword "asd123456"     //再改成你自己的
        }
    }
}

再使用工具包中的软件便可以获取到应用的签名了,

填上应用的包名,然后"Get Signature"

获取签名

绿色的字就是签名

最后等待审核,可能要一两天把...

通过审核是这样的

通过审核

当然要把 AppID 和 AppSecret 记录下来,在代码中需要使用

第三方集成步骤大致都差不多:平台注册,引入依赖包,配置清单文件,初始化操作,最后引用

注册就不用说了,直接上第三方官网,按照提示申请注册账号和应用,获取相应的appid,appkey等;

2.引入依赖包:

项目build.gradle之下

compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

其中,里面的without表示没有统计功能,如果需要有统计功能修改为with即可,+号表示随时引入最新包;

3.配置清单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"/>

4.注册到微信(我是在Application的onCreate中注册的,也可以在Activity中注册)

IWXAPI mWxApi = WXAPIFactory.createWXAPI(this, ShareKey.WX_ID, true);
mWxApi.registerApp(ShareKey.WX_ID);

第四步:分享内容到微信

IWXAPI mWXApi = WXAPIFactory.createWXAPI(context, ShareKey.WX_ID, true);
mWXApi.registerApp(ShareKey.WX_ID);

if (!mWXApi.isWXAppInstalled()) {
    Tool.toast(context, R.string.share_unInstall_wx);
    return;
}

WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = url;

WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = title;
msg.description = decribe;
msg.thumbData = getWXThumb(bitmap).toByteArray();

SendMessageToWX.Req req = new SendMessageToWX.Req();
//WXSceneTimeline朋友圈    WXSceneSession聊天界面
req.scene = isTimeLineCb ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;//聊天界面
req.message = msg;
req.transaction = String.valueOf(System.currentTimeMillis());
mWXApi.sendReq(req);

这是图片需要处理一下,太大了分享会报错

public static final int IMAGE_LENGTH_LIMIT = 6291456;

private static ByteArrayOutputStream getWXThumb(Bitmap resource) {
    Bitmap thumb = createScaledBitmap(resource, 100, true);
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    int quality = 90;
    int realLength = Util.getBitmapByteSize(resource.getWidth(), resource.getHeight(), Bitmap.Config.ARGB_8888);
    if (realLength > IMAGE_LENGTH_LIMIT) {
        quality = (int) (IMAGE_LENGTH_LIMIT * 1f / realLength * 100);
    }
    if (quality < 75) {
        quality = 75;
    }
    resource.compress(Bitmap.CompressFormat.PNG, quality, output);
    output.reset();
    thumb.compress(Bitmap.CompressFormat.PNG, 85, output);
    return output;
}

第四步:最后就是分享的回调了(在自己项目包名下创建目录wxapi,这个目录下创建WXEntryActivity,也就是:你的包名.wxapi.WXEntryActivity,这个类需要在清单注册)

<activity
    android:name=".wxapi.WXEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"
    android:screenOrientation="portrait" />

WXEntryActivity的实现:

public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

    private final int REQUEST_PAY = 100;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        share = ShareKey.getShare(this);
        //如果没回调onResp,八成是这句没有写
        WXAPIFactory.createWXAPI(this, WX_ID, false).handleIntent(getIntent(), this);
    }

    // 微信发送请求到第三方应用时,会回调到该方法
    @Override
    public void onReq(BaseReq req) {
    }

    // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
    //app发送消息给微信,处理返回消息的回调
    @Override
    public void onResp(BaseResp resp) {
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                switch (resp.getType()) {
                    case RETURN_MSG_TYPE_SHARE:
                        Tool.toast(this, "微信分享取消");
                        finish();
                        break;
        
                }
                break;

            case BaseResp.ErrCode.ERR_OK:
                switch (resp.getType()) {
                  case RETURN_MSG_TYPE_SHARE:
                        finish();
                        break;
                }
                break;
        }
    }

到此,微信分享就完事了。说一下需要注意的地方,

1 , app签名需要和微信平台上申请的一致

2 ,分享的图片大小要注意,缩略图不能大于32k

3 , 回调的WXEntryActivity要放对位置,清单也要添加

猜你喜欢

转载自blog.csdn.net/wusj3/article/details/82663422