Android一点 sdk调用客户端授权

我们在接入qq登录时,如果安装了qq手机客户端,qq登录时会调起客户端进行授权,那么这个授权方式是怎么实现的呢?


看看qq的授权方式



1、通过sdk打开客户端,进入到授权页面

2、接入sdk的客户端需要重写onActivityResult进行数据的回调

3、授权的页面所在的activity需要加上android:exported="true"


动手写写看:

1、先编写sdk

    


看看AuthSDK,这里有两个方法,一个是测试登录的方法,调用这个方法可以打开授权页面,另一个是授权回调的数据,需要在接入sdk的client端接入

package com.authsdk.api;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.widget.Toast;

import com.authsdk.constants.Codes;
import com.authsdk.listener.AuthListener;
import com.authsdk.util.Utils;

public class AuthSDK {
	
	private static AuthListener mAuthListener;

	/**
	 * 测试登录
	 * @param context
	 * @param authListener
	 */
	public static void login(Activity context,AuthListener authListener){
		mAuthListener=authListener;
		
		if(!Utils.checkApplication(context, "com.example.authsdkclient")){
			Toast.makeText(context, "请先安装Auth客户端", Toast.LENGTH_LONG).show();
			return;
		}
		
		Intent intent=new Intent();
		intent.setComponent(new ComponentName("com.example.authsdkclient", "com.example.authsdkclient.AuthSDKActivity"));
	    context.startActivityForResult(intent, Codes.REQUEST_LOGIN_CODE);
	    
	}
	
	/**
	 * ActivityResult回调
	 * 
	 * @param requestCode
	 * @param resultCode
	 * @param data
	 */
	public static void onActivityResult(int requestCode, int resultCode, Intent data) {
		
		if(requestCode == Codes.REQUEST_LOGIN_CODE){
			
			if(null != mAuthListener){
				mAuthListener.onAuth(data.getStringExtra("authmsg"));
			}
		}
	}
}


2、编写授权页面的客户端


package com.example.authsdkclient;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;

public class AuthSDKActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
	// TODO Auto-generated method stub
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_authsdk);
	
	findViewById(R.id.back).setOnClickListener(new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			
			Map<String, Object> map=new HashMap<String, Object>();
			map.put("code", Status.BACK);
			map.put("message", "点击了返回");
			
			Intent intent=new Intent();
			intent.putExtra("authmsg", getData(map));
			setResult(Codes.RESULT_BACK_CODE, intent);
			finish();
		}
	});
	
	findViewById(R.id.auth).setOnClickListener(new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			
			final ProgressDialog p=new ProgressDialog(AuthSDKActivity.this);
			p.setMessage("正在登录");
			p.create();
			p.show();
			
			new Handler().postDelayed(new Runnable() {
				
				@Override
				public void run() {
					// TODO Auto-generated method stub
					
					
                   p.cancel();
					
					Map<String, Object> map=new HashMap<String, Object>();
					map.put("code", Status.BACK);
					map.put("message", "授权成功");
					
					Intent intent=new Intent();
					intent.putExtra("authmsg", getData(map));
					setResult(Codes.RESULT_AUTH_CODE, intent);
					finish();
					
				}
			}, 2000);
			
			
			
		}
	});
}

public String getData(Map<String, Object> map){
	JSONObject json=new JSONObject(map);
	return json.toString();
}
}

注意,记得在AndroidManifest.xml中加上

<activity android:name="com.example.authsdkclient.AuthSDKActivity"
            android:exported="true"></activity>


3、接入sdk的客户端

package com.example.authsdkdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;

import com.authsdk.api.AuthSDK;
import com.authsdk.listener.AuthListener;

public class MainActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				
				//登录
				AuthSDK.login(MainActivity.this, new AuthListener() {
					
					@Override
					public void onAuth(String data) {
						// TODO Auto-generated method stub
						System.out.println("data;"+data);
					}
				});
			}
		});
	}

	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		
		//必须的回调
		AuthSDK.onActivityResult(requestCode, resultCode, data);
	}
}

看看效果

    



demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值