之前有过一次的第三方登录的demo,今天有做了一次,才发现以前做的是有多么的不堪!
先展示一下第三方登录qq的效果,有两种情况,
第一种,没有弹出授权框,直接获取数据值,---qq头像:
第二种,有授权框,授权以后再获取数据值,---qq头像,qq用户名,等等。。
这两种情况实现很简单,简单到只需要调用俩个方法就行了,方法分别:
umShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, umAuthListener);有弹出授权框
umShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener); 没有弹出授权框,默认授权,直接获取数据
二者可以嵌套配合使用!这里附上为什么要有“第三方授权协议”的原因。
好了,言归正传,这些效果都需要建立在友盟的集成SDK之上,否则一切空谈!SDK的下载见如下操作:
首先打开友盟网址:点击打开链接
注册账号/登陆
完成以后,操作图中步骤:
从最后一张图中的所标识的文件夹中,将jar包复制到你的项目工程中,并生成,到这里,我们的任务应该算是完成了一半!
下面我们就可以到开发文档中粘代码了。回到第二张图:
在这里,我只附上我自己写的一个小demo,效果就是上面的动态图中的效果:
package bw.com.rikao0117; import android.Manifest; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.umeng.socialize.UMAuthListener; import com.umeng.socialize.UMShareAPI; import com.umeng.socialize.bean.SHARE_MEDIA; import java.util.Map; public class MainActivity extends AppCompatActivity { private UMShareAPI umShareAPI; private ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //6.0动态权限 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); } //友盟的封装类,实例化对象 umShareAPI = UMShareAPI.get(MainActivity.this); //获取imageview的id img = (ImageView) findViewById(R.id.img); } //设置第三方的授权回调 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); } //解除关联,解决内存泄漏 @Override protected void onDestroy() { super.onDestroy(); UMShareAPI.get(this).release(); } public void buttonLogin(View view) { /** * * umShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, new UMAuthListener()); * 这个API方法是为了授权给本地,能够弹出授权框 */ /** * 登录成功后,用来获取qq用户的资料,头像,名字,等等 * * 这个API方法会直接登录第三方qq,它不会弹出授权框,默认已经授权 */ umShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, new UMAuthListener() { /** * 开始的授权 * @param share_media */ @Override public void onStart(SHARE_MEDIA share_media) { } /** * 授权成功 * @param share_media * @param i * @param map */ @Override public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) { umShareAPI.getPlatformInfo(MainActivity.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) { Log.i("jiba","platform==="+share_media); String s = map.get("profile_image_url"); Log.i("jiba","profile_image_url==="+s); Glide.with(MainActivity.this).load(s).into(img); for (String key:map.keySet()) { Log.i("jiba","onComplete==key="+key+"====value="+map.get(key)); } } @Override public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) { } @Override public void onCancel(SHARE_MEDIA share_media, int i) { } }); } /** * 授权失败 * @param share_media * @param i * @param throwable */ @Override public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) { } /** * 授权取消的回调 * @param share_media * @param i */ @Override public void onCancel(SHARE_MEDIA share_media, int i) { } }); } }