制作一个类似QQ第三方登陆的sdk平台(安卓版)
最近公司需要做一个SDK,该SDK为其他的APP可以调用我们的APP,然后通过获取我们的APP获取用户信息,返回给他们一个唯一的授权码。
说白了就是弄一个第三方登陆功能,通过登陆我们的用户中心,给他们一个用户标识。
这个SDK需要分解开来做,需要实现下面功能:
public static boolean checkApkExist(Context context, String packageName) { if (packageName == null || "".equals(packageName)) { return false; } try { context.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return true; } catch (NameNotFoundException e) { return false; } }2.应用之间跳转(并且带参数):
<span style="white-space:pre"> </span>ComponentName comp = new ComponentName("com.nbg.baby", "com.nbg.baby.ApiLoginActivity"); Intent intent = new Intent(); intent.setComponent(comp); intent.setAction(Intent.ACTION_VIEW); Bundle bundle = new Bundle(); bundle.putString("extra", "extra.login"); intent.putExtras(bundle); if(Utils.checkApkExist(MainActivity.this, "com.nbg.baby")){ startActivityForResult(intent, 1); }else{ Toast.makeText(MainActivity.this, "应用未安装,无法跳转", Toast.LENGTH_SHORT).show(); }</span>A中接受B中返回数据:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode ==1){ String result = data.getStringExtra("result"); Toast.makeText(this, result, Toast.LENGTH_SHORT).show();; } }B中处理正常处理从A传过来数据即可。但是有一点要注意,B的ApiActivity属性,一定要设置:android:exported="true",否则会报错,权限被拒绝!
public class YoYo { private static YoYo sInstance; private IUiListener listener; private YoYo(String appId, Context context) { } public static synchronized YoYo createInstance(String appId, Context context) { if(sInstance==null){ sInstance= new YoYo(appId, context); } return sInstance; } public void login(Activity context, IUiListener callBack) { ComponentName comp = new ComponentName("com.nbg.baby", "com.nbg.baby.ApiLoginActivity"); Intent intent = new Intent(); intent.setComponent(comp); intent.setAction(Intent.ACTION_VIEW); Bundle bundle = new Bundle(); bundle.putString("extra", "我来自星星"); intent.putExtras(bundle); context.startActivityForResult(intent, 1); this.listener = callBack; } public boolean onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode ==1){ if(resultCode == Activity.RESULT_CANCELED){ String result = data.getStringExtra("result"); UiError e = new UiError(0, "取消登陆", "用户取消"); this.listener.onError(e); }else{ String result = data.getStringExtra("nickname"); JSONObject object = new JSONObject(); try { object.put("昵称", result); this.listener.onComplete(object); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return false; } }
public interface IUiListener { public abstract void onComplete(Object response); public abstract void onError(UiError e); public abstract void onCancel(); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。