2014年5月21日 星期三
//下面代码里,用友盟分享内容到微博的功能正常使用
//而分享内容到微信的功能 虽然toast提示分享成功,友盟后台统计分享次数也确实加上去了的,但是就是没见我的微信和朋友圈有新分享的内容,
//此部分尚未解决
//如果使用微信官方sdk实现分享,参考
http://blog.csdn.net/freesonhp/article/details/10296141
2014年5月22日 星期四
已经可以实现微博,微信好友,微信朋友圈的分享功能了
记录我的奇葩苦逼经历
1. 用友盟实现分享内容到微博不难,下载好sdk,对着官方文档敲代码就行了,第一次分享会让用户点击授权
2. 关键是微信分享,首先要去微信开放平台注册并审核通过一个应用,拿到应用信息里的
appid,应用签名,包名
我下载的友盟的演示项目的测试apk可以成功实现分享,但是我自己写的代码死活无法打开调用微信分享面板,出现
2014年5月21日 星期三
的情况
后来发现是
因为 微信的分享需要服务器对 appid,应用签名,包名进行验证,而我没有之前配置好
3. appid审核通过就有的,直接写到代码里就行了,包名也就是我们代码所在的那个包
关键是应用签名,应用签名其实就是apk包的md5值,(签名证书什么的一直没搞懂,感觉对不起教了我三年的安全学老师)
(1) 如果使用adt直接debug运行程序,可以在
Eclipse的Window->Preferences->Android->Build
里面看到应用的md5,
我们拿到md5后去掉冒号填进微信开放平台里就行了,然后debug的程序就可以运行了
(2) 如果项目要正式导出apk,我们依然要拿到apk的md5值作为应用签名填进微信开放平台里
这时候可以用jdk的keytool运行 我们导出apk时用到的keystore文件, 然后就可以看到 用该keystore生成的apk的md5了
命令行大概是这样子: (我的keystore命名为 asd.keystore)
e:
cd Program Files\Java\jdk1.7.0_51\bin
keytool -list -v -keystore asd.keystore
cd Program Files\Java\jdk1.7.0_51\bin
keytool -list -v -keystore asd.keystore
输入keystore的密码 就可以看到md5
下面是具体操作:
//微博默认分享功能是让用户授权给友盟 而不是用我们在新浪注册的app id
1.
http://dev.umeng.com/social/android/sdk-download 下载sdk,我写的是 umeng_android_social_sdk_3.3.8_custom.zip
//微博默认分享功能是让用户授权给友盟 而不是用我们在新浪注册的app id
2.把sdk里面的libs和res全部解压到项目文件夹里
在项目的manifest文件里 添加相应信息
我加了
<activity
android:name="com.umeng.socialize.view.ShareActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@style/Theme.UMDialog"
android:windowSoftInputMode="stateVisible|adjustResize" >
</activity>
<meta-data
android:name="UMENG_APPKEY"
android:value="
你的友盟appid" >
</meta-data>
和一堆uses-permission
4.上代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test_umeng_share"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.test_umeng_share.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.umeng.socialize.view.ShareActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@style/Theme.UMDialog"
android:windowSoftInputMode="stateVisible|adjustResize" >
</activity>
<meta-data
android:name="UMENG_APPKEY"
android:value="我的umeng appid" >
</meta-data>
</application>
<!-- ###################声明SDK使用的相关权限###################### -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 检测网络状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取mac地址作为用户的备用唯一标识 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取用户手机的IMEI,用来唯一的标识用户。 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 缓存资源优先存入SDcard -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 允许应用程序联网,以便向我们的服务器端发送数据。 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于评论模块分享位置信息 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 用于评论模块分享位置信息 -->
</manifest>
public class MainActivity extends Activity {
public Button shareButton1,shareButton2,shareButton3,shareButton4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
shareButton1 = (Button)findViewById(R.id.button1);
shareButton2 = (Button)findViewById(R.id.button2);
shareButton3 = (Button)findViewById(R.id.button3);
shareButton4 = (Button)findViewById(R.id.button4);
initShareButtonListener(); //设置分享按钮的监听器
}
private void initShareButtonListener() {
shareButton1.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View arg0) {
startShare1(); //分享方式1
}
});
shareButton2.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View arg0) {
startShare2(); //分享方式2
}
});
shareButton3.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View arg0) {
startShare3(); //微信分享方式1 分享到微信好友
}
});
shareButton4.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View arg0) {
startShare4(); //微信分享方式2 分享到朋友圈
}
});
}
//这种分享方式 只会有toast提示,无法让用户编辑要分享的内容
public void startShare1() {
String share_string = "我是要被分享的字符串";
String share_url_img = "http://www.umeng.com/images/pic/banner_module_social.png"; //分享的图片链接
// 首先在您的Activity中添加如下成员变量
/* 设置要分享的内容 这里的这种方式对大部分平台适用 还有一些另外的方式可以针对个别平台进行更细节的设定*/
UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share", RequestType.SOCIAL);
// 设置分享内容
mController.setShareContent(share_string);
// 设置分享图片, 参数2为图片的url地址
mController.setShareMedia(new UMImage(this, share_url_img));
mController.directShare(this, SHARE_MEDIA.SINA,
new SnsPostListener() {
@Override
public void onStart() {
Toast.makeText(getApplicationContext(), "分享开始",Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(SHARE_MEDIA platform,int eCode, SocializeEntity entity) {
if(eCode == StatusCode.ST_CODE_SUCCESSED){
Toast.makeText(getApplicationContext(), "分享成功",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "分享失败",Toast.LENGTH_SHORT).show();
}
}
});
}
//提供一个编辑界面
public void startShare2() {
String share_string = "我是要被分享的字符串";
String share_url_img = "http://www.umeng.com/images/pic/banner_module_social.png"; //分享的图片链接
// 首先在您的Activity中添加如下成员变量
/* 设置要分享的内容 这里的这种方式对大部分平台适用 还有一些另外的方式可以针对个别平台进行更细节的设定*/
UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share", RequestType.SOCIAL);
// 设置分享内容
mController.setShareContent(share_string);
// 设置分享图片, 参数2为图片的url地址
mController.setShareMedia(new UMImage(this, share_url_img));
// 参数1为Context类型对象, 参数2为要分享到的目标平台, 参数3为分享操作的回调接口
mController.postShare(this,SHARE_MEDIA.SINA,
new SnsPostListener() {
@Override
public void onStart() {
Toast.makeText(getApplicationContext(), "开始分享.", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(SHARE_MEDIA platform, int eCode,SocializeEntity entity) {
if (eCode == 200) {
Toast.makeText(getApplicationContext(), "分享成功.", Toast.LENGTH_SHORT).show();
} else {
String eMsg = "";
if (eCode == -101){
eMsg = "没有授权";
}
Toast.makeText(getApplicationContext(), "分享失败[" + eCode + "] " +
eMsg,Toast.LENGTH_SHORT).show();
}
}
});
}
//我这边微信分享的部分还没有实现 因为需要有一个审核通过的微信appid,虽然这里返回"分享成功",但是并没有分享出去
//下面是微信的两种分享方式 把SHARE_MEDIA.SINA改为SHARE_MEDIA.WEIXIN,其他的平台也类似
public void startShare3() {
// 首先在您的Activity中添加如下成员变量
/* 设置要分享的内容 这里的这种方式对大部分平台适用 还有一些另外的方式可以针对个别平台进行更细节的设定*/
UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share", RequestType.SOCIAL);
// wx123456789是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
String appID = "wx123456789";
// 微信图文分享必须设置一个url
String contentUrl = "http://www.umeng.com/social";
// 添加微信平台,参数1为当前Activity, 参数2为用户申请的AppID, 参数3为点击分享内容跳转到的目标url
UMWXHandler wxHandler = mController.getConfig().supportWXPlatform(this,appID, contentUrl);
wxHandler.setWXTitle("友盟社会化组件还不错...");
WeiXinShareContent weixinContent = new WeiXinShareContent();
// weixinContent.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,微信");
weixinContent.setTitle("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,微信");
weixinContent.setTargetUrl("http://www.umeng.com");
weixinContent.setShareImage(new UMImage(this, "http://www.umeng.com/images/pic/banner_module_social.png"));
mController.setShareMedia(weixinContent);
// 参数1为Context类型对象, 参数2为要分享到的目标平台, 参数3为分享操作的回调接口
mController.postShare(this,SHARE_MEDIA.WEIXIN, new SnsPostListener() {
@Override
public void onStart() {
Toast.makeText(getApplicationContext(), "开始分享.", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(SHARE_MEDIA platform, int eCode,SocializeEntity entity) {
if (eCode == 200) {
Toast.makeText(getApplicationContext(), "分享成功.", Toast.LENGTH_SHORT).show();
} else {
String eMsg = "";
if (eCode == -101){
eMsg = "没有授权";
}
Toast.makeText(getApplicationContext(), "分享失败[" + eCode + "] " +
eMsg,Toast.LENGTH_SHORT).show();
}
}
});
}
public void startShare4() {
// 首先在您的Activity中添加如下成员变量
/* 设置要分享的内容 这里的这种方式对大部分平台适用 还有一些另外的方式可以针对个别平台进行更细节的设定*/
UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share", RequestType.SOCIAL);
// wx123456789是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
String appID = "wx123456789";
// 微信图文分享必须设置一个url
String contentUrl = "http://www.umeng.com/social";
// 配置sdk
UMWXHandler circleHandler = mController.getConfig().supportWXCirclePlatform(this,appID, contentUrl) ;
circleHandler.setCircleTitle("友盟社会化组件还不错...");
// 配置要分享的内容
CircleShareContent circleMedia = new CircleShareContent(new UMImage(this,"http://www.umeng.com/images/pic/social/chart_1.png"));
circleMedia.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,朋友圈");
mController.setShareMedia(circleMedia);
// 参数1为Context类型对象, 参数2为要分享到的目标平台, 参数3为分享操作的回调接口
mController.postShare(this,SHARE_MEDIA.WEIXIN_CIRCLE,
new SnsPostListener() {
@Override
public void onStart() {
Toast.makeText(getApplicationContext(), "开始分享.", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(SHARE_MEDIA platform, int eCode,SocializeEntity entity) {
if (eCode == 200) {
Toast.makeText(getApplicationContext(), "分享成功.", Toast.LENGTH_SHORT).show();
} else {
String eMsg = "";
if (eCode == -101){
eMsg = "没有授权";
}
Toast.makeText(getApplicationContext(), "分享失败[" + eCode + "] " +
eMsg,Toast.LENGTH_SHORT).show();
}
}
});
}
}
最终效果
搞了我两天,感觉再也不会爱了.........