学习笔记之——友盟社会化组件精简版集成qq微信新浪微博

        用过友盟社会化组件SDK的小伙伴们肯定都知道友盟在推出精简版SDK之前jar包是很大的,在小型项目使用还没什么大问题,但是如果公司的项目本身就比较大型那就非常容易出现Dex方法数量超过65536的现象了。但是很开心的是友盟在2016年9月23号推出了Android 社会化组件SDK v6.0.0    友盟官方对此版本的描述是:

功能更新:
新浪微博推出了精简版,相比原生sdk体积减小57%
微信推出精简版,去除了支付的内容,避免个人开发者上传应用市场被拒问题,相比原生sdk体积减小43%
qq推出了精简版,相比原生sdk体积减小35%
修复内存泄露问题
修复新浪微博精简版本地图片分享失败、重复授权问题,及微信获取用户资料提示未授权问题
增加了集成工具,降低集成难度
增加了自检工具,方便开发者排查一些常见问题
增加android studio版demo,优化体验
微信推出精简版,去除了支付的内容,避免个人开发者上传应用市场被拒问题

        接着来看看友盟官方文档对完整版和精简版的对比:

以下信息是基于6.0.4以后的版本

1.微信
类型	                       精简版	                             完整版
jar大小	                       38.09k	                             235.32k
是否包含支付	不包含(需要额外引入微信支付的jar)	包含(不许额外引入微信支付的jar)
2.新浪
类型	          精简版	完整版
jar大小	          17.82k	701.21k
.so文件	          不需要	需要
3.QQ
类型	          精简版	完整版
jar大小      	  46.89k	348.65k

AndroidManifest(精简版):

<activity
        android:name="com.umeng.qq.tencent.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" />

            <data android:scheme="tencent100424468" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.umeng.qq.tencent.AssistActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>


AndroidManifest(完整版):

<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" />

            <data android:scheme="tencent100424468" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>


        看到精简版的体积一下子减少了不少我就感觉迫不及待下个新版本的SDK来玩玩啦~   以下所说是我下载友盟社会化组件Android v6.0.3版本

        友盟sdk下载网址http://dev.umeng.com/social/android/sdk-download

        果然,不仅是体积减小了,就连集合步骤也精简了一些,所以写下本篇文章记录一下友盟社会化组件精简版的集成过程,以方便后期项目集成参考。接下来上步骤和代码

        下载SDK时选择自己需要的平台选择精简版点击下载即可,此处我主要使用的是qq、微信、新浪微博三方,可以看出友盟的jar被一分为三了,以下三个便是友盟社会化的jar包:    然后其他三方只需要以下几个jar包即可搞定授权和分享:

         第一步:下载所需SDK解压后把文件夹里面的res/src/lib资源拷贝到自己的项目中,我个人比较习惯先导入官方demo测试看看效果,然后从官方demo里面copy清单文件资源文件等内容到自己项目中,当然也可以跟着文档一步一步copy。(好处来了,微博精简版不需要像完整版那么复杂配置清单文件,因为根本不用配置嘿嘿~)

         添加权限:

<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.READ_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" />

<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" />
        微信:

<activity
        android:name=".wxapi.WXEntryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        qq精简版:(注意此处和完整版有区别)

<activity
        android:name="com.umeng.qq.tencent.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" />

            <data android:scheme="tencent100424468" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.umeng.qq.tencent.AssistActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>
         分享编辑页:

<activity
        android:name="com.umeng.socialize.editorpage.ShareActivity"
        android:theme="@style/Theme.UMDefault"
        android:excludeFromRecents="true"
        />
         友盟appkey:

