微信分享之andriod开发

来源:互联网 发布:阿里云优惠码在哪 编辑:程序博客网 时间:2024/05/17 05:50

说起微信分享我就忍不住吐槽,
第一:你必须先去官网获取它的WX_APP_ID,不然在你开发阶段根本没法测试(当然你可以试着用测试号,我没有用过的。)。
第二,就是关于微信提供的debug.keystore签名,前提你必须去官网获取认证,否则不可能分享成功。
第三,在你的app中添加了太多微信相关的代码,而且放的相关文件问题还必须放在工程根目录下面。
第四,当你获取开发完开始测试时,你必须把你的微信清空一次,不然你也不可能成功的分享连接。

哎,反正他真的没有qq做的公共借口做的好,配置太麻烦了。不吐槽了,进入正题。

一,进入公众平台注册:

https://mp.weixin.qq.com/

二,微信分享资料官网地址

代码示例连接
jar包以及示例下载地址
(建议最好看官网的资料,其它的资料一个不是最新的,第二个也不安全)

三、资料准备好了,开始开发了噢(记得导入jar包哦)

1.在AndroidManifest.xml中添加下面配置

参考官网示例中的相关文件,只要activity相关,把intent-filter过滤给去掉。

      <activity            android:name=".wxapi.WXEntryActivity"            android:label="@string/app_name"            android:exported="true"            android:launchMode="singleTop">              <!--<intent-filter>-->                <!--<action android:name="android.intent.action.MAIN" />-->                <!--<category android:name="android.intent.category.LAUNCHER" />-->            <!--</intent-filter>-->            <!--<intent-filter>-->                <!--<action android:name="android.intent.action.VIEW"/>-->                <!--<category android:name="android.intent.category.DEFAULT"/>-->                <!--<data android:scheme="sdksample"/>-->            <!--</intent-filter>-->        </activity>

2.,copy官网中的示例中的wxapi包

copy到你的工程的中,wxapi必须在你的项目的包名下面把红框中的文件copy大自己工程下,我把util也放到wxapi文件中了。

a.修改WXEntryActivity文件

去掉示例中引用的acitivity以及提示,保留注册以及回调信息等。下面是我修改过的wxEntryActivity示例:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{    private IWXAPI api;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        api = WXAPIFactory.createWXAPI(this, WX_APP_ID, false);        api.registerApp(WX_APP_ID);        api.handleIntent(getIntent(), this);    }//    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        setIntent(intent);        api.handleIntent(intent, this);    }    // 微信发送请求到第三方应用时,会回调到该方法    @Override    public void onReq(BaseReq req) {        switch (req.getType()) {            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:                break;            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX://              goToShowMsg((ShowMessageFromWX.Req) req);                break;            default:                break;        }    }    // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法    @Override    public void onResp(BaseResp resp) {        int result = 0;        switch (resp.errCode) {            case BaseResp.ErrCode.ERR_OK:                result = R.string.errcode_success;                finish();                break;            case BaseResp.ErrCode.ERR_USER_CANCEL:                result = R.string.errcode_cancel;                finish();                break;            case BaseResp.ErrCode.ERR_AUTH_DENIED:                result = R.string.errcode_deny;                break;            default:                result = R.string.errcode_unknown;                break;        }        finish();        Toast.makeText(this, result, Toast.LENGTH_LONG).show();    }

b.新建微信WeixinShareManager类,里面官网分享的不同类型的方法总结:

(代码里注意:WeixinShareUtil是微信里的的类,我用的时候改了下名字)。

