600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 实现新浪微博第三方登录获取用户信息

实现新浪微博第三方登录获取用户信息

时间:2024-01-10 07:28:03

相关推荐

实现新浪微博第三方登录获取用户信息

第一步:创建Android项目下载新浪sdk

下载地址:/sinaweibosdk/weibo_android_sdk

里面包含签名工具和新浪官方的debug.keystore

新浪的demo必须用官方的debug.keystore编译才能正常运行

第二步:登录新浪微博开放平台/

创建应用

填写应用名称

填写项目的包名和签名

签名的获取方法:在下载好的新浪sdk包中包含有,安装在模拟器上,填写上本项目的包名即可获得对应的项目签名

填写完毕之后。

点击高级信息,填写好回调页

回调页可以为任意的网址

第三步:现在可以正式开始写代码啦

如果想要实现新浪的第三方登录,必须引入新浪的第三方library

weiboSDK

为啦避免引入失败,必须将weiboSDK和项目放在同一目录下,并保证supportv4 jar 包版本一致

将WeiboSDKDemo中lib下的所有so包拷贝到项目的lib目录下

将所需的权限及其他内容复制到清单配置文件中

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<activity android:name="com.sina.ponent.WeiboSdkBrowser"

android:configChanges="keyboardHidden|orientation"

android:windowSoftInputMode="adjustResize"

android:exported="false" >

</activity>

<service android:name="com.sina..DownloadService"

android:exported="false">

</service>

在布局文件中加入登录按钮

<com.sina.weibo.sdk.widget.LoginButton

android:id="@+id/login_button_style2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:layout_marginLeft="10dp"

android:background="@drawable/com_sina_weibo_sdk_login_button_with_original_logo"

/>

将Demo中的Constants类复制到项目中

将AppKey和REDIRECT_URL替换成当前项目的AppKey和回调地址

Activity中代码如下:

package com.example.weibologin;

import java.text.SimpleDateFormat;

import com.sina.weibo.sdk.auth.AuthInfo;

import com.sina.weibo.sdk.auth.Oauth2AccessToken;

import com.sina.weibo.sdk.auth.WeiboAuthListener;

import com.sina.weibo.sdk.auth.sso.SsoHandler;

import com.sina.weibo.sdk.exception.WeiboException;

import com.sina..RequestListener;

import com.sina.weibo.sdk.openapi.UsersAPI;

import com.sina.weibo.sdk.openapi.models.User;

import com.sina.weibo.sdk.widget.LoginButton;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.text.TextUtils;

import android.util.Log;

import android.widget.Toast;

public class MainActivity extends Activity {

private AuthInfo mAuthInfo;

private SsoHandler mSsoHandler;

private Oauth2AccessToken mAccessToken;

private LoginButton loginbt;

public UsersAPI mUsersApi;

private RequestListener mListener = new RequestListener() {

@Override

public void onComplete(String response) {

if (!TextUtils.isEmpty(response)) {

// 调用 User#parse 将JSON串解析成User对象

User user = User.parse(response);

if (user != null) {

Toast.makeText(MainActivity.this,

"获取User信息成功,用户昵称:" + user.screen_name,

Toast.LENGTH_LONG).show();

Log.i("TAG","登录成功!------->:"+user.screen_name);

// userTextView.setText(user.screen_name);

} else {

// userTextView.setText(response);

Toast.makeText(MainActivity.this, "2:" + response,

Toast.LENGTH_LONG).show();

}

}

}

@Override

public void onWeiboException(WeiboException arg0) {

// TODO Auto-generated method stub

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mAuthInfo = new AuthInfo(this, Constants.APP_KEY,

Constants.REDIRECT_URL, Constants.SCOPE);

loginbt=(LoginButton) findViewById(R.id.login_button_style2);

loginbt.setWeiboAuthInfo(mAuthInfo, new AuthListener());

loginbt.setStyle(LoginButton.LOGIN_INCON_STYLE_3);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(loginbt!=null)

{

loginbt.onActivityResult(requestCode, resultCode, data);

Log.i("TAG","登录成功!");

System.out.println(data.toString());

}

}

/**

* 微博认证授权回调类。

* 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后,

* 该回调才会被执行。

* 2. 非 SSO 授权时,当授权结束后,该回调就会被执行。

* 当授权成功后,请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。

*/

class AuthListener implements WeiboAuthListener {

@Override

public void onComplete(Bundle values) {

// 从 Bundle 中解析 Token

mAccessToken = Oauth2AccessToken.parseAccessToken(values);

//从这里获取用户输入的 电话号码信息

mUsersApi =new UsersAPI(MainActivity.this, Constants.APP_KEY, mAccessToken);

Long uid = Long.parseLong(mAccessToken.getUid());

mUsersApi.show(uid, mListener);

String phoneNum = mAccessToken.getPhoneNum();

if (mAccessToken.isSessionValid()) {

Log.i("TAG","登录成功!成功~~~~~~~~~~~~~~~~~~~~~~~~");

System.out.println("成功~~~~~~~~~~~~~~~~~~~~~~~~");

Oauth2AccessToken accessToken = Oauth2AccessToken.parseAccessToken(values);

if (accessToken != null && accessToken.isSessionValid()) {

String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(

new java.util.Date(accessToken.getExpiresTime()));

String format = getString(R.string.weibosdk_demo_token_to_string_format_1);

String s =String.format(format, accessToken.getToken(), date);

Log.i("TAG","登录成功------>"+s+phoneNum);

// AccessTokenKeeper.writeAccessToken(getApplicationContext(), accessToken);

}

} else {

// 以下几种情况,您会收到 Code:

// 1. 当您未在平台上注册的应用程序的包名与签名时;

// 2. 当您注册的应用程序包名与签名不正确时;

// 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。

String code = values.getString("code");

Log.i("TAG","登录成功!失败~~~~~~~~~~~~~~~~~~~~~~~~");

System.out.println("失败");

// String message = getString(R.string.weibosdk_demo_toast_auth_failed);

// if (!TextUtils.isEmpty(code)) {

//message = message + "\nObtained the code: " + code;

// }

// Toast.makeText(WBAuthActivity.this, message, Toast.LENGTH_LONG).show();

}

}

@Override

public void onCancel() {

//Toast.makeText(WBAuthActivity.this,

//R.string.weibosdk_demo_toast_auth_canceled, Toast.LENGTH_LONG).show();

}

@Override

public void onWeiboException(WeiboException e) {

System.out.println("出错~~~~~~~~~~~~~~");

Log.i("TAG","登录成功!出错~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

//Toast.makeText(WBAuthActivity.this,

//"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。