老套路上图:

说下实现思路:

首先我们Android自带的隐式跳转打开三方APP,与此同时注册一个广播用于接收三方APP传递过来的token信息用于登录自己的APP。也就是说拿到三方APP的登录token然后使用三方APP传过来的token进行登录即可。

看代码:

打开三方APP以及注册广播和接收广播数据的页面Mainactivity.java

package com.xiayiye5.authority;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private Button mBt;/*** cn.net.gfan.world 被调起应用包名  type为类型 1 授权登陆    user_package_name:使用者包名*/private String mUri = "yhsh://cn.net.gfan.world/sign?type=1&user_package_name=com.xiayiye5.authority";private MyBroadcastReceiver mReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//操作1 按钮发起mBt = findViewById(R.id.bt);mBt.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setData(Uri.parse(mUri));//参数拼接在URI后面 type=1是授权页面,user_package_name使用者包名,后续参数可自行添加intent.putExtra("xiayiye5", "下一页5");//这里Intent也可传递参数,但是一般情况下都会放到上面的URL中进行传递
//                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);}});//操作2//注册广播接受者,接收授权成功返回广播信息mReceiver = new MyBroadcastReceiver();IntentFilter intentFilter = new IntentFilter();//yhsh.com.yhsh.b.sign 自行定义action 即可,定义为被唤起的app包名intentFilter.addAction("yhsh.cn.net.gfan.world.sign");registerReceiver(mReceiver, intentFilter);}/*** 操作3* BroadcastReceiver 接收授权成功返回广播信息*/private class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// 授权成功  返回token,app_pkgToast.makeText(MainActivity.this, "授权成功!", Toast.LENGTH_SHORT).show();final String token = intent.getStringExtra("token");final String app_pkg = intent.getStringExtra("app_pkg");mBt.setText("token=" + token + "\n" + "app_pkg=" + app_pkg);//todo 调起方登录操作 做你需要的需求}}/*** 别忘了回收广播  不然会报error,这里是一个内存回收的知识点,第二个有时间博主会补上的知识点*/@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(mReceiver);}
}

再看下三方APP里面怎么做的?PermissionActivity.java

package cn.net.gfan.world;import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;/*** @author xiayiye5* 2020年6月8日09:23:17*/
public class PermissionActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_permission);Button btConfirmLogin = findViewById(R.id.bt_confirm_login);btConfirmLogin.setOnClickListener(this);getData();}/*** 获取SDK传递过来的参数*/private void getData() {//获取传递的数据Intent intent = getIntent();Uri uri = intent.getData();//获取参数值String type = uri.getQueryParameter("type");String userPackageName = uri.getQueryParameter("user_package_name");}@Overridepublic void onClick(View v) {//授权登录发送广播传递参数关闭当前APPIntent intent1 = new Intent();//此处为被唤起的app包名也可以自定义action但是必须得跟要接受广播的APP的action一致intent1.setAction("yhsh.cn.net.gfan.world.sign");intent1.putExtra("token", "dhuhguidhue-3029r3092");intent1.putExtra("app_pkg", "com.vistateach.homework");sendBroadcast(intent1);finish();}
}

看下清单文件的配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.net.gfan.world"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".PermissionActivity"android:launchMode="singleInstance"><intent-filter><dataandroid:host="cn.net.gfan.world"android:path="/sign"android:scheme="yhsh" /><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity></application></manifest>

红框里面的参数必须配置完整

代码看起来麻烦也可以下载源码:源码下载

如果没有积分可以从GitHub地址下载:GitHub直达下载

再次非常感谢原博主提供的思路:本人结合需求进行了部分修改:

授权登录博主

