android 微信好友,朋友圈分享
在APP中集成微信的分享功能,官方的说明是在太简洁了.....几乎没法用....
不过一开始按照官方文档去做没问题
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++注意如果临时改变了签名或者包名,当时还不能生效(也就是你APP用不了微信的功能了),可能得等个一天才能生效!!!!血的教训!!++
2.添加依赖包
之前下载获取签名工具的时候就已经下载下来了
依赖包放入AS项目的libs文件夹中
添加依赖
添加依赖3.向微信sdk注册你的应用
在我自己写的学习demo中,注册是在一个单例模式的类中注册的,只有在第一次使用的时候才会注册,免得提早注册了浪费资源
当然你也可以在application或者activity的oncrete中注册,随你!
private static final String APP_ID = "12312313212313213213"; //这个APP_ID就是注册APP的时候生成的private static final String APP_SECRET = "12312312313212313213213";public IWXAPI api; //这个对象是专门用来向微信发送数据的一个重要接口,使用强引用持有,所有的信息发送都是基于这个对象的public void registerWeChat(Context context) { //向微信注册appapi = WXAPIFactory.createWXAPI(context, APP_ID, true); api.registerApp(APP_ID);
}
4.发送图片或文字,给朋友或者朋友圈
因为发文字,图片,或者链接都是类同的程序,所以在这只举一个发送图片的例子
public void sharePicByFile(File picFile, String tag) {if (!picFile.exists()) {return;}Bitmap pic = BitmapFactory.decodeFile(picFile.toString());WXImageObject imageObject = new WXImageObject(pic);//这个构造方法中自动把传入的bitmap转化为2进制数据,或者你直接传入byte[]也行//注意传入的数据不能大于10M,开发文档上写的WXMediaMessage msg = new WXMediaMessage(); //这个对象是用来包裹发送信息的对象msg.mediaObject = imageObject;//msg.mediaObject实际上是个IMediaObject对象,//它有很多实现类,每一种实现类对应一种发送的信息,//比如WXTextObject对应发送的信息是文字,想要发送文字直接传入WXTextObject对象就行Bitmap thumbBitmap = Bitmap.createScaledBitmap(pic, 150, 150, true);msg.thumbData = bitmap2ByteArray(thumbBitmap); //在这设置缩略图//官方文档介绍这个bitmap不能超过32kb//如果一个像素是8bit的话换算成正方形的bitmap则边长不超过181像素,边长设置成150是比较保险的//或者使用msg.setThumbImage(thumbBitmap);省去自己转换二进制数据的过程//如果超过32kb则抛异常SendMessageToWX.Req req = new SendMessageToWX.Req(); //创建一个请求对象req.message = msg; //把msg放入请求对象中req.scene = SendMessageToWX.Req.WXSceneTimeline; //设置发送到朋友圈//req.scene = SendMessageToWX.Req.WXSceneSession; //设置发送给朋友req.transaction = tag; //这个tag要唯一,用于在回调中分辨是哪个分享请求boolean b = api.sendReq(req); //如果调用成功微信,会返回true
}
调用这个方法之后会自动打开微信的界面,可以发送你要分享的信息了!
5.分享后的回调
微信只能回调指定包下的指定Activity!!!
所以一定要按照我下面的例子来写
(1)创建包
在注册的包名下面创建一个叫"wxapi"的包
package com.zhouyijin.zyj.fakeshanbay.wxapi;
(2)创建指定名字的Activity
创建一个Acitivty,必须是这个名字!#### (3)
public class WXEntryActivity extends AppCompatActivity {}
并在manifest文件中注册!!!
<activity android:name=".wxapi.WXEntryActivity"android:launchMode="singleTop"android:exported="true"/> //注意这个属性一定是true,不然微信不能调用
(3)处理回调
微信会把数据包装在Intent中传入这个"WXEntryActivity"中
我们不需要自己处理Intent,
只需要在这个activity中调用api.handleIntent(Intent intent, IWXAPIEventHandler i),
这个方法会自动调用 IWXAPIEventHandler 对象的 onResp(BaseResp resp) 方法
我们只需要把处理回调的逻辑写进onResp(BaseResp resp) 方法中即可!
为了方便,我们使WXEntryActivity实现IWXAPIEventHandler的方法
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.entry);WeChatModule.getInstance().api.handleIntent(getIntent(), this); //处理微信传回的Intent,当然你也可以在别的地方处理}@Overridepublic void onResp(BaseResp resp) { //在这个方法中处理微信传回的数据//形参resp 有下面两个个属性比较重要//1.resp.errCode//2.resp.transaction则是在分享数据的时候手动指定的字符创,用来分辨是那次分享(参照4.中req.transaction)switch (resp.errCode) { //根据需要的情况进行处理case BaseResp.ErrCode.ERR_OK://正确返回break;case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消break;case BaseResp.ErrCode.ERR_AUTH_DENIED://认证被否决break;case BaseResp.ErrCode.ERR_SENT_FAILED://发送失败break; case BaseResp.ErrCode.ERR_UNSUPPORT:/不支持错误break; case BaseResp.ErrCode.ERR_COMM://一般错误break; default://其他不可名状的情况break;}}@Overridepublic void onReq(BaseReq req) {//......这里是用来处理接收的请求,暂不做讨论}}
这里需要提醒下,因为微信只能回调这个Activity,如果不想把业务逻辑写在这个Activity中,那么可以把具体逻辑再转移到别的Activity中处理,如下:
@Override
public void onResp(BaseResp resp) {Intent intent = new Intent(this, xxx.class);intent.putExtra("errCode", resp.errCode);intent.putExtra("errStr", resp.transaction);startActivity(intent); finish();
}
作者:吐痰高手
链接:
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
android 微信好友,朋友圈分享
在APP中集成微信的分享功能,官方的说明是在太简洁了.....几乎没法用....
不过一开始按照官方文档去做没问题
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++注意如果临时改变了签名或者包名,当时还不能生效(也就是你APP用不了微信的功能了),可能得等个一天才能生效!!!!血的教训!!++
2.添加依赖包
之前下载获取签名工具的时候就已经下载下来了
依赖包放入AS项目的libs文件夹中
添加依赖
添加依赖3.向微信sdk注册你的应用
在我自己写的学习demo中,注册是在一个单例模式的类中注册的,只有在第一次使用的时候才会注册,免得提早注册了浪费资源
当然你也可以在application或者activity的oncrete中注册,随你!
private static final String APP_ID = "12312313212313213213"; //这个APP_ID就是注册APP的时候生成的private static final String APP_SECRET = "12312312313212313213213";public IWXAPI api; //这个对象是专门用来向微信发送数据的一个重要接口,使用强引用持有,所有的信息发送都是基于这个对象的public void registerWeChat(Context context) { //向微信注册appapi = WXAPIFactory.createWXAPI(context, APP_ID, true); api.registerApp(APP_ID);
}
4.发送图片或文字,给朋友或者朋友圈
因为发文字,图片,或者链接都是类同的程序,所以在这只举一个发送图片的例子
public void sharePicByFile(File picFile, String tag) {if (!picFile.exists()) {return;}Bitmap pic = BitmapFactory.decodeFile(picFile.toString());WXImageObject imageObject = new WXImageObject(pic);//这个构造方法中自动把传入的bitmap转化为2进制数据,或者你直接传入byte[]也行//注意传入的数据不能大于10M,开发文档上写的WXMediaMessage msg = new WXMediaMessage(); //这个对象是用来包裹发送信息的对象msg.mediaObject = imageObject;//msg.mediaObject实际上是个IMediaObject对象,//它有很多实现类,每一种实现类对应一种发送的信息,//比如WXTextObject对应发送的信息是文字,想要发送文字直接传入WXTextObject对象就行Bitmap thumbBitmap = Bitmap.createScaledBitmap(pic, 150, 150, true);msg.thumbData = bitmap2ByteArray(thumbBitmap); //在这设置缩略图//官方文档介绍这个bitmap不能超过32kb//如果一个像素是8bit的话换算成正方形的bitmap则边长不超过181像素,边长设置成150是比较保险的//或者使用msg.setThumbImage(thumbBitmap);省去自己转换二进制数据的过程//如果超过32kb则抛异常SendMessageToWX.Req req = new SendMessageToWX.Req(); //创建一个请求对象req.message = msg; //把msg放入请求对象中req.scene = SendMessageToWX.Req.WXSceneTimeline; //设置发送到朋友圈//req.scene = SendMessageToWX.Req.WXSceneSession; //设置发送给朋友req.transaction = tag; //这个tag要唯一,用于在回调中分辨是哪个分享请求boolean b = api.sendReq(req); //如果调用成功微信,会返回true
}
调用这个方法之后会自动打开微信的界面,可以发送你要分享的信息了!
5.分享后的回调
微信只能回调指定包下的指定Activity!!!
所以一定要按照我下面的例子来写
(1)创建包
在注册的包名下面创建一个叫"wxapi"的包
package com.zhouyijin.zyj.fakeshanbay.wxapi;
(2)创建指定名字的Activity
创建一个Acitivty,必须是这个名字!#### (3)
public class WXEntryActivity extends AppCompatActivity {}
并在manifest文件中注册!!!
<activity android:name=".wxapi.WXEntryActivity"android:launchMode="singleTop"android:exported="true"/> //注意这个属性一定是true,不然微信不能调用
(3)处理回调
微信会把数据包装在Intent中传入这个"WXEntryActivity"中
我们不需要自己处理Intent,
只需要在这个activity中调用api.handleIntent(Intent intent, IWXAPIEventHandler i),
这个方法会自动调用 IWXAPIEventHandler 对象的 onResp(BaseResp resp) 方法
我们只需要把处理回调的逻辑写进onResp(BaseResp resp) 方法中即可!
为了方便,我们使WXEntryActivity实现IWXAPIEventHandler的方法
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.entry);WeChatModule.getInstance().api.handleIntent(getIntent(), this); //处理微信传回的Intent,当然你也可以在别的地方处理}@Overridepublic void onResp(BaseResp resp) { //在这个方法中处理微信传回的数据//形参resp 有下面两个个属性比较重要//1.resp.errCode//2.resp.transaction则是在分享数据的时候手动指定的字符创,用来分辨是那次分享(参照4.中req.transaction)switch (resp.errCode) { //根据需要的情况进行处理case BaseResp.ErrCode.ERR_OK://正确返回break;case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消break;case BaseResp.ErrCode.ERR_AUTH_DENIED://认证被否决break;case BaseResp.ErrCode.ERR_SENT_FAILED://发送失败break; case BaseResp.ErrCode.ERR_UNSUPPORT:/不支持错误break; case BaseResp.ErrCode.ERR_COMM://一般错误break; default://其他不可名状的情况break;}}@Overridepublic void onReq(BaseReq req) {//......这里是用来处理接收的请求,暂不做讨论}}
这里需要提醒下,因为微信只能回调这个Activity,如果不想把业务逻辑写在这个Activity中,那么可以把具体逻辑再转移到别的Activity中处理,如下:
@Override
public void onResp(BaseResp resp) {Intent intent = new Intent(this, xxx.class);intent.putExtra("errCode", resp.errCode);intent.putExtra("errStr", resp.transaction);startActivity(intent); finish();
}
作者:吐痰高手
链接:
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。