hotlinhao 2014-02-08
1. 登录/校验登录态
通过调用Tencent类的login函数发起登录/校验登录态。
该API具有两个作用:
(1)如果开发者没有调用mTencent实例的setOpenId、setAccessToken API,则该API执行正常的登录操作;
(2)如果开发者先调用mTencent实例的setOpenId、setAccessToken API,则该API执行校验登录态的操作。如果登录态有效,则返回成功给应用,如果登录态失效,则会自动进入登录流程,将最新的登录态数据返回给应用。
建议开发者在每次应用启动时调用一次该API(先调用setOpenId、setAccessToken),以确保每次打开应用时用户都是有登录态的。
调用登录API参数说明如下:
| activity | 调用者activity。应用使用SDK时,会从应用自己的Activity跳转到SDK的Activity,应用调用SDK的Activity即为这里的调用者activity。 |
| scope | 应用需要获得哪些API的权限,由“,”分隔。 例如:SCOPE = “get_user_info,add_topic”;如果要所有,直接用all |
| listener | 回调API,IUiListener实例。 |
基本流程就是

所以第一步就是自定义一个Activity:
/**
* 登入验证
*
* @author tanlvxu
*
*/
public class MainActivity extends Activity implements OnClickListener{
/**
* api权限
*/
private Handler mHandler;
private TextView mBaseMessageText;//打印登入后读取的base信息
private TextView mMessageText;//打印登入后读取的message信息
private Dialog mProgressDialog; //判断是否接收到信息
private Tencent mTencent; //主控制
private EditText mEtAppid = null;// 账号输入框
private ImageView mLoginButton;// 登入按钮
/**
* 线程接收
* @param base
* @param msg
*/
private void showResult(final String base, final String msg) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (mProgressDialog.isShowing())
mProgressDialog.dismiss();
mBaseMessageText.setText(base);
mMessageText.setText(msg);
}
});
}
/**
* 信息接收类
* @author tanlvxu
*
*/
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
showResult("onComplete:", response.toString());
doComplete(response);
}
protected void doComplete(Object values) {
}
@Override
public void onError(UiError e) {
showResult("onError:", "code:" + e.errorCode + ", msg:"
+ e.errorMessage + ", detail:" + e.errorDetail);
}
@Override
public void onCancel() {
showResult("onCancel", "");
}
}
/**
* 主函数
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Context ctxContext = this.getApplicationContext();
mEtAppid = new EditText(this);
/**
* app_id输入框
*/
new AlertDialog.Builder(this)
.setTitle("请输入APP_ID")
.setCancelable(false)
.setIcon(android.R.drawable.ic_dialog_info)
.setView(mEtAppid)
.setNegativeButton("取消",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
mTencent = Tencent.createInstance(AppConstants.APP_ID, ctxContext);
mHandler = new Handler();
mProgressDialog = new ProgressDialog(
MainActivity.this);
initViews();
}
})
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
String appid = mEtAppid.getText().toString()
.trim();
if (!("".equals(appid))) {
mTencent = Tencent.createInstance(appid, ctxContext);
} else {
mTencent = Tencent.createInstance(AppConstants.APP_ID, ctxContext);
}
mHandler = new Handler();
mProgressDialog = new ProgressDialog(
MainActivity.this);
initViews();
}
}).show();
}
/**
* 初始化界面
*/
private void initViews() {
mLoginButton = (ImageView) findViewById(R.id.login_btn);
mBaseMessageText = (TextView) findViewById(R.id.base_message_tv);
mMessageText = (TextView) findViewById(R.id.message_tv);
updateLoginButton();
mLoginButton.setOnClickListener(this) ;
}
/**
* 更新登入状态按钮
*/
private void updateLoginButton() {
mLoginButton.setImageResource(mTencent.isSessionValid()?R.drawable.com_tencent_open_logout
: R.drawable.com_tencent_open_login) ;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
switch (v.getId()) {
case R.id.login_btn:
onClickLogin();
v.startAnimation(shake);
break;
default :
break ;
}
}
private void onClickLogin() {
if (mTencent.isSessionValid()) {
mTencent.logout(this);
updateLoginButton();
} else {
IUiListener listener = new BaseUiListener() {
@Override
protected void doComplete(Object values) {
updateLoginButton();
}
};
mTencent.login(this, "all", listener);//跳转至sdk登入界面
}
}
} 跳转至登入界面
登入成功后返回的信息