import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.widget.Toast;import com.tencent.mm.sdk.modelmsg.SendMessageToWX;import com.tencent.mm.sdk.modelmsg.WXImageObject;import com.tencent.mm.sdk.modelmsg.WXMediaMessage;import com.tencent.mm.sdk.modelmsg.WXTextObject;import com.tencent.mm.sdk.modelmsg.WXWebpageObject;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.WXAPIFactory;public class WeixinShareManager {    private static final int THUMB_SIZE = 150;    /**     * 文字     */    public static final int WEIXIN_SHARE_WAY_TEXT = 1;    /**     * 图片     */    public static final int WEIXIN_SHARE_WAY_PIC = 2;    /**     * 链接     */    public static final int WEIXIN_SHARE_WAY_WEBPAGE = 3;    /**     * 会话     */    public static final int WEIXIN_SHARE_TYPE_TALK = SendMessageToWX.Req.WXSceneSession;    /**     * 朋友圈     */    public static final int WEIXIN_SHARE_TYPE_FRENDS = SendMessageToWX.Req.WXSceneTimeline;    private static WeixinShareManager instance;    private static String weixinAppId;    private IWXAPI wxApi;    private Context context;    private WeixinShareManager(Context context) {        this.context = context;        //初始化数据        weixinAppId = WX_APP_ID;        //初始化微信分享代码        if (weixinAppId != null) {            initWeixinShare(context);        }    }    /**     * 获取WeixinShareManager实例     * 非线程安全,请在UI线程中操作     *     * @return     */    public static WeixinShareManager getInstance(Context context) {        if (instance == null) {            instance = new WeixinShareManager(context);        }        return instance;    }    private void initWeixinShare(Context context) {        wxApi = WXAPIFactory.createWXAPI(context, weixinAppId, false);        wxApi.registerApp(weixinAppId);    }    /**     * 通过微信分享     *     * @param shareContent 分享的方式(文本、图片、链接)     * @param shareType    分享的类型(朋友圈,会话)     */    public void shareByWeixin(ShareContent shareContent, int shareType) {        switch (shareContent.getShareWay()) {            case WEIXIN_SHARE_WAY_TEXT:                shareText(shareType, shareContent);                break;            case WEIXIN_SHARE_WAY_PIC:                sharePicture(shareType, shareContent);                break;            case WEIXIN_SHARE_WAY_WEBPAGE:                shareWebPage(shareType, shareContent);                break;        }    }    /*     * 分享文字     */    private void shareText(int shareType, ShareContent shareContent) {        String text = shareContent.getContent();        //初始化一个WXTextObject对象        WXTextObject textObj = new WXTextObject();        textObj.text = text;        //用WXTextObject对象初始化一个WXMediaMessage对象        WXMediaMessage msg = new WXMediaMessage();        msg.mediaObject = textObj;        msg.description = text;        //构造一个Req        SendMessageToWX.Req req = new SendMessageToWX.Req();        //transaction字段用于唯一标识一个请求        req.transaction = buildTransaction("textshare");        req.message = msg;        //发送的目标场景, 可以选择发送到会话 WXSceneSession 或者朋友圈 WXSceneTimeline。 默认发送到会话。        req.scene = shareType;        wxApi.sendReq(req);    }    /*     * 分享图片     */    private void sharePicture(int shareType, ShareContent shareContent) {        WXImageObject imgObj = new WXImageObject(shareContent.getBitmap());        WXMediaMessage msg = new WXMediaMessage();        msg.mediaObject = imgObj;        Bitmap thumbBmp = Bitmap.createScaledBitmap(shareContent.getBitmap(), THUMB_SIZE, THUMB_SIZE, true);        shareContent.getBitmap().recycle();        msg.thumbData = WeixinShareUtil.bmpToByteArray(thumbBmp, true);  //设置缩略图        SendMessageToWX.Req req = new SendMessageToWX.Req();        req.transaction = buildTransaction("imgshareappdata");        req.message = msg;        req.scene = shareType;        wxApi.sendReq(req);    }    /*     * 分享链接     */    private void shareWebPage(int shareType, ShareContent shareContent) {        WXWebpageObject webpage = new WXWebpageObject();        webpage.webpageUrl = shareContent.getURL()+"&from=weixin";        WXMediaMessage msg = new WXMediaMessage(webpage);        msg.title = shareContent.getTitle();        msg.description = shareContent.getContent();        if (shareContent.getBitmap() == null) {            Toast.makeText(context, "图片不能为空", Toast.LENGTH_SHORT).show();        } else {            Bitmap thumbBmp = Bitmap.createScaledBitmap(shareContent.getBitmap(), 32, 32, true);            msg.thumbData = WeixinShareUtil.bmpToByteArray(thumbBmp, true);        }        SendMessageToWX.Req req = new SendMessageToWX.Req();        req.transaction = buildTransaction("webpage");        req.message = msg;        req.scene = shareType;        wxApi.sendReq(req);    }    private String buildTransaction(final String type) {        return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();    }}

c.相关实体类(这里的实体类和前面文章QQ的分享是共同的类。)

1.抽象实体父类

public abstract class ShareContent implements Serializable {    public abstract int getShareWay();    public abstract String getContent();    public abstract String getTitle();    public abstract String getURL();    public abstract String getPicResource();    public abstract Bitmap getBitmap();    public abstract void setBitmap(Bitmap bitmap);}

2.继承的分享图片的的实体类

/** *  设置分享图片的内容 * Created by wyh on 2016/8/16. */public class ShareContentPic extends ShareContent {    private String picResource;    private Bitmap bitmap;    public ShareContentPic(String picResource){        this.picResource = picResource;    }    @Override    public String getContent() {        return null;    }    @Override    public String getTitle() {        return null;    }    @Override    public String getURL() {        return null;    }    @Override    public String getPicResource() {        return picResource;    }    @Override    public Bitmap getBitmap() {        return bitmap;    }    @Override    public void setBitmap(Bitmap bitmap) {        this.bitmap = bitmap;    }    @Override    public int getShareWay() {        return WeixinShareManager.WEIXIN_SHARE_WAY_PIC;    }}

3.分享文本类:

public class ShareContentText extends ShareContent{    private String content;    /**     * 构造分享文字类     */    public ShareContentText(String content){        this.content = content;    }    @Override    public String getContent() {        return content;    }    @Override    public String getTitle() {        return null;    }    @Override    public String getURL() {        return null;    }    @Override    public String getPicResource() {        return "-1";    }    @Override    public Bitmap getBitmap() {        return null;    }    @Override    public void setBitmap(Bitmap bitmap) {    }    @Override    public int getShareWay() {        return WeixinShareManager.WEIXIN_SHARE_WAY_TEXT;    }}

4.分享连接相关实体类:

/** * 设置分享链接的内容 * Created by on 2016/8/16. */public class ShareContentWebpage  extends ShareContent {    private String title;    private String content;    private String url;    private String picResource;    private Bitmap bitmap;    public ShareContentWebpage(String title, String content,                               String url, String picResource){        this.title = title;        this.content = content;        this.url = url;        this.picResource = picResource;    }    @Override    public String getContent() {        return content;    }    @Override    public String getTitle() {        return title;    }    @Override    public String getURL() {        return url;    }    @Override    public String getPicResource() {        return picResource;    }    @Override    public Bitmap getBitmap() {        return bitmap;    }    @Override    public void setBitmap(Bitmap bitmap) {        this.bitmap = bitmap;    }    @Override    public int getShareWay() {        return WeixinShareManager.WEIXIN_SHARE_WAY_WEBPAGE;    }}

d.使用示例:

/***分享给微信好友*/ private void showWeixinhaoyou(View view) {        WeixinShareManager weixinShareManager = getInstance(getActivity());        if (shareContent.getPicResource()!=null) {            shareContent.setBitmap(bitmap);        }        weixinShareManager.shareByWeixin(shareContent, 0);    }

三.总结:

大体就这么多了,util类,我就不贴代码了,自己copy官网的示例就好。主要注意配置和引入包的位置就可。上述主要看weixinShareManager就行。我在使用分享仅用了url连接分享。其它接口的没有测试过。

0 0
原创粉丝点击