用友盟的组件实现分享内容到新浪微博,微信,朋友圈

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,
         (这是 Android 编译工具为我们准备好的,具体资料看http://www.cnblogs.com/xirihanlin/archive/2010/04/29/1724080.html)
         我们拿到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
         输入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();
		                     }
		              }
		});
	}
	
}


最终效果
     




搞了我两天,感觉再也不会爱了.........


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值