精华内容
参与话题
问答
  • 前言:如何快速接入第三方登录?无需第三方审核认证授权,一次性接入多个平台的解决方案, 此处实现使用SpringBoot+vue 实现此效果 1.申请接入应用 http://open.51094.com/ 按需选择接入的类型 填写应用信息 完成...

    前言:如何快速接入第三方登录?无需第三方审核认证授权,一次性接入多个平台的解决方案,

    此处实现使用SpringBoot+vue 实现此效果

    1.申请接入应用

    http://open.51094.com/

    在这里插入图片描述
    按需选择接入的类型
    在这里插入图片描述
    填写应用信息

    在这里插入图片描述
    完成应用创建后
    在这里插入图片描述

    2.前端配置

    引入js

    因为.vue文件中 只能存在一个<script>标签,那咋办?

    使用编码声明的方式将js配置成一个组件
    在这里插入图片描述
    上面的src就是你应用的此处地址
    在这里插入图片描述
    在页面中编写此代码

    //引入组件 相当于 引入<script> 引用js
    <scriptLink></scriptLink>
    //第三方应用图标渲染的位置
    <span id="hzy_fast_login"></span>
    

    出现此图标你就成功渲染成功了

    但是。。。你会不会觉得这图标有点丑。想使用自己的样式

    在这里插入图片描述
    打开F12找到QQ的logo 查看此链接 放在你自己的图标上即可
    在这里插入图片描述
    在这里插入图片描述

    3.后端配置

    先写一下接入第三方配置
    x
    读取配置类
    在这里插入图片描述

    package com.github.ucenter.config;
    
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    /**
    * @author: lujie
    * @create: 2020/3/30
    * @description: ConstantPropertiesUtil
    **/
    @Component
    public class ConstantPropertiesUtil implements InitializingBean {
    
    	@Value("${oauth.appid}")
    	private String oauthAppId;
    
    	@Value("${oauth.token}")
    	private String oauthToken;
    
    	public static String OAUTH_APPID;
    	public static String OAUTH_TOKEN;
    	public static String OAUTH_TYPE;
    
    
    	@Override
    	public void afterPropertiesSet() throws Exception {
    		OAUTH_APPID = oauthAppId;
    		OAUTH_TOKEN = oauthToken;
    		OAUTH_TYPE ="get_user_info";
    	}
    
    
    }
    
    

    **创建HTTP 调用工具类 ,方便后面获取回调code 进行获取用户登录信息
    **

    package com.github.commonutils.utils;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.List;
    import java.util.Map;
    
    /**
    * @author: lujie
    * @create: 2020/4/19
    * @description: HttpRequest
    **/
    public class HttpRequest {
        /**
         * 向指定URL发送GET方法的请求      *
         * * @param url      *            发送请求的URL      * @param param      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。      * @return URL 所代表远程资源的响应结果
         */
        public static String sendGet(String url, String param) {
            String result = "";
            BufferedReader in = null;
            try {
                String urlNameString = url + "?" + param;
                URL realUrl = new URL(urlNameString);
                // 打开和URL之间的连接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的请求属性
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 建立实际的连接
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.out.println(key + "--->" + map.get(key));
                }
                // 定义 BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送GET请求出现异常!" + e);
                e.printStackTrace();
            }
            // 使用finally块来关闭输入流
            finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            return result;
        }
    
    
        /**
         * 向指定 URL 发送POST方法的请求      *       * @param url      *            发送请求的 URL      * @param param      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。      * @return 所代表远程资源的响应结果
         */
        public static String sendPost(String url, String param) {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数
                out.print(param);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!" + e);
                e.printStackTrace();
            }
            //使用finally块来关闭输出流、输入流
            finally {
                try {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            } return result;
        }
    }
    
    
    

    创建微信回调接口

    在这里插入图片描述
    要保证你填写的这个地址能访问到你的接口
    在这里插入图片描述
    **

    package com.github.ucenter.controller;
    
    import cn.hutool.core.util.StrUtil;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.github.commonutils.constants.CommonConstant;
    import com.github.commonutils.utils.HttpRequest;
    import com.github.commonutils.utils.JwtUtils;
    import com.github.ucenter.config.ConstantPropertiesUtil;
    import com.github.ucenter.entity.UcenterMember;
    import com.github.ucenter.service.UcenterMemberService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
    * @author: lujie
    * @create: 2020/4/19
    * @description: WeChatCallbackController 微信回调接口函数
    **/
    @Controller
    @Slf4j
    public class WeChatCallbackController {
    
    
        @Resource
        private UcenterMemberService ucenterMemberService;
    
        @GetMapping
        public void WeChatCallback(@RequestParam("code") String code, HttpServletResponse response) throws IOException {
            log.info("=================================第三方登录唯一标识:"+code);
    
            String baseURL = "http://open.51094.com/user/auth.html";
            String params = "type=get_user_info&code="+code+"&appid="+ConstantPropertiesUtil.OAUTH_APPID+"&token="+ConstantPropertiesUtil.OAUTH_TOKEN;
            String result = HttpRequest.sendPost(baseURL, params);
            JSONObject jsonObject = JSONObject.parseObject(result);
            String name = jsonObject.getString("name");
            String img = jsonObject.getString("img");
            Integer sex = jsonObject.getInteger("sex");
            String from = jsonObject.getString("from");
            String openId = jsonObject.getString("uniq");
    
            UcenterMember user =null == ucenterMemberService.getByOpenId(openId)?
                    new UcenterMember():ucenterMemberService.getByOpenId(openId);
            user.setNickname(name);
            user.setOpenid(openId);
            user.setAvatar(img);
            user.setSex(sex);
            /**
             *新用户注册
             */
            if(StrUtil.isBlank(user.getId())){
                user.setAge(CommonConstant.DEFAULT_AGE);
                ucenterMemberService.save(user);
            //登录
            }else {
                ucenterMemberService.updateById(user);
            }
            //此处跳转首页
            String token = JwtUtils.getJwtToken(user.getId(),user.getNickname());
           response.sendRedirect("http://127.0.0.1:3000?token="+token)  ;
        }
    
    }
    
    

    有问题在底下留言!!!啾咪~

    展开全文
  • 由于需要测试微信登录功能,在微信授权登录成功后需要解除绑定功能。一直没有找到对应的方法。偶然间在 “发现” =&gt; "游戏"里看见了最近在玩的列表中居然有相关的APP,然后在菜单中“游戏管理”...

    由于需要测试微信登录功能,在微信授权登录成功后需要解除绑定功能。一直没有找到对应的方法。偶然间在 “发现” => "游戏"里看见了最近在玩的列表中居然有相关的APP,然后在菜单中“游戏管理”取消游戏关联"即可。但是APP和游戏没有任何关系,居然也归类到了游戏。百思不得其解。不过终于解决了一个问题微笑

    更新:目前最新版本的流程是 “我”-> "设置" -> "隐私" -> 拉到最下面 "授权管理" -> 点击右上角 “管理” 即可

    展开全文
  • Android应用内调用第三方应用

    千次阅读 2014-01-05 22:05:30
    AlienTech for better life!~

        有时候我们的应用里需要调用别人已经写好的应用(前提是用户手机上已经安装)。自己的应用A调用自己的应用B,有比较多的方法,例如,在被调用的应用B的Activity内,设置Intent-filter,然后直接使用Intent调用。这些后面再讲,本讲先讲如何调用第三方应用,例如:百度云盘。

        调用第三方应用需要知道两个参数(这里需要先对第三方应用的AndroidManifest.xml文件进行解析,有点破解的味道):

    1. 第三方应用的包名;
    2. 第三方应用内的Activity类名(可以根据自己的需要选择,一般选择最先启动的Activity)

        之后就可以调用如下代码启动第三方应用:

    ComponentName componentName = new ComponentName(pkg, cls);
    Intent intent = new Intent();
    intent.setComponent(componentName);
    startActivity(intent);

        注:接写AndroidManifest.xml文件可以使用:http://code.google.com/p/xml-apk-parser/

        使用方法:

        AXMLPrinter2只能解析二进制的xml文件:

    java -jar AXMLPrinter.jar <二进制xml文件名>

        解析AndroidManifest.xml文件:

    java -jar APKParser.jar <apk文件名>






    展开全文
  • 我想检查第三方应用程序是否已经启动。 如果我知道 packagename 的话,就能打开第三方应用程序。 比如: Intent intent = getPackageManager().getLaunchIntentForPackage("com.thirdparty.package"); start...
  • 在手机已Root情况下,我开发的应用如何隐藏第三方应用程序,不要第三方桌面。我的应用获取root权限,是否可以使用 setApplicationEnabledSetting()方法直接隐藏?请有这方面经验的大大指点下。
  • android访问第三方应用

    2015-12-08 08:04:45
    android访问手机的备忘录并且获取备忘录中的数据如何操作?
  • 企业微信---第三方应用开发 笔记

    万次阅读 热门讨论 2018-06-15 15:23:38
    要成为第三方供应商,先按开发文档步骤操作。服务商注册应用 1,注册成功后,配置开发信息:通用开发参数 这里的CorpID是第三方供应商供应商的企业ID,不同于企业微信的CorpID。 ProviderSecret:还未用到,之后再...

    跳坑记录

    要成为第三方供应商,先按开发文档步骤操作。服务商注册应用。也可以申请个企业微信帐号,然后成为服务商(可以做测试,但应用不能上线)

    1,注册成功后,配置开发信息:通用开发参数

    这里的CorpID是第三方供应商供应商的企业ID,不同于企业微信的CorpID。 ProviderSecret:还未用到,之后再补
    系统事件接收URL:保存之前腾讯的企业微信服务器会发送一个Get请求到这个地址,所要要准备一台服务器(也可以用内网穿透工具实现),接受这请求,并做URL验证。
    验证URL有效性

    Token、EncodingAESKey:这个Token+EncodingAESKey+腾讯微信服务器的Get请求的QueryString,一起来解密Get请求的密文,并返回明文,解析正确并Response.Write(明文),也就验证URL成功了。

    这里写图片描述

    2, 创建应用,并配置

    SuiteID:指令回调URL 解密时使用。数据回调URL解密时使用的是安装第三方应用的授权方的CorpID。如果错误,解密会返回40005
    错误的CorpID。

    Secret:和SuiteID一起用来获取应用授权Token

    这里写图片描述

    应用主页:要设计的应用主页 可信域名:还不清楚,之后再补 业务设置URL:安装第三方应用的企业(授权方)管理员进入应用后台配置的URL
    数据回调URL:这里也是要先验证,与前面的系统事件接收URL验证方式一样,要处理腾讯企业微信服务器的Get请求并返回解密后的明文,验证后,处理接收消息时是POST请求
    指令回调URL:使用时感觉就是接收Event的,指令理解为事件更好理解吧。与前面的系统事件接收URL验证方式一样,要处理腾讯企业微信服务器的Get请求并返回解密后的明文,验证后,处理接收消息时是POST请求

    这里写图片描述

    应用主页配置

    前面未对应用主页说明,自己在学习中也遇到诸多问题,问题列表与解决办法:

    1. 自定义菜单怎么在应用主页上显示?:到目前没解决。如果是企业应用而不是第三方应用的话,只要不设置应用主页,在进入应用时直接回显示自定义的菜单。
    2. 怎么将授权方和我做的第三方应用联系起来? 这个问题搞了两天才大概的了解 :
      1. 先仔细阅读开发文档 链接1网页授权登录 ,链接2网页授权登录第三方
        。要清楚了解链接1中的 OAuth2.0接入流程说明,因为是做的第三方应用,链接2页必须要仔细阅读。
      2. 了解后发现,之前的应用主页设置的有问题,应用主页要写成下面的形式(可能不完全正确),redirect_uri的域名一定要与【可信域名】一致,如果可信域名是二级,这里也要设置为二级域名。
      3. 以上两点了解后,参考 企业微信第三方应用配置
        ,终于能将 企业微信和第三方应用串联起来了。
      4. 第三方应用里,想要创建主菜单、二级菜单、view菜单、click菜单怎么做?:貌似全要由第三方自己实现了。前面说了,非第三方的企业应用只要不设置主页就可以直接使用企业微信后台设置的自定义菜单

    第三方应用里的自定义菜单的界面是当有消息时才会看到,不是用来设计应用,而是作为第三方应用的入口:比如点选哪个菜单跳转到第三方应用的那个网址、点选哪个菜单执行拍照、图片选取、录音什么的。但第三方应用要求必须设置应用主页,菜单不就显示不出来了。
    这里写图片描述

    展开全文
  • 打开第三方应用

    千次阅读 2014-04-28 10:13:25
    记录一下,自己用过的打开第三方应用的两种方法; 1.//根据包名类名启动第三方应用(要启动的应用的包名,要启动的activity) openApp("com.xx.test", "com.xx.test.TestActivity"); private void openApp...
  • Android杀不死的第三方应用,早于系统应用启动的第三方应用始末
  • 微信中如何拉起第三方应用 其他浏览器都可以 微信是否需要授权或者是白名单?请熟悉的朋友们给点提示和思路
  • 自己写的项目要查看其它应用程序的运行时间 会用到com.android.internal.app.IUsageStats$Stub这个,但是google规定的不让sdk直接用,如果在源码环境下使用这个类的话应该如何去做呢?我有编译好的源码,如何用在...
  • 一、申请APPID 微信公共平台和微博分享一样,也需要申请一个ID,来作为调起微信、分享到微信的唯一标识。 ...具体的申请流程网站上有很...(1)申请APPID时的应用名字审核通过之后将不允许更改,所以申请时的应用
  • 系统应用和第三方应用跳转

    千次阅读 2016-06-20 16:27:53
    电话、短信、邮件、网页浏览。调用系统服务、系统应用跳转,第三方应用跳转
  • Flutter打开第三方应用

    千次阅读 2019-04-22 10:55:00
    在flutter中打开第三方应用可以使用url_launcher插件 打开https://pub.dartlang.org/,然后搜索url_launcher,然后点击进入该插件界面 大家在installing中可以看到使用方法 首先在pubspec.yaml中添加url_...
  • Android禁用第三方应用

    千次阅读 2018-05-02 16:22:02
    需要权限android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE...非system app即便在Android Mainfest.xml中强制写上,安装时也部会写入/data/system/packages.xml启用第三方应用图标:PackageManager pm = ...
  • flutter 打开第三方应用

    千次阅读 2019-08-16 17:46:42
    1.url_launcher安装 2.引用(就是Url不一样) import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart';...class OpenThree extends StatelessWidget { ... Widget build(Buil...
  • iOS 打开第三方应用

    千次阅读 2016-06-13 16:02:06
    打开第三方应用
  • cordova调用第三方应用

    千次阅读 2018-10-23 17:33:27
    项目需求:在项目中调用系统中含有的第三方地图应用 需求其实分为两步:  1. 查找本地地图应用  2.成功调起本地应用 首先需要安装两个插件,安装指令如下:  1. cordova plugin add cordova-plugin-...
  • 微信打开第三方应用

    千次阅读 2016-01-25 11:20:23
    android:name=".activity.StartActivity"  android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"  android:screenOrientation="portrait">    

空空如也

1 2 3 4 5 ... 20
收藏数 33,836
精华内容 13,534
关键字:

第三方应用