本人从事android工作不长,是一个小白,在公司写项目时也遇到很多问题,自己也瞎折腾了很长时间,有很多不懂的我都在网上寻找答案,很多的是CSDN上博主发布的文章,解决了我在开发中遇到的很多问题。一段时间公司的一个商城项目要集成微信登录,之前在网上找过写android的第三方登录的集成文章,但是代码量有些大,对于我有些看的不是太懂,后来有人推荐友盟的第三方登录,当时工作时任务不是很多就上去看了看,自己也做了下集成,当时做的是qq、微博的第三方登录,只是微博的有些坑,需要注意下。公司项目的微信登录用的就是友盟的,代码不多,非常容易理解,集成起来也比较容易。
不知不觉废话连篇,现在说下正题,我为什么要写这篇文章,CSDN解决了我不少问题,我写这篇文章一是想温习一下,做下记录,以后用起来不至于重新看官方文档,二是想做下分享,希望可以帮到需要的人,当然大神很多,我写这篇文章只是为了分享,为了可以用到他的小伙伴带来帮助。
废话不多说我们再次步入正题:
1、申请友盟AppKey:
首先我们进入友盟官网创建一个项目获取AppKey,这个需要集成在我们的android项目中去
2、集成SDK:
然后进入友盟官网的开发者中心-SDK下载,勾住社会化分享SDK,点击右下方的下载,获取到SDK资源包
引入文件夹下的\Android\share\share_android_6.9.3\main\res路径下的res文件夹下的所有资源文件,
引入文件夹下的\Android\common\common_android_1.5.4\normal文件夹中的jar包,
引入文件夹下的\Android\share\share_android_6.9.3\main\libs文件夹中的jar包,
引入文件夹下的\Android\share\share_android_6.9.3\platforms文件夹中的jar包。
3、第三方平台注册应用:
在QQ、微信、微博这个开放平台上注册应用获取到APP ID等相关需要用到的参数
QQ第三方登录需要用到开放平台应用的APP ID和APP KEY,
微信第三方登录需要用到开放平台应用的APP ID和APP Secret,
微博第三方登录需要用到开放平台应用的APP KEY和APP Secret,还有应用信息高级信息中授权回调页的地址,这里的授权回调页地址要和取消授权回调页一致,并且要和项目中设置的保持一致并且不能为空。
4、项目中相关配置:
(1)权限
<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"/>
(2)build.gradle 模块文件中修改
buildTypes {
release {
..
signingConfig signingConfigs.debug
..
}
}
(3)AndroidManifest文件中加入
<meta-data
android:name="umeng_appkey"
android:value="友盟appkey">
</meta-data>
<!--微博-->
<activity
android:name="com.umeng.socialize.media.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="false"
>
</activity>
<activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize"
>
</activity>
<activity
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
android:launchMode="singleTask"
android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
<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="tencent腾讯开放平台应用的appid" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/>
<!--wechat-->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
(4)微信登录的回调类
public class WXEntryActivity extends WXCallbackActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxentry);
}
}
5、代码集成
这里先贴出官方的文档:https://developer.umeng.com/docs/66632/detail/66639
(1)自定义Application中
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化接口
UMConfigure.init(this,"友盟appkey","umeng", UMConfigure.DEVICE_TYPE_PHONE,"");
PlatformConfig.setWeixin("开放平台APPID", "开放平台APPSecret");
PlatformConfig.setSinaWeibo("开放平台APPKEY", "开放平台APPSecret","http://sns.whalecloud.com");//第三个参数为授权回调页的地址
PlatformConfig.setQQZone("开放平台APPID", "开放平台APPKey");
//..
}
}
(2)log开关,动态权限,activity创建时加入
UMConfigure.setLogEnabled(true);//设置组件化的Log开关,参数: boolean 默认为false,如需查看LOG设置为true
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);
}
(3)再点击按钮时触发授权方法,这里是使用QQ登录授权,微信和微博的和这里类似就不贴出来了
SHARE_MEDIA platform = SHARE_MEDIA.QQ;//QQ授权
UMShareAPI.get(this).doOauthVerify(this, platform, authListener);// UMShareAPI.get(this)在类上声明会报错
//这里有个坑当时整了好久,UMShareAPI.get(this)在类上声明会报错,加在方法中可以调用
(4)回调方法
@Override//回调
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
(5)authListener授权监听器
UMAuthListener authListener = new UMAuthListener() {//umAuthListener为授权回调
@Override public void onStart(SHARE_MEDIA platform) { }//授权开始的回调,platform 平台名称
@Override//授权成功的回调/platform 平台名称/action 行为序号,开发者用不上/data 用户资料返回
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();
//Log.e("debug",platform.getName());
if (platform.getName().equals("qq")){
Log.e("debug","准备获取qq用户信息!");
UMShareAPI.get(getApplicationContext()).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, new UMAuthListener() {//获取用户资料
@Override
public void onStart(SHARE_MEDIA share_media) { }
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
//之后想要的用户信息就在这个map集合中,从中获取你想要的,我们在实际开发中需要在这里获取一个openId之类的参数,然后交给后台的小哥哥就可以了,我们再与后台交接接口就可以了
}
@Override public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) { }
@Override public void onCancel(SHARE_MEDIA share_media, int i) { }
});
}else{
//其他的第三方登录授权回调
}
}
@Override //授权失败的回调platform 平台名称action 行为序号,开发者用不上 t 错误原因
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(mContext, "失败:" + t.getMessage(),Toast.LENGTH_LONG).show();
}
@Override//授权取消的回调、platform 平台名称、行为序号,开发者用不上
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
}
};
这篇文章就写到这里吧,这是我写的第一篇文章,希望对大家们有需要的人给予帮助,如果有什么其他问题小伙伴可以在官网上自行查找下,有什么地方有异议可以在评论里点出,第一次写文章,可能写的不太好,有什么不足欢迎小伙伴的评论,当然这篇文章是为了分享给大家希望带来帮助,不喜勿喷!还有,这篇文章是博主的第一次原创,转载请表明出处哦,谢谢!