Android开发之高仿三方授权登录的实现方案类似微信登录QQ登录微博登录人人网登录相关推荐

  1. Android开发之高仿QQ消息侧拉删除

    Android开发之高仿QQ消息侧拉删除 QQ消息的侧滑删除效果之炫酷,想必大家都见过吧,本人作为一名安卓开发人员,遇到如此炫酷的效果,怎能不研究一番呢,现本人已实现其基本功能,现将代码贴出,望各位大 ...

  2. android仿疯狂猜图源码,Android开发实现高仿优酷的客户端图片左右滑动切换功能实例【附源码下载】...

    本文实例讲述了Android开发实现高仿优酷的客户端图片左右滑动切换功能.分享给大家供大家参考,具体如下: 本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和 ...

  3. Android开发:高仿QQ,发送图片时炫酷的加载效果

    之前看到qq 的图片发送效果很酷炫,很吸引人,不过现在这个效果好像没有了.试了几次,决定试试实现.大致想了下,实现效果还不错 需要实现的效果 一图胜千言,看图如下: 怎样实现呢? 首先从图中看分两部分 ...

  4. H5页面微信、QQ和微博的快捷登录

    1.QQ的快捷登录: https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=12345678&re ...

  5. Android开发之高仿百度地图底部滑出菜单

    老套路上图: 底部菜单滑出效果如上图: 首先依赖三方库 implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.g ...

  6. php 微信第三方登录demo,第三方登录 - 快速接入微信、QQ、微博等第三方登录方式 – 基于ThinkPHP和Bootstrap的极速后台开发框架...

    此插件基于FastAdmin和Thinkphp5开发的第三方登录插件,可用于对接微.微博.QQ等第三方登录,目前CMS中的小程序账号登录绑定就是基于此插件开发,在使用CMS中的小程序登录功能之前请务必 ...

  7. android 微博字体高亮,安卓开发札记——高仿新浪微博文字处理(实现关键字高亮,自定义表情替换并加入点击事件实现)...

    安卓开发笔记--高仿新浪微博文字处理(实现关键字高亮,自定义表情替换并加入点击事件实现) 先让大家看下效果图,这个是我自己在闲暇时间仿写的新浪微博客户端: 今天来讲讲如何实现上图的效果,这里需要用到S ...

  8. Flutter开发实战 高仿微信(二)发现页

    Flutter开发实战 高仿微信(二)发现页 Flutter开发实战 高仿微信(二)发现页 1.1 微信发现页面简述 1.2 APP框架优化 1.2.1 配置APP Logo和启动图片 1.2.2 配 ...

  9. Flutter开发实战 高仿微信(一)首页

    Flutter开发实战 高仿微信(一)首页 Flutter开发实战 高仿微信(一)首页 flutter 开发微信项目 (一) 1. 开发HomePage页 2. 用到的知识点讲解 2.1 Bottom ...

最新文章

  1. 使用现代C++如何避免bugs(下)
  2. Nature:拟南芥微生物组功能研究
  3. java,使用get、post请求url地址
  4. 网站外链优化布局和新增技巧介绍!
  5. layoutSubviews何时被调用
  6. 160家优秀国外技术公司博客
  7. 纯文本文件的字符编码未声明_浅谈几种常见的字符编码
  8. 平滑动画 每秒60帧 -- 16ms内绘完一帧
  9. 语言 ota_荣威RX5 PLUS使用最新的家族设计语言,给人更年轻时尚的感觉
  10. 洛谷——P2381 圆圆舞蹈
  11. 常见报错_mysql常见报错之SELECT list is not in GROUP BY clause
  12. 浅谈浏览器端JavaScript跨域解决方法
  13. 机器视觉最火应用领域
  14. 基于JAVA乐居租房网的设计与实现计算机毕业设计源码+系统+lw文档+部署
  15. CSDN 写作小技巧(3)——学会在 CSDN 中插入超链接
  16. opencv 图形识别源码(vs2013+opencv3.0)
  17. 极限中0除以常数_0的美好
  18. mobi怎么在Android手机上打开?
  19. iNFTnews | Yuga Labs收购Meebits,NFT IP市场操纵存在担忧
  20. 解决MacBook Pro M2关于inport tensorflow 出现的Illegal instruction: 4

热门文章

  1. mysql解压版下载安装教程_mysql 解压版安装配置方法教程
  2. linux nfs共享目录集群,CentOS7通过NFS共享文件夹,主要用于集群部署时候,文件的共享...
  3. hpe服务器稳定性,hpe服务器安装与配置
  4. html 常见hack,针对主流浏览器的CSS-HACK写法及IE常用条件注释
  5. php面向对象引用文件,PHP面向对象之对象和引用
  6. stm32 usb 虚拟串口 相同_为什么说你要学习USB?(一)
  7. android 摄像头预览左右镜像_OpenJDK镜像的tag说明
  8. Maven 加载ojdbc14.jar报错,解决方法
  9. [trouble shoot]atol和atoll
  10. node11---相册