友盟享集成与走过的坑
项目需要使用友盟分享,之前都是使用快速集成,集成过程中也有各种坑,通过网上查阅相关资料都克服了。这次集成友盟时,其中QQ的相关SDK怎么也下载不下来,笨人笨方法,我决定用一下手动集成。记录一下使用过程中碰到的问题,以防以后再碰到
使用环境:windows7,AndroidStudio3.1
一、下载相关sdk
选择相应的SDK,这次仅使用了qq、微信、微博相关的,下载相关社会化分享SDK,下载后解压,备用;
二、下载SDK集成辅助工具
辅助工具需要java环境才能使用,运行友盟集成辅助工具
使用步骤:
- 选择Android
- 点击第一个菜单“…”
- 选择下载的sdk解压后的文件夹
- 自动生成library包UMLibrary,在项目中引用这个library
三、添加回调Activity(这里只用了微信)
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity,Activity中不需要添加任何代码,但是需要配置Android Manifest XML
在Android Manifest XML中添加
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
四、配置Android Manifest XML
微信相关的配置在上一步已经做好,这里只写QQ和微博相关的,使用时可直接将下面的代码复制粘贴到项目Android Manifest XML中
新浪微博:
<activity
android:name="com.umeng.socialize.media.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
</activity>
<activity
android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize">
</activity>
<activity
android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
qq:
注意:把AuthActivity中data的scheme值换成你的QQ appkey,前面的tencent要保留
<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="tencent你的appkey" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
五、权限配置
请在AndroidManifest中添加如下权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
如果需要使用QQ纯图分享或避免其它平台纯图分享的时候图片不被压缩,可以增加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Android6.0权限适配
请查看你的build.gradle文件,如果 targetSdkVersion小于或等于22,可以忽略这一步,如果大于或等于23,需要做权限的动态申请,目前我的项目只需要申请下面的权限,以后有需要自行查看官方文档:
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CALL_PHONE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE
六、初始化设置
- 首先去各个平台申请注册,获得各平台appKey,然后设置各个平台的appKey,参考代码如下,这里只设置qq、微信、微博。更多参考官方文档
PlatformConfig.setWeixin("你的AppID", "你的AppSecret");
//新浪微博,最后一个参数为回调地址,
PlatformConfig.setSinaWeibo("你的App Key", "你的App Secret","http://sns.whalecloud.com");
//QQ
PlatformConfig.setQQZone("你的APP ID", "你的APP KEY");
- 如果需要启用debug模式,请在初始化之前添加下面的代码,注意:产线环境关闭debug
UMConfigure.setLogEnabled(true);
- 在Application中调用初始化接口
//第二个参数为友盟的AppKey,其他的使用代码中的值
UMConfigure.init(this, "AppKey", "umeng", UMConfigure.DEVICE_TYPE_PHONE, "");
到此为止,全部配置完成,如何使用参考官方文档,写这个文章仅做自己以后参考
下面列举一下需要注意的事项以及遇到的坑
问题1:
集成UMLibrary时报错
The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?
翻译过来就是:
“SourceSet” 的'instrumentTest' 没有被Android Gradle插件识别。也许你拼错吗?
解决方法:
修改UMLibrary中build.gradle文件,将instrumentTest.setRoot('tests')
改为androidTest.setRoot('tests')
,重新同步编译即可成功
注意事项:
- QQ相关配置Android Mainfest XML时,data中scheme的值前面必须添加“tencent”,初始化配置平台appKey的时候不需要添加
- 添加微信回调时,必须在包名目录下创建WXEntryActivity
- 需要在使用QQ分享或者授权的Activity中,添加下面代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}