umeng3社会化分享SDK技术评测-1第三方分享

前言:社会化分享SDK更新很快,目前最高是5.0.1。5.0抛弃之前的版本完全重构,尤其要注意的是5.0版本的功能也只有分享与授权并无其他功能。这就意味着:需要原功能的开发者,请继续使用v4.3.0版本。笔者尝试过使用最高的,但由于能力问题,现在乖乖用4.3.但是,看了4.3的官方demo,实在是想吐槽。算了,自己整理,老老实实的干。

注意:社会化分享需要的key比较多,需要到各平台分别获取

一、总纲

 1.下载并导入分享SDK(main/libs''main/res)

http://dev.umeng.com/social/android/sdk-download

 2.将分享平台copy到工程

将platforms提供的文件夹拷入工程目录下, 和工程本身相应目录合并。

 3. 配置manifest 

各个平台需要的培训有所不同,这部分官方提供的源码中说的很详细,直接copy。注意:由于copy了部分Activity,注意配置文件中他们的路径,这里要仔细核对,尤其是“.xxActivity”。

此处,在官方demo基础上,修改适合本应用的xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.personalblog"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/logo"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Black.NoTitleBar"
        >
         <!--  android:name="com.personalblog.test.activity.WelActivity" -->
        <activity
            android:name="com.personalblog.MainActivity"
            android:configChanges="orientation|keyboard"
            android:label="@string/app_name"
             android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- 友盟AppKey, 需要替换成你自己的 -->
        <meta-data
            android:name="UMENG_APPKEY"
            android:value="5691bdf8e0f55aec4b00197d" >
        </meta-data>
        <!-- 4eaee02c527015373b000003 -->
        <!-- android:value="52a98cf856240b902211203e" > -->


        <!-- *************************    分享相关的注册 START **************************** -->
        <!-- 分享内容编辑页 -->
        <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>

        <!-- 腾讯SSO授权的Activity注册 -->
        <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
				<!-- 100424468,如果你使用的公用账号,则不需要修改;否则修改成你在QQ开放平台申请的 APP ID-->
                <data android:scheme="tencent1105024715" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <!-- 微信回调activity -->
        <activity
            android:name="com.personalblog.test.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <!-- 易信回调activity -->
        <activity
            android:name="com.personalblog.test.yxapi.YXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <!-- 人人SSO授权所需的OAuthActivity -->
        <activity
            android:name="com.renn.rennsdk.oauth.OAuthActivity"
            android:configChanges="orientation|navigation|keyboardHidden" />

        <!-- facebook相关 -->
        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <!--<provider-->
            <!--android:name="com.facebook.FacebookContentProvider"-->
            <!--android:authorities="com.facebook.app.FacebookContentProvider1444817025830662"-->
            <!--android:exported="true" />-->

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

        <!-- *************************    分享相关的注册 END **************************** -->


        <!-- 评论相关注册  START -->
        <activity
            android:name="com.umeng.socialize.view.CommentActivity"
            android:configChanges="orientation|keyboard"
            android:theme="@style/Theme.UMDefault" >
        </activity>
        <activity
            android:name="com.umeng.socialize.view.CommentDetail"
            android:configChanges="orientation|keyboard"
            android:noHistory="true"
            android:theme="@style/Theme.UMDefault" >
        </activity>
        <activity
            android:name="com.umeng.socialize.view.CommentDetailNoMap"
            android:configChanges="orientation|keyboard"
            android:noHistory="true"
            android:theme="@style/Theme.UMDefault" >
        </activity>
        <!-- 评论相关注册  End -->
       

        <!-- Socialize Example Activity -->

        <activity
            android:name="com.personalblog.test.activity.NavigationActivity"
            android:configChanges="orientation|keyboard"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
        </activity>
        <activity
            android:name="com.personalblog.test.activity.SocialHomeActivity"
            android:configChanges="orientation|keyboard"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.personalblog.test.activity.SwitchActivity"
            android:configChanges="orientation|keyboard"
            android:label="@string/app_name"
            android:launchMode="standard" >
        </activity>
        <activity
            android:name="com.personalblog.test.activity.CustomPlatformActivity"
            android:configChanges="orientation|keyboard"
            android:label="@string/umeng_example_home_btn_plus" >
        </activity>
        <activity
            android:name="com.personalblog.test.activity.ActionBarExampleDetail"
            android:configChanges="orientation|keyboard"
            android:label="@string/umeng_example_home_btn_plus" >
        </activity>

        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="Umeng" >
        </meta-data>

        <uses-library
            android:name="com.google.android.maps"
            android:required="false" />
        <uses-library android:name="android.test.runner" />
    </application>

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="14"
        tools:overrideLibrary="com.umeng.socialize.evernote,com.umeng.socialize.pinterest"
        />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <!-- renren sso Permission for Unit Test -->
    <!-- QQ、QQ空间所需权限 -->
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.SET_DEBUG_APP" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

</manifest>

4. 在分享位置的通过某个按钮或其他方法弹出分享面板

二、QQ和QQ空间分享集成过程

