集成【友盟+】SDK以前,您首先须要到 【友盟+】官网注册而且添加新应用,得到Appkey。java
一、填写应用基本信息,获取AppKeyandroid
首先添加新应用,输入应用名和选择平台信息,选择应用类别,点击提交冰获取应用appKey,获得Android 惟一Appkeyapi
二、下载SDK并去集成微信
找到 https://developer.umeng.com/sdk/android界面,选择社会化分享 SDK,,点击设置,选择须要分享的平台,点击下载,下载解压后,将common文件夹下的文件夹拷贝到项目中,再将share文件夹下的main文件夹以及platforms(选择你想使用的平台便可)和shareboard文件夹下对应的资源文件和jar放入你的工程。app
三、添加回调Activityide
在包名目录下建立wxapi文件夹,新建一个名为WXEntryActivity
的activity继承WXCallbackActivity
。gradle
与微信类似,支付宝须要在包名目录下建立apshare文件夹,而后创建一个ShareEntryActivity的类,继承ShareCallbackActivity。ui
QQ与新浪不须要添加Activity,但须要在使用QQ分享或者受权的Activity中,添加this
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); }
注意onActivityResult
不可在fragment中实现,若是在fragment中调用登陆或分享,须要在fragment依赖的Activity中实现spa
四、配置Android Manifest XML
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<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="tencentappkey" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize"/>
五、权限添加
<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"/>
请查看你的build.gradle
文件,若是 targetSdkVersion
小于或等于22,能够忽略这一步,若是大于或等于23,须要作权限的动态申请:
其中123是requestcode,能够根据这个code判断,用户是否赞成了受权。若是没有赞成,能够根据回调进行相应处理:
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { }
添加读写文件的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
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.WRITE_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); }
六、初始化设置
初始化须要在您的Application中调用咱们的初始化接口:
private void initUMeng() { PlatformConfig.setWeixin("微信 id", "微信 secret"); PlatformConfig.setQQZone("QQ id", "QQ key"); // 一些分享配置 UMShareConfig config = new UMShareConfig(); config.isOpenShareEditActivity(true); config.isNeedAuthOnGetUserInfo(true); config.setSinaAuthType(UMShareConfig.AUTH_TYPE_SSO); UMShareAPI.get(getApplicationContext()).setShareConfig(config); }
友盟分享分为两种形式:
打开分享面板的代码以下:
new ShareAction(MainActivity.this).withText("hello") .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN) .setCallback(umShareListener).open();
new ShareAction(MainActivity.this) .setPlatform(SHARE_MEDIA.QQ)//传入平台 .withText("hello")//分享内容 .setCallback(umShareListener)//回调监听器 .share();
其中umShareListener为回调监听,构建以下:
private UMShareListener shareListener = new UMShareListener() { /** * @descrption 分享开始的回调 * @param platform 平台类型 */ @Override public void onStart(SHARE_MEDIA platform) { } /** * @descrption 分享成功的回调 * @param platform 平台类型 */ @Override public void onResult(SHARE_MEDIA platform) { Toast.makeText(ShareDetailActivity.this,"成功了",Toast.LENGTH_LONG).show(); } /** * @descrption 分享失败的回调 * @param platform 平台类型 * @param t 错误缘由 */ @Override public void onError(SHARE_MEDIA platform, Throwable t) { Toast.makeText(ShareDetailActivity.this,"失败"+t.getMessage(),Toast.LENGTH_LONG).show(); } /** * @descrption 分享取消的回调 * @param platform 平台类型 */ @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(ShareDetailActivity.this,"取消了",Toast.LENGTH_LONG).show(); } };
更多的能够参照友盟文档
https://developer.umeng.com/docs/66632/detail/66639
登陆使用(获取微信QQ详细信息,用户名等):
img_qq.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { UMShareAPI.get(LoginActivity.this).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, authListener); } }); img_wechat.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { UMShareAPI.get(LoginActivity.this).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.WEIXIN, authListener); } }); UMAuthListener authListener = new UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) { } @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { String temp = ""; for (String key : data.keySet()) { temp = temp + key + " : " + data.get(key) + "\n"; } toastMsg(temp); } @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { toastMsg("错误" + t.getMessage()); } @Override public void onCancel(SHARE_MEDIA platform, int action) { } }; /** * 接收登陆返回数据 * * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); }