友盟集成微信分享的步骤和我踩过的坑
- 因工作原因,要集成微信分享,用友盟,实现分享朋友圈和分享给好友
1、申请友盟的appid。这个看文档吧。
2、项目中配置友盟
- 在清单文件中如下,这里要说明,要在项目的报名下建一个文件夹,建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下:(需要注意,如果使用精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路径是com.umeng.socialize.weixin.view.WXCallbackActivity)
<!--友盟分享-->
<meta-data
android:name="UMENG_APPKEY"
android:value="59b205433eae25763000019b" >
</meta-data>
<!--友盟统计-->
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"
/>
<!-- 微信分享回调 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
- 在application中
public class App extends Application{
{
PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");
}
@Override
public void onCreate() {
super.onCreate();
UMShareAPI.get(this);
}
}
3、在分享的activity中
public class BAddSingleCircleActivity extends BaseActicity implements OnActionViewClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.ll_share_weixin:
//分享给好友
UMWeb web = new UMWeb(“web分享的url”);
web.setTitle("This is web title");
web.setThumb(new UMImage(this, R.mipmap.ic_launcher));
web.setDescription("my description");
new ShareAction(this)
.withText("waterTheGreat")
.withMedia(web)
.setPlatform(SHARE_MEDIA.WEIXIN.toSnsPlatform().mPlatform)
.setCallback(shareListener).share();
break;
case R.id.ll_share_weixin_circle:
//分享到朋友圈
UMWeb web = new UMWeb(“web分享的url”);
web2.setTitle("This is web title");
web2.setThumb(new UMImage(this, R.mipmap.ic_launcher));
web2.setDescription("my description");
new ShareAction(this)
.withText("waterTheGreat")
.withMedia(web2)
.setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE.toSnsPlatform().mPlatform)
.setCallback(shareListener).share();
break;
}
}
private UMShareListener shareListener = new UMShareListener() {
/**
* @descrption 分享开始的回调
* @param platform 平台类型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
showProgressDialog(BAddSingleCircleActivity.this);
}
/**
* @descrption 分享成功的回调
* @param platform 平台类型
*/
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(BAddSingleCircleActivity.this,"分享成功",Toast.LENGTH_LONG).show();
dismissProgressDialog();
}
/**
* @descrption 分享失败的回调
* @param platform 平台类型
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
dismissProgressDialog();
Log.e("shareUM"," error Message:"+t.getMessage());
Toast.makeText(BAddSingleCircleActivity.this,"分享失败",Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享取消的回调
* @param platform 平台类型
*/
@Override
public void onCancel(SHARE_MEDIA platform) {
dismissProgressDialog();
Toast.makeText(BAddSingleCircleActivity.this,"取消了",Toast.LENGTH_LONG).show();
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode,resultCode,data);
}
@Override
protected void onDestroy() {
super.onDestroy();
UMShareAPI.get(this).release();
}
}
基本上完成了。但是有几个坑
1、在申请微信的appid和appSecret的时候,要输入包名和签名,签名最好用平台上的签名工具生成。(注意:不是appstore_test.jks签名文件的哈希HSA1值),签名是个类似于“5d5d96f04291aca171029293c0ead16c”样的字符串。
2、如果之前写错了签名,可以在平台上修改,且立刻生效。但要讲之前的测试手机的微信删除重装。因为微信会记录之前的错误的签名文件。导致改对了也一直测试不通过。(我就坑在这里一个通宵)
3、可以使用友盟的debug的方式来快速查找错误,只需要一行代码。在application的初始化的时候加入下面的代码就可以了!
com.umeng.socialize.Config.DEBUG=true;
UMShareAPI.get(this);