微信分享之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必须在你的项目的包名下面。
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
- 微信分享之andriod开发
- Andriod 开发之微信分享接口
- QQ分享之andriod开发
- android开发之微信分享小计
- 第三方分享微信分享、朋友圈分享之iOS开发/Android开发
- Unity开发之接入Sharesdk微信分享Android
- Android 微信开发之分享收藏的实现
- 微信公众平台开发之分享问题总结
- 微信分享开发指南
- iOS微信分享开发
- 微信分享SDK开发
- 微信android分享开发
- 微信分享接口开发
- 微信分享接口开发
- 微信分享开发总结
- 微信分享接口开发
- 微信分享接口开发
- andriod 实现新浪、QQ空间、微信朋友圈、微信好友分享功能
- pthread_create函数编译时报错:undefined reference to 'pthread_create'
- 海量数据处理和高并发处理的思想
- unity3D游戏开发十五之NGUI二
- 服务类型(RPC、SOAP、REST)
- OAuth2.0网页授权
- 微信分享之andriod开发
- 图片的上传问题
- OpenCV图像中添加中文
- 从git上新check的项目,Ctrl+左键 不可用
- ACCESS TOKEN
- CSS 选择器
- Node.js学习笔记
- 线段树
- 99%的人都理解错了HTTP中GET与POST的区别