注意:需先在QQ互联成为开发者,便可以创建应用获取Id和Key。(http://connect.qq.com/)QQ和QQ空间,使用的是同一个id和key。

1. 在oncreate()配置需要分享的相关平台  configPlatforms();

    /**
     * 配置分享平台参数</br>
     */
    private void configPlatforms() {
        addQQQZonePlatform();
    }

    private void addQQQZonePlatform() {
        String appId = "1105024715";
        String appKey = "sEi5DWJjMS9TJeU7";
        // 添加QQ支持, 并且设置QQ分享内容的target url
        UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this,appId, appKey);
        qqSsoHandler.addToSocialSDK();

        // 添加QZone平台
        QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, appId, appKey);
        qZoneSsoHandler.addToSocialSDK();
    }

2.在oncreate()中设置分享的内容   setShareContent();

	/**
     * 根据不同的平台设置不同的分享内容</br>
     */
	private void setShareContent() {
///*******************************分享资源**************************************
		UMImage qzone_thumbImage = new UMImage(this,R.drawable.qzone_thumb);
		String  targetUrl = "http://csdnblog.bmob.cn";
		String  title = "我的分享";
		String  content = "我的分享:csdn博客个人特色版,你值得拥有!";
///-----------------------------QQ和QQ空间------------------
	    /**
	     * @功能描述 : 添加QQ平台支持 QQ分享的内容, 包含四种类型, 即单纯的文字、图片、音乐、视频. 参数说明 : title, summary,
	     *       image url中必须至少设置一个, targetUrl必须设置,网页地址必须以"http://"开头 . title :
	     *       要分享标题 summary : 要分享的文字概述 image url : 图片地址 [以上三个参数至少填写一个] targetUrl
	     *       : 用户点击该分享时跳转到的目标地址 [必填] ( 若不填写则默认设置为友盟主页 )
	     * @return
	     */
        // 设置QQ空间分享内容
        QZoneShareContent qzone = new QZoneShareContent();
        qzone.setTitle(title);
        qzone.setShareMedia(qzone_thumbImage);
        qzone.setShareContent(content);
        qzone.setTargetUrl(targetUrl);
        mController.setShareMedia(qzone);

     // 设置QQ分享内容
        QQShareContent qqShareContent = new QQShareContent();
        qqShareContent.setTitle(title);
        qqShareContent.setShareMedia(qzone_thumbImage);
        qqShareContent.setShareContent(content);
        qqShareContent.setTargetUrl(targetUrl);
        mController.setShareMedia(qqShareContent);
        
	}

