自动集成的方式现在只支持微信,QQ,新浪三个平台,如果需要使用其它平台请选择手动集成。
1:添加依赖
2:添加权限
3:在调用界面添加动态申请权限:
4:添加平台相关配置
(1)QQ相关配置:
1:添加依赖
compile 'com.umeng.sdk:share-core:latest.integration' compile 'com.umeng.sdk:share-qq:latest.integration' compile 'com.umeng.sdk:share-wechat:latest.integration' compile 'com.umeng.sdk:share-sina:latest.integration' compile 'com.umeng.sdk:common:latest.integration'//官方文档中没有这个依赖,要是不添加会导致初始化的时候的UMConfigure这个类不能识别
2:添加权限
<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.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
3:在调用界面添加动态申请权限:
if(Build.VERSION.SDK_INT>=23){ String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS}; ActivityCompat.requestPermissions(this,mPermissionList,123); }
4:添加平台相关配置
(1)QQ相关配置:
在app级别 build.gradle中的 defaultConfig下添加manifestPlaceholders = [qqappid: "你的qq appid"]
//不配置会出现下面的错误
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。里面不用做操作。并在AndroidManifest中添加
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
5:在myapplication添加各平台的第三方key以及在onCreate中初始化。
(第三方账号申请地址http://dev.umeng.com/social/android/operation)
@Override public void onCreate() { super.onCreate(); UMConfigure.init(this,"你的应用在友盟上的APPKEY","umeng",UMConfigure.DEVICE_TYPE_PHONE,""); }
{
//友盟相关平台配置。注意友盟官方新文档中没有这项配置,但是如果不配置会吊不起来相关平台的授权界面 PlatformConfig.setWeixin("你的微信APPID", "你的微信AppSecret");//微信APPID和AppSecret PlatformConfig.setQQZone("你的QQAPPID", "你的QQAppSecret");//QQAPPID和AppSecret PlatformConfig.setSinaWeibo("你的微博APPID", "你的微博APPSecret","微博的后台配置回调地址");//微博 }6:在使用第三方登录界面中的代码:
mShareAPI = UMShareAPI.get(this);
mShareAPI.getPlatformInfo(this, SHARE_MEDIA.QQ, umAuthListener);//QQ登录
mShareAPI.deleteOauth(this, SHARE_MEDIA.QQ, umAuthListener);//撤销QQ授权
umAuthListener = new UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) {} @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { // KLog.e("openid: " + data.get("uid")); // KLog.e("昵称: " + data.get("name")); // KLog.e("头像: " + data.get("iconurl")); // KLog.e("性别: " + data.get("gender")); } @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { } @Override public void onCancel(SHARE_MEDIA platform, int action) { } };
//在使用界面中要添加onActivityResult方法,否则授权回调不成功,获取不到第三方信息(如果在fragment中使用第三方登录,则在依附的activity中重写此方法)
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); }7:在使用分享界面中的代码
UMImage image = new UMImage(this, R.mipmap.logo);//分享图标 final UMWeb web = new UMWeb("你要分享的地址"); //切记切记 这里分享的链接必须是http开头 web.setTitle("你要分享内容的标题");//标题 web.setThumb(image); //缩略图 web.setDescription("你要分享内容的描述");//描述
new ShareAction(activity) .setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE) .setShareboardclickCallback(new ShareBoardlistener() { @Override public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) { if (share_media == SHARE_MEDIA.QQ) { KLog.e("点击QQ"); new ShareAction(activity).setPlatform(SHARE_MEDIA.QQ) .withMedia(web) .setCallback(umShareListener) .share(); } else if (share_media == SHARE_MEDIA.WEIXIN) { KLog.e("点击微信"); new ShareAction(activity).setPlatform(SHARE_MEDIA.WEIXIN) .withMedia(web) .setCallback(umShareListener) .share(); } else if (share_media == SHARE_MEDIA.QZONE) { new ShareAction(activity).setPlatform(SHARE_MEDIA.QZONE) .withMedia(web) .setCallback(umShareListener) .share(); } else if (share_media == SHARE_MEDIA.WEIXIN_CIRCLE) { new ShareAction(activity).setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE) .withMedia(web) .setCallback(umShareListener) .share(); } } }).open();
umShareListener = new UMShareListener() { @Override public void onStart(SHARE_MEDIA platform) { //分享开始的回调 } @Override public void onResult(SHARE_MEDIA platform) { // Toast.makeText(ShareActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show(); } @Override public void onError(SHARE_MEDIA platform, Throwable t) { // Toast.makeText(ShareActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show(); } @Override public void onCancel(SHARE_MEDIA platform) { // Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show(); } };
//在使用界面中要添加onActivityResult方法,否则授权回调不成功,获取不到第三方信息(如果在fragment中使用第三方登录,则在依附的activity中重写此方法)
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); }