<meta-data
            android:name="UMENG_APPKEY"
            android:value="57bea46be0f55a1183001301" >
        </meta-data>
          在项目新建一个MyApplication继承Application,然后配置三方平台的appkey:
{
    PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
    PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad");
    PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
         MyApplication中初始化sdk,这个初始化最好放在application的程序入口中,防止意外发生:   

    UMShareAPI.get(this);


         第二步:是否已经有友盟账号和应用,没有的话需要先注册账号创建应用,然后修改清单文件的value为自己友盟平台的appkey

	<meta-data
            android:name="UMENG_APPKEY"
            android:value="57bea46be0f55a1183001301" >//修改成自己的appkey
        </meta-data>
          是否有qq、微信和微博开发者平台的账户和各个平台授权登录分享的权限,没有的话也需要一一去注册然后创建应用,然后提交审核即可,不过在此处比较坑的是微信平台啦~除非公司有账号,不然就得掏你自己的腰包花掉300块人民币大洋啦。

          第三步:接下来讲讲我在这三个平台上面的配置步骤和需要注意的地方吧!

1.精简版qq集成是最简单的了

精简版的qq集成基本上没什么好说的,步骤和完整版一样,jar包少了,注册账号完成创建应用后即可填写包名了,然后提交审核把appid和key复制到 MyApplication之前配置好的三方平台的appkey中的qq平台即可
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");

2.精简版微信集成

微信授权的集成应该是友盟社会化最容易出现错误的一部分吧!不管是论坛的反应还是自身项目的集成都是相对比较其他平台更容易出现bug的。

首先一步一步跟着友盟官方文档操作,先去微信平台注册一个账号,然后缴费300rmb获取授权和分享的权限,得到AppIDAppSecret

 

创建应用,填写正确的应用签名应用包名     

然后同QQ平台一样在MyApplication配置好的三方平台的appkey中的微信平台,

PlatformConfig.setWeixin("100424468", "c7394704798a158208a74ab60104f0ba");
记得粘贴回调类,相信用过完整版的小伙伴们肯定知道 检查微信回调WXEntryActivity是否是在包名路径下,例如你的包名是com.a.b,那么这个activity应该放在com.a.b.wxapi文件夹下

其实配置微信需要更多的细心,多多看文档哈~      http://dev.umeng.com/social/android/快速集成文档

3.精简版新浪微博集成需要注意:

(1).检查是否加入了onActivityResult中对应的代码,注意要写在activity中,不要放在fragment中。

(2).新浪微博精简版appkey需要在友盟后台进行配置,如下图所示:

(3)在MyApplication配置好的三方平台的appkey中的微博平台

PlatformConfig.setSinaWeibo("100424468", "c7394704798a158208a74ab60104f0ba");

授权代码:

/* *******************第三方登录开始*******************************/
	private void loginThirdParty(SHARE_MEDIA platform) {
		/**begin invoke umeng api**/
		mShareAPI.doOauthVerify(this, platform, umAuthListener);
	}
	
	/** auth callback interface**/
    private UMAuthListener umAuthListener = new UMAuthListener() {
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
            for (String key : data.keySet()) {
                Log.e("key:", "xxxxxx key = "+key+"    value= "+data.get(key));
            }
            Toast.makeText(getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();
        }
    };
	/** delauth callback interface**/
    private UMAuthListener umdelAuthListener = new UMAuthListener() {
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
            Toast.makeText(getApplicationContext(), "delete Authorize succeed", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            Toast.makeText( getApplicationContext(), "delete Authorize fail", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText( getApplicationContext(), "delete Authorize cancel", Toast.LENGTH_SHORT).show();
        }
    };
	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        mShareAPI.HandleQQError(this,requestCode,umAuthListener);
        mShareAPI.onActivityResult(requestCode, resultCode, data);
    }
/********************第三方登录结束*******************************/
使用平台:

platform = SHARE_MEDIA.SINA;
loginThirdParty(platform);

分享代码:

/***********************  友盟分享    *******************************/	
    private UMShareListener umShareListener = new UMShareListener() {
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Log.d("plat","platform"+platform);
            if(platform.name().equals("WEIXIN_FAVORITE")){
                Toast.makeText(CaijingDetailActivity.this,platform + "收藏成功",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(CaijingDetailActivity.this, platform + "分享成功", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Toast.makeText(CaijingDetailActivity.this,platform + "分享失败", Toast.LENGTH_SHORT).show();
            if(t!=null){
                Log.e("throw","throw:"+t.getMessage());
            }
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Toast.makeText(CaijingDetailActivity.this,platform + "分享取消", Toast.LENGTH_SHORT).show();
        }
    };
	
	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        /** attention to this below ,must add this**/
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
        Log.d("result","onActivityResult");
    }
/***********************  友盟分享    *******************************/

使用:

SHARE_MEDIA[] share_media = {SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.SINA};
	//TODO 分享到,分享内容字段
	private void sharTo(int position) {
		new ShareAction(this)
		.withTitle("分享")                           //分享的标题
		.withText(datas.get(position).getTitle())      //分享的文本
		.setPlatform(share_media[position])            //分享的平台
		.withTargetUrl(url)                            //分享的链接内容
		.setCallback(umShareListener)                  //回调
		.share();
	}

 4.集成过程中一些常见错误

1.  资源文件找不到

这是由于老版本升级到6.0,对应资源文件没有拷入,在下载的精简版sdk包里面有res/src/lib等相关资源文件拷贝到项目中即可

2.  微信授权一直等待,不成功

是否在包名路径下加入了回调activity并调用UmengTool.getSignature(activity)这个方法打印程序签名和包名,与微信后台的包名签名做对比,看是否一样,如果仍然有问题,把打印截图跟微信后台截图给客服人员。 调用UmengTool.getSignature(activity)如下图所示:

微信开发者平台签名如下图所示:

3.  微信授权或分享之后没有回调

1.你可以调用 UmengTool.checkWx(this)检查是否配置成功 

2.检查微信回调WXEntryActivity是否是在包名路径下,例如你的包名是com.a.b,那么这个activity应该放在com.a.b.wxapi文件夹下

4.  微信分享链接显示为空

这是由于没有设置title,所以title为空不是链接为空 

2.如果开了混淆需要加入附录中的混淆文件

5.  微博分享出现error, User is not in platform app test list

应用没有审核通过,需要在微博后台添加测试账号或者提交应用审核通过即可

demo下载地址:http://download.csdn.net/detail/lxlyhm/9690423

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值