3.在分享位置的通过某个按钮或其他方法弹出分享面板

	public void onClick(View view) {
		  int id = view.getId();
	        switch ( id ) {
	            case R.id.button_share:
	                mController.getConfig().setPlatforms(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,
	                        SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT,
	                        SHARE_MEDIA.DOUBAN,
	                        SHARE_MEDIA.RENREN);
	                //弹出分享面板
	                mController.openShare(this, false);
	                break;


4.最后的补充说明

这是应该是最简单的分享了,没有使用第三方授权,也没用监听分享后的状态,便完成QQ和QQ空间的分享。

三、其他分享集成过程

笔者集成了微信、朋友圈、短信、邮件、新浪微博(之前可以,最近不知为毛又坏了,可能是开发者为审核通过),方法完全是和QQ一样。其中,微信系列算是比较坑的,因为需要的keystore是和申请者的电脑绑定的,所以其他人调试就。。。此外,微信调试是时候会等一会就闪没了。我搜索了下原因,有是因为秘钥输错的,我的则是分享内容不全的原因(itle, summary,image url中必须至少设置一个,就都没填)。在使用新浪微博时,注意回调就好。

该部分代码:

	
	 ///umeng分享start///
	/**
	 * 弹出分享面板,供页面调用
	 */
	public void share(){
        mController.getConfig().setPlatforms(SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.SINA,SHARE_MEDIA.EMAIL,SHARE_MEDIA.SMS);
        //弹出分享面板
        mController.openShare(this, false);
	}
	/**
     * 配置分享平台参数</br>
     */
    private void configPlatforms() {
        // 添加新浪SSO授权
        mController.getConfig().setSsoHandler(new SinaSsoHandler());

        // 添加QQ、QZone平台
        addQQQZonePlatform();

        // 添加微信、微信朋友圈平台
        addWXPlatform();
        
        addSMSPlatform();
        
        addEmail();
    }
    
    private void addSMSPlatform() {
	// 添加短信
	SmsHandler smsHandler = new SmsHandler();
	smsHandler.addToSocialSDK();
    }
    
    /**
     * @功能描述 : 添加微信平台分享
     * @return
     */
    private void addWXPlatform() {
        // 注意:在微信授权的时候,必须传递appSecret
        // wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
        String appId = Constants.WEIXIN_ID;
        String appSecret = Constants.WEIXIN_KEY;
        // 添加微信平台
        UMWXHandler wxHandler = new UMWXHandler(this, appId, appSecret);
        wxHandler.addToSocialSDK();

        // 支持微信朋友圈
        UMWXHandler wxCircleHandler = new UMWXHandler(this, appId, appSecret);
        wxCircleHandler.setToCircle(true);
        wxCircleHandler.addToSocialSDK();
    }
    
    private void addQQQZonePlatform() {
        String appId = Constants.QQ_ID;
        String appKey = Constants.QQ_KEY;
        // 添加QQ支持, 并且设置QQ分享内容的target url
        UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this,appId, appKey);
        qqSsoHandler.addToSocialSDK();

        // 添加QZone平台
        QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, appId, appKey);
        qZoneSsoHandler.addToSocialSDK();
    }
    
    /**
     * 添加Email平台</br>
     */
    private void addEmail() {
        // 添加email
        EmailHandler emailHandler = new EmailHandler();
        emailHandler.addToSocialSDK();
    }
    
	/**
     * 根据不同的平台设置不同的分享内容</br>
     */
	private void setShareContent() {
///*******************************分享资源**************************************
		UMImage qzone_thumbImage = new UMImage(this,R.drawable.logo);
		String  targetUrl = "http://csdnblog.bmob.cn";
		String  title = "我的分享";
		String  content = "我的分享:够哈皮,购物吃喝乐翻天,你值得拥有!";
///-----------------------------内容配置------------------
	    /**
	     * @功能描述 : 添加QQ平台支持 QQ分享的内容, 包含四种类型, 即单纯的文字、图片、音乐、视频. 参数说明 : title, summary,
	     *       image url中必须至少设置一个, targetUrl必须设置,网页地址必须以"http://"开头 . title :
	     *       要分享标题 summary : 要分享的文字概述 image url : 图片地址 [以上三个参数至少填写一个] targetUrl
	     *       : 用户点击该分享时跳转到的目标地址 [必填] ( 若不填写则默认设置为友盟主页 )
	     * @return
	     */
        // 设置QQ空间分享内容
        QZoneShareContent qzone = new QZoneShareContent();
        qzone.setTitle(title);
        qzone.setShareMedia(qzone_thumbImage);
        qzone.setShareContent(content);
        qzone.setTargetUrl(targetUrl);
        mController.setShareMedia(qzone);

        // 设置QQ分享内容
        QQShareContent qqShareContent = new QQShareContent();
        qqShareContent.setTitle(title);
        qqShareContent.setShareMedia(qzone_thumbImage);
        qqShareContent.setShareContent(content);
        qqShareContent.setTargetUrl(targetUrl);
        mController.setShareMedia(qqShareContent);
        
        // 设置新浪分享内容
        SinaShareContent sinaContent = new SinaShareContent();
        sinaContent.setTitle(title);
        sinaContent.setShareMedia(qzone_thumbImage);
        sinaContent.setShareContent(content);
        sinaContent.setTargetUrl(targetUrl);
        mController.setShareMedia(sinaContent);
        
        // 设置微信分享的内容
        WeiXinShareContent weixinContent = new WeiXinShareContent();
        weixinContent.setTitle(title);
        weixinContent.setShareMedia(qzone_thumbImage);
        weixinContent.setShareContent(content);
        weixinContent.setTargetUrl(targetUrl);
        mController.setShareMedia(weixinContent);

        // 设置朋友圈分享的内容
        CircleShareContent circleMedia = new CircleShareContent();
        circleMedia.setTitle(title);
        circleMedia.setShareMedia(qzone_thumbImage);
        circleMedia.setShareContent(content);
        circleMedia.setTargetUrl(targetUrl);
        mController.setShareMedia(circleMedia);
        
        // 设置短信分享内容
        SmsShareContent sms = new SmsShareContent();
        sms.setShareContent(content);
        // sms.setShareImage(urlImage);
        mController.setShareMedia(sms);
        
        // 设置邮件分享内容, 如果需要分享图片则只支持本地图片
        MailShareContent mail = new MailShareContent(qzone_thumbImage);
        mail.setTitle(title);
        mail.setShareContent(content);
        mController.setShareMedia(mail);

	}
	 ///umeng分享End///

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mContext = this;
		
		setContentView(bindLayout());
		initMap();
		initData();
		initView();
		initLisener();
        // 配置需要分享的相关平台
        configPlatforms();
        // 设置分享的内容
        setShareContent();
	}

	@Override
	public void onClick(View v) {
		super.onClick(v);
		if(v == rl_past_bet){
			Intent intent = new Intent(this, PastBetActivity.class);
			startActivity(intent);
		}else if(v == tv_more){
			Intent intent = new Intent(this, AllBetActivity.class);
			startActivity(intent);
		}else if(v == tv_submit){
			Intent intent = new Intent(this, PayActivity.class);
			startActivity(intent);
		}else if (v==past_open) {
			Intent intent = new Intent(this, PastBetActivity.class);
			startActivity(intent);
		}else if (v==iv_share) {
			toast("正在进行分享");
			share();
		}
	}

平台SDK什么的就下载官方的直接导入就可以了。

后言:这里的分享,是很简单的入门级分享,使用的是系统的分享版,但感觉已经够用了。此部分还有第三方登陆及摇一摇等特色化插件,这个只等稍后学习到再用在学了。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值