摘要
一般我们做Android项目会涉及到微信分享朋友圈,微信好友功能,在使用该功能前需要先在微信开放平台进行申请。链接地址https://open.weixin.qq.com申请时间一般在七到十四个工作日。
版本说明
使用 CocosCreator 的 2.4.3 版本。
分享文字
分享图片
Android代码
特别注意
在开发测试阶段需要用官方给的工具进行生成应用签名,并在微信开放平台->管理中心->应用详情->开发信息进行修改,签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
代码开始
-
引入微信依赖,在项目的build.gradle文件中 dependencies 对象中添加依赖即以下代码:
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' -
AndroidManifext添加必要的权限支持(其中网络权限如果没有使用扫码登录功能非必要;后三个权限,如果没有使用 mta,也非必要,即使有使用 mta,去掉也不影响功能):
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> -
注册到微信,要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的 id。(如下图所示,可以在程序入口 Activity 的 onCreate 回调函数处,或其他合适的地方将你的应用 id 注册到微信
以下皆为WeChatSDK类方法
- 在类的开始处定义以下变量:
private static AppActivity mActivity = null; // 相应的包,请集成SDK后自行引入 private static IWXAPI api; private static final int THUMB_SIZE = 120; // 分享微信好友 private static final int SceneSession = 0; // 分享微信朋友圈 private static final int SceneTimeline = 1; // APP_ID public static final String APP_ID = "wx00000000000000";- 声明setContext()方法,并在主AppActivity的onCreate()方法中进行调用该方法并传入this
public static void setContext(AppActivity mActivity) { WeChatSDK.mActivity = mActivity api = WXAPIFactory.createWXAPI(mActivity, APP_ID,true); // 将该app注册到微信 api.registerApp(APP_ID); }- 微信分享文字方法
/** * 微信分享文字 * @param text 需要分享的文字 * @param type 分享类型 微信好友,微信朋友圈 */ private static void shareTextWx(String text,int type){ // 初始化一个 WXTextObject 对象,填写分享的文本内容 WXTextObject textObj = new WXTextObject(); // 分享内容 textObj.text = text; // 用 WXTextObject 对象初始化一个 WXMediaMessage 对象 WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = textObj; // 消息描述 msg.description = "测试"; SendMessageToWX.Req req = new SendMessageToWX.Req(); //transaction字段用与唯一标示一个请求 req.transaction = buildTransaction("text"); req.message = msg; // 发送的目标场景 // 分享到对话:SendMessageToWX.Req.WXSceneSession // 分享到朋友圈:SendMessageToWX.Req.WXSceneTimeline // 分享到收藏:SendMessageToWX.Req.WXSceneFavorite if( type == SceneTimeline ) { req.scene = SendMessageToWX.Req.WXSceneTimeline; } else if( type == SceneSession ) { req.scene = SendMessageToWX.Req.WXSceneSession; } //调用api接口,发送数据到微信 api.sendReq(req); }- 微信分享图片方法
/** * 微信分享图片 * @param imgPath 图片地址 * @param type 分享类型 微信好友,微信朋友圈 */ public static void shareImgWx (String imgPath,int type) { // 获取cocos路径下的 这里在cocos中用 asset.nativeUrl进行获取图片的路径(在后面会说到) Bitmap bitmap=null; try { // 获取Assets下的文件 InputStream is = mActivity.getAssets().open(imgPath); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (IOException e) { e.printStackTrace(); } //初始化 WXImageObject 和 WXMediaMessage 对象 WXImageObject imgObj = new WXImageObject(bitmap); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imgObj; //设置缩略图 Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, THUMB_SIZE, true); bitmap.recycle(); // 建一个字节数组缓冲区WxUtil为单独一个工具类 msg.thumbData = WxUtil.bmpToByteArray(thumbBmp, true); //构造一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg; if( type == SceneTimeline ) { req.scene = SendMessageToWX.Req.WXSceneTimeline; } else if( type == SceneSession ) { req.scene = SendMessageToWX.Req.WXSceneSession; } //调用api接口,发送数据到微信 api.sendReq(req); }- 对应该请求的事务 ID
/** * 微信分享类型转换 * @param type {text,img} * @return */ private static String buildTransaction(final String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); }-
WxUtil类内容
public class WxUtil { public static final int IMAGE_SIZE=32768; public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG, 100, output); int options = 100; while (output.toByteArray().length > IMAGE_SIZE && options > 10) { options -= 10; output.reset(); bmp.compress(Bitmap.CompressFormat.JPEG, options, output); } if (needRecycle) { bmp.recycle(); } byte[] result = output.toByteArray(); try { output.close(); } catch (Exception e) { e.printStackTrace(); } return result; } }
cocos crertor代码
// 定义Asset资源,并在面板中拖拽
@property(cc.Asset) yy:cc.Asset = undefined;
// 调用微信图片分享到微信朋友圈,修改为0则是分享给好友
// this.yy.nativeUrl则为获取图片资源路径
jsb.reflection.callStaticMethod("包名的路径", "方法名", "(Ljava/lang/String;I)V",this.yy.nativeUrl,1);
// 调用微信文字分享
jsb.reflection.callStaticMethod("包名的路径", "方法名", "(Ljava/lang/String;I)V","我是测试内容",0);



