新浪微博开放平台http://open.weibo.com/有帐号就能够,常常刷微博的小伙伴能够直接登陆喽,注意修改安全域名同时确保受权回调页与代码中配置一致。css
登陆微信开放平台https://open.weixin.qq.com/官网, 审核经过后获取到微信AppID及AppSecret(注意保存好,平台不会再显示忘了须要重置),须要微信登陆功能,须要申请微信登陆权限html
获取微信登陆权限须要收取必定费用,貌似300。一直没舍得,还好作项目的时候用到得到了,土豪随意
前端

下面说代码实现 java
到友盟官网http://www.umeng.com/下载须要的SDK包。copy其中的jar包等到本身的项目中。android
一、添加回调Activity程序员
包名目录下建立wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意必定是包名路径下。同理新浪微博也须要一个回调的Activity,与微信不一样的是它只须要在包名目录下创建一个名为WBShareActivity类便可,不用创建文件夹,该类继承WBShareCallBackActivityweb


二、权限及其余maifest中的配置api
<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" />
相关Activity注册
新浪微博:(精简版不须要)如下方式注册若没法find请把包名写全。安全
<activity android:name=".WBShareActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" > <intent-filter> <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="adjustResize" android:exported="false" > </activity> <service android:name="com.sina.weibo.sdk.net.DownloadService" android:exported="false"></service>
微信:微信
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
分享编辑页(只有新浪微博精简版,豆瓣人人腾讯微博须要):
<activity android:name="com.umeng.socialize.editorpage.ShareActivity" android:theme="@style/Theme.UMDefault" android:excludeFromRecents="true"/>
友盟Appkey及相关第三方key配置
在AndroidManifest.xml中设置友盟Appkey
<meta-data android:name="UMENG_APPKEY" android:value="561cae6ae0f55abd990035bf"> </meta-data>
三、在项目的application类中配置第三方信息
{ // <!-- 微信平台 --> appid appsecret PlatformConfig.setWeixin("替换成本身appid","替换成本身的appsecret"); // <!-- 新浪微博 --> appkey appsecret PlatformConfig.setSinaWeibo("替换成本身appid","替换成本身的appsecret"); Config.REDIRECT_URL = "新浪后台配置的回调地址"; // <!-- QQ、Qzone -->appid appkey PlatformConfig.setQQZone("替换成本身appid","替换成本身的appsecret"); }在application的oncreat方法中初始化
UMShareAPI.get(this);
四、登陆实现
private UMShareAPI mShareAPI = null; private SHARE_MEDIA platform = null;
mShareAPI = UMShareAPI.get(this);点击事件:
case R.id.login_img_weibo: platform = SHARE_MEDIA.SINA; mShareAPI.doOauthVerify(LoginActivity.this, platform, umAuthListener); break; case R.id.login_img_weixin: platform = SHARE_MEDIA.WEIXIN; mShareAPI.doOauthVerify(LoginActivity.this, platform, umAuthListener); break;下面new
umAuthListener
private UMAuthListener umAuthListener = new UMAuthListener() { @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { if(platform == SHARE_MEDIA.WEIXIN){ //unionid:(6.2之前用unionid)uid uid = data.get("unionid"); }else{ uid = data.get("uid"); } if(!CheckUtils.isEmpty(uid)){ //若是uid不为空即回调受权成功,则能够调接口告诉后台此时的第三方uid,后台判断此惟一标识值是否存在即判断用户是否用 //第三方登陆过,若是登陆过直接进入主界面, 没有登陆过则后台存储该值并进入注册界面进行手机号绑定注册 judgeUMLogin();,若是登陆 }else{ Toast.makeText(getApplicationContext(), "暂没法使用该登陆方式", Toast.LENGTH_SHORT).show(); } Toast.makeText(getApplicationContext(), "受权成功", Toast.LENGTH_SHORT).show(); Log.d("user info", "user info:" + data.toString()); } @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(); } };
五、分享
回调相关配置
若是使用的是qq或者新浪精简版jar,须要在您使用分享或受权的Activity(fragment不行)中添加以下回调代码:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); }
分享相关代码调用
打开分享面板
能够经过以下代码打开分享面板选择页
new ShareAction(MainActivity.this) .withText("hello") .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN) .setCallback(umShareListener) .open();
其中umShareListener为回调监听,相关分享结果都在回调监听中获取
构建以下,其中分享成功会回调onComplete,取消分享回调onCancel,分享错误回调onError,对应的错误信息能够用过onError的Throwable参数来打印
private UMShareListener umShareListener = new UMShareListener() { @Override public void onResult(SHARE_MEDIA platform) { Log.d("plat","platform"+platform); Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show(); } @Override public void onError(SHARE_MEDIA platform, Throwable t) { Toast.makeText(MainActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show(); if(t!=null){ Log.d("throw","throw:"+t.getMessage()); } } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(MainActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show(); } };
直接分享接口
对于须要不通过分享面板选择页,直接经过按钮实现某个平台的分享跳转操做的开发者,能够调用下面的代码实现
new ShareAction(MainActivity.this) .setPlatform(SHARE_MEDIA.QQ) .withText("hello") .setCallback(umShareListener) .share();
具体分享结果获取方法与使用分享面板相同,这里再也不复述
登陆不回调可能的状况:
一、WXEntryActivity
这个类的路径问题
二、微信官网的配置要求很严格 程序目录的包名必须与配置文件的包名还有微信开放平台配置的包名彻底一致。不然会出现回调无反应现象。(遇到过的)
三、微信未获取登陆权限。(通常交钱审核经过就自动获取了登陆权限)- 顶
- 1
- 踩
- 0