Android调用第三方QQ登录代码分享_Android

本文为大家分享了调用QQ登录的相关代码,希望对大家有帮助,减少项目开发的时间,具体内容如下

1、去QQ开放平台注册帐号(http://open.qq.com/),为应用申请QQ的APP_ID , 并下载相关的jar包,放到工程的lib目录下。

2、在Manifest.xml里注册QQ相关的Activity,代码如下

 <activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<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="tencent100491239" />
 </intent-filter>
</activity>

3、利用QQ提供的相关API去获取相关的OPENID,昵称,图像等资料。这里有一点要注意的是,由于QQ服务器返回OPENID和昵称等其他资料是分两步进行的,而首先返回的OPENID速度很快,返回昵称等其他资料可能会比较慢,所以在返回OPENID的时候,就可以认为已经调用QQ登录成功,再用异步的方式处理昵称等其他资料信息。以下是代码部 分,已经过项目测试,可直接用(替换相应的APP_ID就可以了)

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException; 

import org.apache.http.conn.ConnectTimeoutException;
import org.json.JSONException;
import org.json.JSONObject; 

import android.app.Activity; 

import com.smart.util.BroadcastAction;
import com.smart.util.BroadcastUtil;
import com.smart.util.Constant;
import com.smart.util.ILog;
import com.smart.util.PrefUtil;
import com.smart.util.Prefkey;
import com.tencent.open.HttpStatusException;
import com.tencent.open.NetworkUnavailableException;
import com.tencent.tauth.Constants;
import com.tencent.tauth.IRequestListener;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.utils.lib.ss.common.ToastHelper; 

/**
 * QQ登陆。
 * @author E
 */
public class QqLogin { 

 private static QqLogin qqLogin = null; 

 public static QqLogin getInstance(){
  if (null == qqLogin) {
   qqLogin = new QqLogin();
  }
  return qqLogin;
 } 

 public void login(Activity context , QqLoginListener loginListener){
  //Constant.QQ_APP_ID 这里要替换成自己申请的APP_ID
  Tencent tencent = Tencent.createInstance(Constant.QQ_APP_ID, context);
  if (null == tencent) {
   ToastHelper.makeText(context, "error cased !");
   return;
  }
  tencent.login(context, "get_user_info", new BaseUiListener(tencent,loginListener));
 } 

 class BaseUiListener implements IUiListener{ 

  Tencent tencent = null;
  QqLoginListener qqLoginListener = null; 

  public BaseUiListener(Tencent tencent ,QqLoginListener qqLoginListener) {
   super();
   this.tencent = tencent;
   this.qqLoginListener = qqLoginListener;
  } 

  @Override
  public void onComplete(JSONObject values) {
   try {
    String openid = values.getString("openid");
    qqLoginListener.onLoginSuccess(openid);
    tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET,
      new BaseApiListener(qqLoginListener) ,null);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  @Override
  public void onError(UiError arg0) {
   qqLoginListener.onLoginFail();
  } 

  @Override
  public void onCancel() {
   qqLoginListener.onCancel();
  }
 } 

 class BaseApiListener implements IRequestListener{ 

   QqLoginListener qqLoginListener = null; 

  public BaseApiListener(QqLoginListener qqLoginListener) {
   super();
   this.qqLoginListener = qqLoginListener;
  }
  @Override
  public void onComplete(JSONObject jsonObject, Object object) {
   try {
    ILog.e(jsonObject.toString());
    String nickName = jsonObject.getString("nickname");
    String figureurl_qq_1 = jsonObject.getString("figureurl_qq_2");
    PrefUtil.instance().setPref(Prefkey.THIRD_NICKNAME, nickName);
    PrefUtil.instance().setPref(Prefkey.THIRD_IMAGE, figureurl_qq_1);
    //发送广播到主页去更新
    BroadcastUtil.sendBroadcast(BroadcastAction.UPLOAD_THIRD_INFO);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  @Override
  public void onConnectTimeoutException(ConnectTimeoutException arg0,
    Object arg1) {
  }
  @Override
  public void onHttpStatusException(HttpStatusException arg0, Object arg1) { 

  }
  @Override
  public void onIOException(IOException arg0, Object arg1) { 

  }
  @Override
  public void onJSONException(JSONException arg0, Object arg1) { 

  }
  @Override
  public void onMalformedURLException(MalformedURLException arg0,
    Object arg1) {
  }
  @Override
  public void onNetworkUnavailableException(
    NetworkUnavailableException arg0, Object arg1) {
  }
  @Override
  public void onSocketTimeoutException(SocketTimeoutException arg0,
    Object arg1) {
  }
  @Override
  public void onUnknowException(Exception arg0, Object arg1) {
  }
 } 

 /**
  * 授权完成后,执行一下步的回调
  */
 public static abstract class QqLoginListener{
  public void onLoginSuccess(String openid){};
  public void onLoginSuccess(String openid, String nickname){};
  public void onLoginFail(){};
  public void onCancel(){};
 }

好了,到里代码部分已经写完,只需要调用login(Activity context , QqLoginListener loginListener)方法就可以了。

以上就是Android调用第三方登录的详细步骤和思路,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索第三方登录
, QQ登录
Android调用QQ登录
android qq第三方分享、qq第三方分享、ios qq第三方分享、android 第三方分享、android调用第三方app,以便于您获取更多的相关知识。

时间: 2024-10-29 01:39:03

Android调用第三方QQ登录代码分享_Android的相关文章

Android调用第三方QQ登录代码分享

本文为大家分享了调用QQ登录的相关代码,希望对大家有帮助,减少项目开发的时间,具体内容如下 1.去QQ开放平台注册帐号(http://open.qq.com/),为应用申请QQ的APP_ID , 并下载相关的jar包,放到工程的lib目录下. 2.在Manifest.xml里注册QQ相关的Activity,代码如下 <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOr

Android实现第三方授权登录、分享以及获取用户资料_Android

由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流.学习和参考,只求能和大家共同进步.希望能多多支持! 这篇文章中,我们使用到了Share SDK,它是为iOS.Android.WP8的APP提供社会化功能的一个组件,目前支持如QQ.微信.新浪微博.腾讯微博.开心网.人人网.豆瓣.网易微博.搜狐微博.facebook.twitter.google+

Android实现第三方授权登录、分享以及获取用户资料

由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流.学习和参考,只求能和大家共同进步.希望能多多支持! 这篇文章中,我们使用到了Share SDK,它是为iOS.Android.WP8的APP提供社会化功能的一个组件,目前支持如QQ.微信.新浪微博.腾讯微博.开心网.人人网.豆瓣.网易微博.搜狐微博.facebook.twitter.google+

Android实现消水果游戏代码分享_Android

消水果游戏大家都玩过吧,今天小编给大家分享实现消水果游戏的代码,废话不多说了,具体代码如下所示: #include "InGameScene.h" #include "PauseLayer.h" #include "ScoreScene.h" #include "AppDelegate.h" extern "C" { void showAds() { } void hideAds() { } } using

android 调用第三方apk setResult回来intent为null

问题描述 android 调用第三方apk setResult回来intent为null 有2个程序互相调用,A程序通过发intent,使用startActivityForResult()方法, 调用B程序,B程序启动后做了一些自己的事,其中会切换很多activity 显示B自己的UI, 现在我在B处理完逻辑后,通过发intent或者handler的方式把参数传回给B程序的主入口activity, 再通过此activity调用setResult()方法返回给A程序,现在发现A程序的onActiv

Android登录界面的实现代码分享_Android

最近由于项目需要,宝宝好久没搞Android啦,又是因为项目需要,现在继续弄Android,哎,说多了都是泪呀,别的不用多说,先搞一个登录界面练练手,登录界面可以说是Android项目中最常用也是最基本的,如果这个都搞不定,那可以直接去跳21世纪楼啦. 废话不多说,先上效果图了,如果大家感觉还不错,请参考实现代码吧. 相信这种渣渣布局对很多人来说太简单啦,直接上布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk

Android高仿微信聊天界面代码分享_Android

微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们来看一下整个小项目的主体结构: 下面是Activity的代码: package com.way.demo; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import jav

Android 以任意比例裁剪图片代码分享_Android

公司的一个小伙伴写的,可以按照任意比例裁剪图片.我觉得挺好用的.简单在这里记录一下,以后肯定还会用到. public class SeniorCropImageView extends ImageView implements ScaleGestureDetector.OnScaleGestureListener, View.OnLayoutChangeListener { /* For drawing color field start */ private static final int

Android开发之注册登录方法示例_Android

本文所述,继续上一篇关于Android端向服务器端发送数据的方法进一步完善注册登录的方法,由于版本问题出现一点瑕疵,今天经过调试已经解决,在这里给大家介绍一下. 在Android4.0以后版本的对于网络权限要求变得严格,致使上一篇所述的案例无法将数据发送到服务器端,当你一点击发送数据,Android控制台就会报错,错误当然是很让人头疼,基本上都是关于http的错误,所以可以肯定是Android虚拟机向服务器发送数据时出现了错误,经过一番检查与测试后才知道,4.0之后的版本,主线程中不允许调用网络