现如今,谁家的应用还没个第三方登录呢?不得接入个微信、QQ、微博登录吗?我做App接入登录不下于三遍了,可以说是驾轻就熟了吧。直接上手。
实现步骤:
1. 添加jar和res
下载友盟集成工具.jar文件,运行jar文件,选中需要接入第三方平台。
image.png
点击OK在同级文件夹下生成umeng_integratetool_result文件,将里面文件都考入项目对应目录,里面包括各平台jar包,so库,图片资源文件等。
image.png
2. 在Application类调用配置第三方平台的id和secrete
PlatformConfig.setWeixin("wxe3946ac664570cda", "9aa49428437ed36468fb23d81e38e524");
PlatformConfig.setQQZone("1106703728", "YZ3xnJa6BsikqlQd");
//PlatformConfig.setSinaWeibo("39212943254", "04b48b094faeb92830c32669824ebdad", "http://sns.whalecloud.com");
初始化UMShareAPI并创建mShareAPI全局对象
@Override
public void onCreate() {
super.onCreate();
mShareAPI = UMShareAPI.get(this);
}
3. 微信回调类配置:在包名目录下一层创建wxapi文件夹,再创建WXEntryActivity继承WXCallbackActivity类。
image.png
WXEntryActivity为空类即可
import com.umeng.socialize.weixin.view.WXCallbackActivity;
public class WXEntryActivity extends WXCallbackActivity {
}
QQ与新浪需要在使用QQ分享或者授权的Activity中,添加:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
4. Manifest添加
添加对应权限
<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
<!-- 友盟登录分享使用 -->
<!-- 新浪微博 -->
<activity
android:name="com.umeng.socialize.media.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
<activity
android:name=".wxapi.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.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 -->
<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="tencent1106720278" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- 友盟登录分享配置结束 -->
5. gradle文件添加配置:
添加友盟appkey和messagesecret
<meta-data
android:name="UMENG_APPKEY"
android:value="5a740def323e484a928280cf" />
<meta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="863ee4721150c0e84eef202df0435" />
添加正式keystore文件到项目中,并配置
image.png
signingConfigs {
config {
keyAlias '12345678'
keyPassword '12345678'
storeFile file('keystore.jks')
storePassword '12345678'
}
}
buildTypes {
release {
minifyEnabled false //是否开启代码混淆
// shrinkResources true //去除无用资源
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
debug {
signingConfig signingConfigs.config
}
}
6. 获取第三方登录用户信息:shareMedia平台类型包括SHARE_MEDIA.WEIXIN、SHARE_MEDIA.QQ等。
AppContext.getShareApi().getPlatformInfo(this, shareMedia, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {}
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> data) {
String nickName = data.get("name");
String accessToken = data.get("accessToken");
String expiration = data.get("expiration");
String openId = data.get("openid");
// expiration 时间戳
// gender 性别
// iconurl 头像
}
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
ToastUtil.showShortToast(getApplicationContext(),"授权失败");
}
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
ToastUtil.showShortToast(getApplicationContext(),"授权取消");
}
});
遍历所有map的key和value,这里获取我的微信登录信息:
image.png
第三方分享
这里以分享网页为例,网页链接是百度首页,显示图标为应用启动图标,标题为title,描述为content。分享成功会通过
UMShareListener进行回调。
private void thirdShare(SHARE_MEDIA platform){
String webUrl = "www.baidu.com";
UMImage image = new UMImage(getApplicationContext(),R.mipmap.ic_launcher);//资源文件
UMWeb umWeb = new UMWeb(webUrl,"title","content",image); //URL 标题 描述 封面图
new ShareAction(this)
.setPlatform(platform)//传入平台
.withText("HiVideo")//标题
.withMedia(umWeb)
.setCallback(shareListener)//回调监听器
.share();
}
private UMShareListener shareListener = new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@Override
public void onResult(SHARE_MEDIA platform) {
Log.i("minfo","分享成功");
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Log.i("minfo","分享失败");
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Log.i("minfo","分享取消");
}
};
调用方法传入各个平台类型即可进行调用。
thirdShare(SHARE_MEDIA.SINA);
thirdShare(SHARE_MEDIA.WEIXIN);
thirdShare(SHARE_MEDIA.WEIXIN_CIRCLE);
thirdShare(SHARE_MEDIA.QQ);
thirdShare(SHARE_MEDIA.QZONE);