通过集成友盟来完成qq的第三方登录
第一步:友盟官网–添加一个应用–得到相对应的APPKey
第二步:开发者平台–文档中心–选择U-Share 社会化分享(安卓集成文档)
第三步:下载社会化分享的SDK文件
第四步:导入jar包并导入对应的jar包依赖(6个jar包–缺一不可)
第五步:添加回调Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
第六步:配置Android Manifest XML 清单文件中添加代码
<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="tencent100424468" />
</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"/>
第七步:初始化设置
新建一个App.java文件–进行初始化–记得在清单文件中注册App.java
@Override
public void onCreate() {
super.onCreate();
UMConfigure.init(this,"5a12384aa40fa3551f0001d1"
,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0
}
清单文件中注册App.java
<application
android:name=".ui.activity.App"
android:allowBackup="true"
android:icon="@mipmap/zfb_icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
第八步:在App.java初始化的下面继续写第三方平台的appkey
PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
//豆瓣RENREN平台目前只能在服务器端配置
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
PlatformConfig.setAlipay("2015111700822536");
PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
PlatformConfig.setPinterest("1439206");
PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");
PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");
PlatformConfig.setYnote("9c82bf470cba7bd2f1819b0ee26f86c6ce670e9b");
第九步:获取用户资料
在点击事件里写入代码 第二个参数代表要登录的平台:比如qq 微信 新浪
mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.QQ, umAuthListener);
第十步:umAuthListener授权回调(写在onCreatView方法外)
UMAuthListener authListener = new UMAuthListener() {
/**
* @desc 授权开始的回调
* @param platform 平台名称
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @desc 授权成功的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param data 用户资料返回
*/
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
//得到用户名以及头像信息
String name = data.get( "name" );
String iconurl = data.get( "iconurl" );
//带值跳转--用户名name和头像iconurl传到我的页面
Intent intent = new Intent( LoginActivity.this, ZhuyeActivity.class );
intent.putExtra( "name",name );
intent.putExtra( "iconurl",iconurl );
startActivity( intent );
Toast.makeText( LoginActivity.this, "qq登录成功", Toast.LENGTH_SHORT ).show();
}
/**
* @desc 授权失败的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(mContext, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
}
};
完成------------------------------------------------------------------------------------------------------
下面为具体实现代码
App.java文件中
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//qq
UMConfigure.init(this,"5c4126d3f1f5565a22000c65"
,"umeng",UMConfigure.DEVICE_TYPE_PHONE,null);//58edcfeb310c93091c000be2 5965ee00734be40b580001a0
PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
//豆瓣RENREN平台目前只能在服务器端配置
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
PlatformConfig.setAlipay("2015111700822536");
PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
PlatformConfig.setPinterest("1439206");
PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");
PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");
}
}
LoginActivity中
public class LoginActivity extends AppCompatActivity implements Contract_Login.View_Interface_Login {
private TextView tv_kszc;
private Button btn_login;
private EditText et_login_phone;
private EditText et_login_pwd;
private Contract_Login.Presenter_Interface_Login presenter_login;
private ImageView img_login_eye;
private CheckBox ck_jzmm;
private SharedPreferences sp;
private ImageView img_qq;
//授权回调
UMAuthListener authListener = new UMAuthListener() {
/**
* @desc 授权开始的回调
* @param platform 平台名称
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @desc 授权成功的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param data 用户资料返回
*/
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
//跳转
Intent intent = new Intent( LoginActivity.this, ZhuyeActivity.class );
startActivity( intent );
Toast.makeText( LoginActivity.this, "qq登录成功", Toast.LENGTH_SHORT ).show();
}
/**
* @desc 授权失败的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText( LoginActivity.this, "失败:" + t.getMessage(), Toast.LENGTH_LONG ).show();
}
/**
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText( LoginActivity.this, "取消了", Toast.LENGTH_LONG ).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_login );
tv_kszc = (TextView)findViewById( R.id.tv_kszc );
btn_login = (Button)findViewById( R.id.btn_login );
et_login_phone = (EditText)findViewById( R.id.et_login_phone );
et_login_pwd = (EditText)findViewById( R.id.et_login_pwd );
img_login_eye = (ImageView)findViewById( R.id.img_login_eye );
ck_jzmm = (CheckBox)findViewById( R.id.ck_jzmm );
img_qq = (ImageView)findViewById( R.id.img_qq );
//点击qq第三方登录
qq();
}
//点击qq第三方登录
private void qq() {
img_qq.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取用户资料
UMShareAPI mShareAPI = UMShareAPI.get( LoginActivity.this );
mShareAPI.getPlatformInfo( LoginActivity.this, SHARE_MEDIA.QQ, authListener );
}
} );
}
//qq回调activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult( requestCode, resultCode, data );
UMShareAPI.get( this ).onActivityResult( requestCode, resultCode, data );
}
}
**
下面我们来介绍一下分享的集成(分享:QQ好友 qq群聊 QQ空间等)
**
分享(不带面板)
分享可以通过如下代码实现:
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();
}
};
链接
分享链接可以使用UMWeb进行分享:qq不支持纯文本分享
UMWeb web = new UMWeb(Defaultcontent.url);
web.setTitle("This is music title");//标题
web.setThumb(thumb); //缩略图
web.setDescription("my description");//描述
然后调用将这个参数设置到ShareAction中:
new ShareAction(ShareActivity.this)
.withMedia(web)
.share();
之后我们就可以分享自己想要分享的连接了