精华内容
下载资源
问答
  • 微信公众号开发基本流程

    万次阅读 多人点赞 2019-04-07 16:46:18
    过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。 微信公众平台官网:https://mp.weixin.qq.com 文章目录一、注册公众号二、了解公众号管理页面三、必备...

    背景:
    过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。

    微信公众平台官网:https://mp.weixin.qq.com



    一、注册公众号

    在这里插入图片描述
    首先注册时可以看到公众号有三种类型,个人用户大多数选择订阅号,而企业用户一般选择服务号和企业号

    我们平常大多数关注的都是订阅号,他们统一都放置在微信应用的订阅号消息列表中,没有微信支付等高级功能,只是用于发布文章等基础功能。
    在这里插入图片描述

    服务号企业号都在会话列表,和我们的微信好友是同级别的位置,具备微信支付等高级功能,一般是某个企业品牌的对外操作窗口,如海底捞火锅、顺丰速运等。
    在这里插入图片描述

    我们前期开发测试只需要注册个人订阅号即可,真正开发使用的是开发者工具里的测试号,具体下面会说。

    真正生产的话,使用的都是经过微信认证的订阅号、服务号、企业号。


    二、了解公众号管理页面

    我们在微信公众平台扫码登录后可以发现管理页面左侧菜单栏有丰富的功能:
    在这里插入图片描述
    大概可以分为这几大模块:
    首页功能小程序管理推广统计设置开发

    作为开发人员,首先应该关注的是设置、开发模块;而作为产品运营人员,关注的是功能、管理、推广模块;作为数据分析人员,关注的是统计模块。

    首先我们不妨各个功能模块都点击看一看,大概了解下我们能做些什么。可以确认的是,这个微信公众平台当然不只是给开发人员使用的,它提供了很多非技术人员可在UI界面上交互操作的功能模块。

    如配置消息回复、自定义菜单、发布文章等:
    在这里插入图片描述
    这个时候我们可能会想:这些功能好像非技术人员都能随意操作,那么还需要我们技术人员去开发吗?

    答案是: 如果只是日常简单的推送文章,就像我们关注的大多数公众号一样,那确实不需要技术人员去开发;但是,如果你想将你们的网站嵌入进去公众号菜单里(这里指的是把前端项目的首页链接配置在自定义菜单),并且实现微信端的独立登录认证、获取微信用户信息、微信支付等高级功能,或者觉得UI交互的配置方式无法满足你的需求,你需要更加自由、随心所欲的操作,那么我们就必须启用开发者模式了,通过技术人员的手段去灵活控制公众号。

    这里有一点需要注意,如果我们决定技术人员开发公众号,必须启用服务器配置,而这将导致UI界面设置的自动回复和自定义菜单失效!

    我们在 开发 - 基本配置 - 服务器配置 中点击启用
    在这里插入图片描述
    在这里插入图片描述
    我们团队就遇到过这种情况:两个项目组共用一个公众号,结果一个启用了服务器配置,使另一个项目组手动配置的菜单失效了。所以要注意这点!

    至于服务器配置中的选项代表什么意思、如何填写,我们下面再讲。


    三、必备开发者工具的使用

    在这里插入图片描述
    我们进入 开发 - 开发者工具, 可以发现微信提供了六种开发者工具,其中前四种属于开发必备:开发者文档在线接口调试工具web开发者工具公众平台测试账号

    1.开发者文档

    在这里插入图片描述
    这个不用说!在我们开发中属于最最最基础和重要的东西了,我们要想熟练开发公众号,首先必须熟读开发者文档!有些功能的开发甚至非要反复研读、咬文嚼字一番不可。PS:该文档吐槽的地方也不少,有些地方的确讲的不够明确!

    2.在线接口调试工具

    在这里插入图片描述
    这个工具也算比较实用,包含大多数接口的在线调试,我们可以直接在上面输入参数,获取微信服务端的返回结果。

    3.web开发者工具

    在这里插入图片描述
    这个工具是一款桌面应用,需要下载,它通过模拟微信客户端的UI使得开发者可以使用这个工具方便地在PC或者Mac上进行开发和调试工作,一般是前端使用该工具进行页面、接口调试。

    4.公众平台测试账号

    在这里插入图片描述
    这个测试号工具对我们的重要性可以说是仅次于开发者文档。我们可以创建测试号无需申请、认证真实的公众帐号、可在测试帐号中体验并测试微信公众平台所有高级接口。并且所有的配置都可在一个页面上编辑,使开发测试变得极其便利。


    四、细读开发者文档

    文档地址:https://mp.weixin.qq.com/wiki

    需要注意的是,细读开发者文档不是让你所有模块都去阅读,而是重点的重复细读,非重点的选择性阅读。
    在这里插入图片描述
    其中前两个模块:开始前必读开始开发,属于重点关注对象,也是整个微信开发的基石所在,需要多读几遍。其次是微信网页开发模块微信网页授权,比较难理解,需要特别注意。其他的模块则根据你们的项目功能需求,有选择性的阅读即可。

    这里我就不多罗嗦了,大家看文档去吧!下面我会描述一些重点内容的实际操作情况以及代码,请确保你已经浏览过文档


    五、开发流程重点解析


    1.开发环境准备

    这里所谓的开发环境准备主要指的是我们项目服务端和微信服务端的网络通讯环境准备。

    我们平常开发可能只需要IP端口就能通讯,顶多配置下白名单放行,但微信公众号开发我们需要通过域名通讯(微信会访问我们配置的域名地址:服务器基本配置中的URL,下面会介绍),也就是我们各自开发环境需要拥有独立的域名,微信就能通过这个域名请求到我们的本地开发服务,各自进行开发测试。

    而我们一般都是内网开发,整个内网只有一个对外域名,所以这时就需要 内网穿透 ,为我们每个开发人员配置各自开发机器的域名。

    那如何进行内网穿透呢?你首先可以找下你们的网管,看他能不能帮你解决,如果不能,那就安装内网穿透工具,我们自己动手!

    我选择的内网穿透工具是natapp,这个有免费版、收费版,免费版的域名会随机变化,而收费版可以拥有固定域名,建议选择收费版,9元每月并不贵;大家可以对照natapp的文档安装使用,并不难。
    在这里插入图片描述
    这样我们本地开发环境就拥有自己的域名啦!然后就可以在测试号管理页面配置本地访问地址URL了。

    2.服务器基本配置

    无论是在真实公众号开发 - 基本配置 - 服务器配置,还是在 测试号管理 中,我们都可以看到这几个基本参数:
    开发者ID(AppID)、开发者密码(AppSecret)、服务器地址(URL)、令牌(Token)

    AppID 是公众号唯一开发识别码,配合开发者密码可调用公众号的接口能力,大多数微信接口都需要附带该参数。

    AppSecret 是校验公众号开发者身份的密码,具有极高的安全性。切记勿把密码直接交给第三方开发者或直接存储在代码中。如需第三方代开发公众号,请使用授权方式接入。其中获取accessToken就需要同时传入AppID和AppSecret获取。

    URL 是开发者用来接收微信消息和事件的接口URL,也就是我们服务后端的入口地址,需要注意的是该地址必须以域名形式填写,且必须以http 或 https 开头,分别支持80端口和443端口。如:http://yuanj.natapp1.cc/wechat。

    Token 可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性),也就是我们项目和微信服务端进行通信时,必须保证公众平台配置的Token和我们后台代码配置的Token保持一致,这样微信就能验证我们身份。

    注:EncodingAESKey 参数由开发者手动填写或随机生成,将用作消息体加解密密钥,我们前期可以采用明文模式进行开发测试,暂时先不用关注。
    在这里插入图片描述
    我们点击提交时,微信会以GET请求的方式访问我们配置的URL地址,并附加几个参数进行验证,所以你需要在该地址对应的项目后端接口里对这几个参数进行加工处理返回微信需要的结果,这样就可以验证成功,使微信服务端认可你配置的URL和Token参数,后续就能互相通信了!
    在这里插入图片描述
    具体情况可以阅读微信文档 - 开始前必读 - 接入指南

    这里附上该接口的Java代码:

    /**
     * 微信对接验证接口
     * */
    @RestController
    @RequestMapping(value = "/wechat")
    public class ValidateController {
        @Autowired
        WechatConfig wechatConfig;
    
       @RequestMapping(value = "", method = RequestMethod.GET)
       public void validate(HttpServletRequest req, HttpServletResponse resp) {
            System.out.println("-----开始校验签名-----");
    
            // 接收微信服务器发送请求时传递过来的参数
            String signature = req.getParameter("signature");
            String timestamp = req.getParameter("timestamp");
            String nonce = req.getParameter("nonce"); //随机数
            String echostr = req.getParameter("echostr");//随机字符串
    
            // 将token、timestamp、nonce三个参数进行字典序排序并拼接为一个字符串
            String TOKEN = wechatConfig.getToken();
            String sortStr = sort(TOKEN,timestamp,nonce);
            
            // 字符串进行shal加密
            String mySignature = WechatUtils.shal(sortStr);
            
            // 校验微信服务器传递过来的签名 和  加密后的字符串是否一致, 若一致则签名通过
            if(!"".equals(signature) && !"".equals(mySignature) && signature.equals(mySignature)){
                System.out.println("-----签名校验通过-----");
                try {
                    resp.getWriter().write(echostr);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else {
                System.out.println("-----校验签名失败-----");
            }
        }
        
       /**
         * 参数排序
         * @param token
         * @param timestamp
         * @param nonce
         * @return
         */
        public static String sort(String token, String timestamp, String nonce) {
            String[] strArray = {token, timestamp, nonce};
            Arrays.sort(strArray);
            StringBuilder sb = new StringBuilder();
            for (String str : strArray) {
                sb.append(str);
            }
            return sb.toString();
        }
    }
    
    

    3.存取access_token参数

    access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时(7200秒),需定时刷新重复获取将导致上次获取的access_token失效

    access_token这个参数非常重要,几乎贯穿整个微信公关号项目开发,我们如何在有效期内定时刷新获取呢?
    如果我们的微信公众号项目是单服务架构,可以直接作为静态变量存储在内存里;如果是多服务,可以用中间件存储Redis、数据库都可以。SpringBoot项目内部可以通过@Scheduled注解,执行定时任务,既然access_token有效期是2小时,那我们可以一小时刷新获取一次,将其存入Redis,覆盖之前的access_token。


    4.公众号消息管理

    在这里插入图片描述
    很多公众号都可以通过消息发送来与其进行交互,那这样的功能如何代码实现呢?

    具体我们可以在微信文档 - 消息管理 模块查阅:
    在这里插入图片描述
    在此我要提到的一点就 微信公众号的消息交互都是通过XML格式进行的!这点就很坑了。。现在我们前后端、服务端的消息传输基本都是Json格式了,也习惯了Json格式的解析处理,所以遇到XMl格式的处理又要多费些事了。

    为什么微信采用XML格式呢?我个人猜测是几年前还是XML格式的天下,当时Json还没有这么流行,腾讯毕竟是产品业务驱动的,当然选择当时开发人员最熟悉的XML格式了开发,后面随着微信平台的普及,用户越来越多,想重构改成Json格式估计也十分困难,所以历史就遗留下来了呗。。

    我在此推荐一个GitHub上一个微信开发 Java SDK,里面有整个微信开发平台很多功能模块造好的轮子,我们可以参考下直接使用:
    https://github.com/Wechat-Group/WxJava
    在这里插入图片描述
    比如现在对于XMl消息解析这个需求,上面就提供了完整详尽的代码。


    5.获取openid以及网页授权(重难点)

    注意,这是公众号开发的重难点之一,请把技术文档中的微信网页授权模块多读两遍,然后带着疑问来看我的解析。

    (1)先明确为什么需要网页授权?我们的目的是什么?

    答:用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。也就是通过这种授权机制,我们能获取微信用户信息,比如:头像、昵称、地区、个性签名等。

    (2)既然目的是获取用户基本信息,微信不是提供了专门的接口吗?非要网页授权?

    答:在文档的 用户管理 - 获取用户基本信息(UnionID机制) 模块可以看到的确有获取用户基本信息接口:
    在这里插入图片描述
    可以看到,这个接口只需要提供openid或者unionid,即可直接获取用户基本信息。那么问题来了,openid(unionid)又是如何获取呢?

    微信平台提供了两种方式获取用户的openid

    第一种方式:

    用户与公众号产生消息交互时,会以POST请求的方式向我们配置的服务器URL地址发送XML格式的消息,并附带该用户对应公众号的openid!关于什么是消息交互我们可以查看文档中的消息管理模块,比如我们在公众号输入栏中发送文字图片语音等属于普通消息交互,我们关注、取关、点击自定义菜单等属于事件消息交互,每当前端用户进行这个操作时,微信服务端都会向我们项目后台发送POST请求给我们传达信息:
    在这里插入图片描述
    可以看到,这个推送数据包中就包含了用户的消息交互类型、时间以及我们需要的openid!也就是说,无论用户在公众号里干了啥操作,我们都能知道他这个操作干了啥,以及他是谁(openid),这时就能调用 用户管理 - 获取用户基本信息(UnionID机制) 接口获取用户基本信息了。

    别高兴太早,这种通过消息交互获取用户信息的方式,用户占主动地位,我们项目后端服务被动接受,那么如果我有个基本需求:我想在自定义菜单 - 对应我们网站的前端页面上展示微信用户基本信息,能做到吗?你如何把后台接收到的消息和前端用户关联绑定?
    可见,这种被动的方式并不能实现该功能,我们需要主动出击,在前端就能获取到当前操作用户的openid!

    第二种方式:

    这种方式就是通过网页授权机制主动出击!详情见下文。

    (3)网页授权有哪几种机制?分别是怎样实现?应用于什么场景?

    答:主要有两种机制,对应两种scope:

    snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)。

    snsapi_userinfo为scope发起的网页授权,是用来获取用户基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

    光看这两句解释你可能有一堆疑问,我们逐一分析:

    两种机制的前面授权步骤相同,大概如下:

    我们先要按照文档要求构造一个链接https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    其中重点参数是redirect_uri,这个参数填的既可以是前端项目url,也可以是后端接口url,然后点击这个链接后,微信服务端经过重定向到我们填写的redirect_uri,会在此redirect_uri后拼接上一个code参数!然后前端或者后端通过code参数就可以调微信接口https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code获取openid等信息了:
    在这里插入图片描述
    这里讲下 snsapi_basesnsapi_userinfo不同点

    首先snsapi_base静默授权,什么意思呢?就是用户没有感知;与之对应的就是非静默授权snsapi_userinfo了,这个scope公众号会弹出一个小窗口需要用户手动点击授权,类似这种:
    在这里插入图片描述
    那么这两种scope授权的优劣势在哪呢?

    snsapi_base 的优势在于用户无感知,体验好,方便快捷;劣势在于获取openid后只能通过用户管理 - 获取用户基本信息(UnionID机制) 接口获取用户基本信息,而这种方式需要确保用户已经关注,不然是没有相关信息的!
    snsapi_userinfo 的优势在于无需用户关注公众号,只要用户点击了授权确认,即可通过access_token和openid调用专门的拉去用户信息接口获取信息,比较暴力。。;劣势在于需要用户手动授权,可能影响用户体验
    在这里插入图片描述

    在此说下,我们项目是通过snsapi_base静默授权的,其中redirect_uri配置的是前端项目首页地址(前后端分离),并将构造的这个链接封装起来,直接配置在自定义菜单里,那么用户点击菜单,就直接重定向到前端项目,然后前端获取code参数调用后端获取openid接口,将获取的openid缓存到客户端,以便后面使用。

    (4)想要进行网页授权,我们需要在公众平台配置什么吗?

    答:需要!
    如果是测试号,需要在 测试号管理 - 体验接口权限表 - 网页服务 - 网页帐号 点击 修改
    在这里插入图片描述
    在这里插入图片描述
    在这里配置的是回调页面redirect_uri的域名

    如果是正式号(需要微信认证),需要在 开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息 的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

    而且正式号其他配置的地方也和测试号不一样,比如多了IP白名单、域名根路径下的txt验证文件,这个稍微摸索下应该没啥问题的。


    over 暂时就回忆这么多了。。。可能有遗漏大家可以提出哈 ~ 下一篇博客写几个开发时的小问题补充下吧

    展开全文
  • 微信公众平台开发入门

    万人学习 2015-01-06 11:21:27
    本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。...例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发
  • Android 蓝牙开发基本流程

    万次阅读 多人点赞 2015-04-24 16:42:40
    对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少 Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发...

    此例子基于 android demo

     

    对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少     Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发;
        鉴于很多开发人员现在也有蓝牙开发的需求,也为了大家少走些弯路,先将我积攒的一点点在Android蓝牙开发经验与大家分享一下!

       首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限

    <uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />

    <uses-permissionandroid:name="android.permission.BLUETOOTH" />

     

     

    注:Android 6.0后需要加上

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" 

    这个权限

    然后,看下api,Android所有关于蓝牙开发的类都在android.bluetooth包下,如下图,只有8个类

                    
    而我们需要用到了就只有几个而已:

        1.BluetoothAdapter 

    顾名思义,蓝牙适配器,直到我们建立bluetoothSocket连接之前,都要不断操作它BluetoothAdapter里的方法很多,常用的有以下几个:

          cancelDiscovery() 根据字面意思,是取消发现,也就是说当我们正在搜索设备的时候调用这个方法将不再继续搜索

          disable()关闭蓝牙

          enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户

    Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

    startActivityForResult(enabler,reCode);//同startActivity(enabler);

          getAddress()获取本地蓝牙地址

          getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter

          getName()获取本地蓝牙名称

          getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备

          getState()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)

          isDiscovering()判断当前是否正在查找设备,是返回true

          isEnabled()判断蓝牙是否打开,已打开返回true,否则,返回false

         listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步

          startDiscovery()开始搜索,这是搜索的第一步

    2.BluetoothDevice

    看名字就知道,这个类描述了一个蓝牙设备

          createRfcommSocketToServiceRecord(UUIDuuid)根据UUID创建并返回一个BluetoothSocket

    getState() 蓝牙状态这里要说一下,只有在 BluetoothAdapter.STATE_ON 状态下才可以监听,具体可以看andrid api;

    这个方法也是我们获取BluetoothDevice的目的——创建BluetoothSocket
    这个类其他的方法,如getAddress(),getName(),同BluetoothAdapter

        3.BluetoothServerSocket

    如果去除了Bluetooth相信大家一定再熟悉不过了,既然是Socket,方法就应该都差不多,这个类一种只有三个方法两个重载的accept(),accept(inttimeout)两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行!


    还有一点需要注意的是,这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接

          close()这个就不用说了吧,翻译一下——关闭!

     4.BluetoothSocket

     跟BluetoothServerSocket相对,是客户端一共5个方法,不出意外,都会用到

          close(),关闭

          connect()连接

          getInptuStream()获取输入流

          getOutputStream()获取输出流

          getRemoteDevice()获取远程设备,这里指的是获取bluetoothSocket指定连接的那个远程蓝牙设备

     

     

    1、获取本地蓝牙适配器

          BluetoothAdapter
    mAdapter= BluetoothAdapter.getDefaultAdapter();

     2、打开蓝牙

          if(!mAdapter.isEnabled()){

    //弹出对话框提示用户是后打开

    Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

    startActivityForResult(enabler, REQUEST_ENABLE);

          //不做提示,强行打开

          // mAdapter.enable();

    }

    3、搜索设备
       1)刚才说过了mAdapter.startDiscovery()

    是第一步,可以你会发现没有返回的蓝牙设备,怎么知道查找到了呢?向下看,不要急

    2)定义BroadcastReceiver,关于BroadcastReceiver不多讲了,不是今天的讨论内容,代码如下

     

        BroadcastReceiver mReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                //找到设备
                if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                    BluetoothDevice device = intent
                            .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    
                    if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
    
                        Log.v(TAG, "find device:" + device.getName()
                                + device.getAddress());
                    }
                }
                //搜索完成
                else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
                        .equals(action)) {
                    setTitle("搜索完成");
                    if (mNewDevicesAdapter.getCount() == 0) {
                        Log.v(TAG, "find over");
                    }
                }
            }
        };

     这样,没当查找到新设备或是搜索完成,相应的操作都在上段代码的两个if里执行了,不过前提是你要先注册

     

    BroadcastReceiver,具体代码如下

     

        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(mReceiver, filter);
        filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(mReceiver, filter)<span style="font-family:SimSun;">;</span>


    (这段代码,一般写在onCreate()里..)
      4、建立连接,首先Android sdk(2.0以上版本)支持的蓝牙连接是通过BluetoothSocket建立连接(说的不对请高人指正),服务器端(BluetoothServerSocket)和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接

     

    1)服务器端:


    //UUID格式一般是"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"可到

            //http://www.uuidgenerator.com 申请


    BluetoothServerSocket serverSocket = mAdapter. listenUsingRfcommWithServiceRecord(serverSocketName,UUID);
    serverSocket.accept();


    2)客户端:
    //还记得我们刚才在BroadcastReceiver获取了BLuetoothDevice么?
    BluetoothSocket clienSocket=dcvice. createRfcommSocketToServiceRecord(UUID);
    clienSocket.connect();


    5、数据传递,通过以上操作,就已经建立的BluetoothSocket连接了,数据传递无非是通过流的形式
    1)获取流
    inputStream = socket.getInputStream();
    outputStream = socket.getOutputStream();
    2)写出、读入
    这是基础的东西,在这就不多赘述了
    终于写完了,这是我这两天的学习经验,希望对有蓝牙需求的朋友有所帮助!另外,之前我们提过

    android.bluetooth下有8个类,还有4个类没有用到,那4个类里定义的都是常量,我也没用到它们..

     

      最后把我找到的几个蓝牙的例子附在后面,希望从事软件开发,尤其是Android开发的朋友以后多沟通、多分享!

    补充一下,使设备能够被搜索

    Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

    startActivityForResult(enabler,REQUEST_DISCOVERABLE);

     

    demo是包括客户端和服务端;分别放到两个手机上就可以通信;大家改改应该就可以用;

    http://download.csdn.net/detail/q610098308/8681065
    这个是官方的demo:
    http://download.csdn.net/detail/q610098308/8628675

     

    https://edu.csdn.net/course/detail/24723 Android bluetooth 蓝牙通信 视频教程

     

    展开全文
  • FPGA开发基本流程

    千次阅读 2018-08-02 16:22:04
    FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。典型FPGA的开发流程一般如图1所示,包括功能定义/器件选型、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及...

    转自:https://www.cnblogs.com/synow/p/5498654.html

    FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。典型FPGA的开发流程一般如图1所示,包括功能定义/器件选型、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程与调试等主要步骤。

    FPGA典型设计流程

                                                                                      图1  FPGA典型设计流程

    1、功能定义/器件选型

    在FPGA设计项目开始之前,必须有系统功能的定义和模块的划分,另外就是要根据任务要求,如系统的功能和复杂度,对工作速度和器件本身的资源、成本、以及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。 一般都采用自顶向下的设计方法,把系统分成若干个基本单元,然后再把每个基本单元划分为下一层次的基本单元,一直这样做下去,直到可以直接使用EDA元件库为止。

    2、 设计输入

    设计输入是将所设计的系统或电路以开发软件要求的某种形式表示出来,并输入给EDA工具的过程。常用的方法有硬件描述语言(HDL)和原理图输入方法等。原理图输入方式是一种最直接的描述方式,在可编程芯片发展的早期应用比较广泛,它将所需的器件从元件库中调出来,画出原理图。这种方法虽然直观并易于仿真,但效率很低,且不易维护,不利于模块构造和重用。更主要的缺点是可移植性差,当芯片升级后,所有的原理图都需要作一定的改动。目前,在实际开发中应用最广的就是HDL语言输入法,利用文本描述设计,可以分为普通HDL和行为HDL。普通HDL有ABEL、CUR等,支持逻辑方程、真值表和状态机等表达方式,主要用于简单的小型设计。而在中大型工程中,主要使用行为HDL,其主流语言是Verilog HDL和VHDL。这两种语言都是美国电气与电子工程师协会(IEEE)的标准,其共同的突出特点有:语言与芯片工艺无关,利于自顶向下设计,便于模块的划分与移植,可移植性好,具有很强的逻辑描述和仿真功能,而且输入效率很高。 除了这IEEE标准语言外,还有厂商自己的语言。也可以用HDL为主,原理图为辅的混合设计方式,以发挥两者的各自特色。

    3、 功能仿真

    功能仿真也称为前仿真是在编译之前对用户所设计的电路进行逻辑功能验证,此时的仿真没有延迟信息,仅对初步的功能进行检测。仿真前,要先利用波形编辑器和HDL等建立波形文件和测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形,从中便可以观察各个节点信号的变化。如果发现错误,则返回设计修改逻辑设计。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等软件。

    4、 综合优化

    所谓综合就是将较高级抽象层次的描述转化成较低层次的描述。综合优化根据目标与要求优化所生成的逻辑连接,使层次设计平面化,供FPGA布局布线软件进行实现。就目前的层次来看,综合优化(Synthesis)是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表,而并非真实的门级电路。真实具体的门级电路需要利用FPGA制造商的布局布线功能,根据综合后生成的标准门级结构网表来产生。为了能转换成标准的门级结构网表,HDL程序的编写必须符合特定综合器所要求的风格。由于门级结构、RTL级的HDL程序的综合是很成熟的技术,所有的综合器都可以支持到这一级别的综合。常用的综合工具有Synplicity公司的Synplify/Synplify Pro软件以及各个FPGA厂家自己推出的综合开发工具。

    5、 综合后仿真

    综合后仿真检查综合结果是否和原设计一致。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可估计门延时带来的影响。但这一步骤不能估计线延时,因此和布线后的实际情况还有一定的差距,并不十分准确。目前的综合工具较为成熟,对于一般的设计可以省略这一步,但如果在布局布线后发现电路结构和设计意图不符,则需要回溯到综合后仿真来确认问题之所在。在功能仿真中介绍的软件工具一般都支持综合后仿真。

    6、 实现与布局布线

    布局布线可理解为利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能链接的布线通道进行连线,并产生相应文件(如配置文件与相关报告),实现是将综合生成的逻辑网表配置到具体的FPGA芯片上,布局布线是其中最重要的过程。布局将逻辑网表中的硬件原语和底层单元合理地配置到芯片内部的固有硬件结构上,并且往往需要在速度最优和面积最优之间作出选择。布线根据布局的拓扑结构,利用芯片内部的各种连线资源,合理正确地连接各个元件。目前,FPGA的结构非常复杂,特别是在有时序约束条件时,需要利用时序驱动的引擎进行布局布线。布线结束后,软件工具会自动生成报告,提供有关设计中各部分资源的使用情况。由于只有FPGA芯片生产商对芯片结构最为了解,所以布局布线必须选择芯片开发商提供的工具。

    7、 时序仿真

    时序仿真,也称为后仿真,是指将布局布线的延时信息反标注到设计网表中来检测有无时序违规(即不满足时序约束条件或器件固有的时序规则,如建立时间、保持时间等)现象。时序仿真包含的延迟信息最全,也最精确,能较好地反映芯片的实际工作情况。由于不同芯片的内部延时不一样,不同的布局布线方案也给延时带来不同的影响。因此在布局布线后,通过对系统和各个模块进行时序仿真,分析其时序关系,估计系统性能,以及检查和消除竞争冒险是非常有必要的。在功能仿真中介绍的软件工具一般都支持综合后仿真。

    8、 板级仿真与验证

    板级仿真主要应用于高速电路设计中,对高速系统的信号完整性、电磁干扰等特征进行分析,一般都以第三方工具进行仿真和验证。

    9、 芯片编程与调试

    设计的最后一步就是芯片编程与调试。芯片编程是指产生使用的数据文件(位数据流文件,Bitstream Generation),然后将编程数据下载到FPGA芯片中。其中,芯片编程需要满足一定的条件,如编程电压、编程时序和编程算法等方面。逻辑分析仪(Logic Analyzer,LA)是FPGA设计的主要调试工具,但需要引出大量的测试管脚,且LA价格昂贵。目前,主流的FPGA芯片生产商都提供了内嵌的在线逻辑分析仪(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)来解决上述矛盾,它们只需要占用芯片少量的逻辑资源,具有很高的实用价值。

    补充:基于FPGA的SOC设计方法

    目前,由于FPGA性能提升价格下降,同时嵌入越来越多内核,很自然地,很多IC设计公司将FPGA用于ASIC原型验证,把FPGA可编程的优点带到了SOC领域,其系统由嵌入式处理器内核、DSP单元、大容量处理器、吉比特收发器、混合逻辑、IP 以及原有的设计部分组成。

    SOC 平台的核心部分是内嵌的处理内核,其硬件是固定的,软件则是可编程的;外围电路则由FPGA的逻辑资源组成,大都以IP 的形式提供,例如存储器接口、USB接口以及以太网MAC层接口等,用户根据自己需要在内核总线上添加,并能自己订制相应的接口IP 和外围设备。

     

     

     

     

     

    展开全文
  • 软件开发基本流程概述

    千次阅读 2019-05-13 10:12:40
    在很多人看来,计算机软件开发主要就是开发人员的工作,只要把想法告诉他们,他们就能把软件开发出来,这种情况是存在的...那到底开发一个计算机软件的基本流程是怎么样的?需要什么人员的参与呢?下面就由小编来给...

    在很多人看来,计算机软件开发主要就是开发人员的工作,只要把想法告诉他们,他们就能把软件开发出来,这种情况是存在的,要不这个软件非常简单,要不有这样能力的开发人员综合能力是非常强的,但这种认知也是片面的,开发一个计算机软件不单单只是开发人员的工作,有时候开发人员工作所占用的资源、时间甚至只是整个项目中非常小的一部分。那到底开发一个计算机软件的基本流程是怎么样的?需要什么人员的参与呢?下面就由小编来给大家介绍一下。

    在小编看来,计算机软件的开发流程按顺序可以划分为:可行性分析;需求分析;设计(概要、详细);开发阶段;测试阶段;运行维护。

    基本流程

    一、可行性分析

    1、公司要对项目确定项目经理,由公司和项目经理确定项目的主要组成人员,包括:产品经理、架构工程师、UI工程师、开发工程师、测试工程师等。

    2、项目经理组织业务人员、产品经理等对项目的场景、效益、技术、管理等各方面进行调研和可行性分析,并把存在的问题及时与客户进行交流,输出项目的调研报告、可行性分析报告等。

    3、若经过可行性分析,项目组能在规定的时间和资源范围内完成该项目,则出成本和资源使用计划书,并把相关资料提交给公司和客户,可以着手准备下一步的工作;若经过调研和分析,项目组无法在规定的时间和资源范围内完成该项目,则把相关依据提交给公司和客户,协调对资源进行调整,调整完成后进入下一步的工作。

    二、需求分析

    1、产品经理要进行需求采集、需求分析和需求确认这几方面的工作,然后输出需求分析文档和产品原型图,文档和产品原型图要及时与客户进行沟通,不符合客户要求的要及时修改,并做好修改记录。

    产品原型图

    2、确定原型图后,产品经理可输出业务流程图和页面跳转流程图,并与客户做开发前的需求确认工作。

    3、产品经理输出培训文档,对项目组的人员进行需求讲解。

    4、架构工程师根据需求对整个软件的体系架构和关键模块进行分析设计。

    5、架构工程师和开发工程师根据需求和架构设计,制定项目开发计划和模块分解表。

    6、UI工程师根据需求、原型图和开发计划,制定UI设计计划,以保证及时完成各页面UI设计工作。

    三、概要设计

    1、架构工程师根据需求和体系架构对软件运行环境、模块编码、流程控制、接口、运行控制和数据结构进行设计,并输出概要设计文档。

    2、开发工程师根据概要设计文档设计数据库结构,并输出数据库设计说明书。

    3、UI工程师根据需求分析、原型图和UI设计计划,制定UI设计规范,并输出文档。

    四、详细设计

    1、UI工程师根据产品原型图、UI设计规范,设计软件界面效果图。

    2、开发工程师确定每个模块的算法,写出每个模块详细的过程描述。

    3、开发工程师确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口,以及模块输入数据、输出数据及局部数据的全部细节,并形成详细设计文档。

    4、为每一个模块设计出一组测试用例,以便在开发阶段对模块代码进行预定的测试。

    5、开发工程师根据数据库设计说明书进行数据库物理设计,设计数据库表、字段、描述等,统一命名规则。

    数据库表

    五、开发阶段

    1、开发工程师根据产品原型图、UI效果图、详细设计文档,选择合适的开发环境、开发工具、开发语言等,统一每个模块、页面的命名规范。

    2、开发工程师搭建软件框架,进行模块编码。

    3、开发工程师对自己开发出来的模块要进行测试用例自测或是开发人员之间互相测试,排除出现的问题。

    4、开发工程师要养成良好的开发习惯,编写好开发说明文档,做好代码功能注释、使代码的可读性更强。

    开发软件

    六、测试阶段

    1、测试工程师根据开发阶段形成的说明文档和程序架构,设计测试用例,测试用例不仅要考虑合理的输入数据,也要考虑不合理的输入数据。

    2、测试工程师对程序进行单元测试、集成测试、系统测试,检查是否正确完成规定的功能,把出现的编码错误、算法错误整理成文档,并提交给开发工程师。

    3、开发工程师根据测试工程师提交的测试文档,对出现的错误进行修改,再交由测试工程师测试,通过后完成。

    4、产品经理、测试工程师安排软件测试版给普通用户试用,并收集用户使用意见和问题,把软件出现的错误交由开发工程师进行修改,这时候软件的错误数量已经很少,对软件的改动不大。

    5、产品经理、测试工程师完成软件各端口的操作手册、软件使用手册等。

    七、运行维护

    1、项目经理组织客户、业务人员、产品经理、开发工程师进行软件验收、上线运行工作。

    2、产品经理对软件使用人员进行培训。

    3、开发工程师定时对软件进行各项维护,对使用过程中出现的问题要及时进行修改。

    从以上基本流程可以看出,软件开发不单单只是开发人员的工作,要开发出一款符合需求、运行稳定的软件,项目组人员需要完成大量开发前期和后期的相关工作。

     

    感谢原作者分享!

    原地址:https://baijiahao.baidu.com/s?id=1619241521525428398&wfr=spider&for=pc

    展开全文
  • 网站开发基本流程-解析

    千次阅读 2019-11-20 15:02:42
    一、最基本的网站建设流程网站开发基本流程1、需求分析:目标定位 用户分析 市场前景2、平台规划:内容策划 界面策划 网站功能3、项目开发:界面设计程序设计 系统整合4、测试验收:项目人员测试 非项目人员测试 、...
  • erlang游戏开发基本流程

    万次阅读 2019-01-23 14:59:26
    erlang游戏开发基本流程 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的...
  • 基于UNI-APP开发微信小程序基本流程 1/申请微信小程序账号 申请微信小程序的两种途径: 通过公司微信服务号进行申请(推荐)。 通过公司微信服务号申请微信小程序可免认证,节省费用300元,同时审核周期更短。 ...
  • 内容 :FPGA开发基本流程及注意事项 来自 :时间的诗 原文来自:http://www.eepw.com.cn/article/221688.htm 本文是根据FPGA技术牛人历年来的经验所总结出来的关于FPGA开发基本流程及注意事项基本介绍,希望...
  • 软件开发基本流程

    千次阅读 2019-08-08 16:29:53
    1.相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时, 在这一步里面可以初步定义好少量的界面。 2.系统...
  • 软件项目开发基本流程详解

    万次阅读 2018-03-15 09:30:29
    软件项目开发流程图是用来详细描述了软件在开发过程中产品调研、设计、开发、...亿图软件项目开发流程图软件项目开发过程的几个基本流程介绍:1、可行性分析:从市场、政策、经济、技术、人员等各方面因素来分析这个...
  • 软件开发基本流程【一】

    万次阅读 多人点赞 2019-02-14 10:45:49
    它是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。本阶段的基本任务是和用户一起确定要解决的问题,建立软件的逻辑模型,编写...
  • 微信公众号平台开发流程是啥,需要用到什么技术?在线等,跪求答案,谢谢大家了。
  • 开发计算机软件的基本流程

    千次阅读 2019-05-09 17:12:52
    在很多人看来,计算机软件开发主要就是开发人员的工作,只要把想法告诉他们,他们就能把软件开发出来,这种情况是存在的...那到底开发一个计算机软件的基本流程是怎么样的?需要什么人员的参与呢?下面就来给大家介...
  • 网站开发基本流程

    千次阅读 2010-01-21 18:22:00
    最基本的网站建设流程网站开发基本流程1.需求分析:目标定位 用户分析 市场前景2.平台规划:内容策划 界面策划 网站功能3.项目开发:界面设计 程序设计 系统整合 4.测试验收:项目人员测试 非项目人员测试 ...
  • 企业级项目开发基本流程

    千次阅读 2019-03-28 14:32:37
    项目调研:了解行业相关信息,以业务为导向 参与人员可以是产品经理、非常熟悉业务人、项目经理 需求分析:做什么?做成什么样?不涉及具体技术 用户提出来的:显式... 参与人员:产品、项目经理,开发(架构师...
  • 这两个月里,公司的项目基本上都基于微信公众平台开发上。为了可以快速开发,我使用了 Ruby on Rails框架,而不是之前的 Python,这不是说 Python 不可以做到快速开发,其实我更多只是想试试新的东西。但效果不错...
  • 《HTML5游戏开发基本流程》 * 1. HTML5的简述 * 2. HTML5游戏开发所需的环境与工具 * 2.1. 开发环境 * 2.1.1. 浏览器 * 2.1.2. 开发语言 * 2.1.3. 开发平台 * 2.2. 开发工具 * 2.2.1. 代码编辑器 ...
  • FPGA开发基本流程

    千次阅读 2014-08-13 16:39:47
    典型FPGA开发流程与注意事项 FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。典型FPGA的开发流程一般如图4.1.1所示,包括功能定义/器件选型、设计输入、功能仿真、综合优化、综合后仿真、...
  • meego平台程序开发总结

    万次阅读 热门讨论 2010-12-31 18:36:00
    基于meego平台开发应用程序有一段时间了,尤其是最近一个多月,天天加班,赶进度。目前,这个阶段的代码终于冻结更新了,因此,也有时间静下心来总结一下。
  • 项目管理--项目开发基本流程

    千次阅读 2017-11-26 21:06:54
    项目开发流程(各公司各有不同)(需求工程师,产品经理)需求收集、需求文档编写、需求文档讨论及定稿; 原型图编写,原型图讨论及定稿; 数据库设计、架构设计、接口设计; 美工设计...
  • Android应用开发基本流程

    千次阅读 2017-07-02 22:32:45
    学习Android开发两个月了...开发APP需要一整套科学的开发流程和技巧。不能想到哪就写到哪,需要一个合理的计划。 记录一下开发经验:开发一款APP可以分为两大步:1、搭建UI 2、实现逻辑 1、搭建UI 1、把可能用到的A
  • 零基础入门微信小程序开发

    万次阅读 多人点赞 2018-07-03 02:45:07
    目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件、页面样式文件、JavaScript 的基本知识并以指南针为例对基本知识进行扩展,另外加上开发工具的安装、小程序发布等内容,...
  • Azure Kinect DK 基本开发流程

    千次阅读 2019-10-15 16:18:32
    Azure Kinect DK 基本开发流程简单介绍一下Azure Kinect DK传感器SDK的系统要求支持的操作系统主机电脑的最低硬件要求Azure Kinect DK的基本开发流程1.寻找相机设备2.打开设备3.配置设备的参数4.打开相机5.获取捕捉6...
  • windows基本程序开发

    千次阅读 2018-03-09 12:13:20
    //此文仅用于个人学习和复习,不用于其他用途在准备编写windows的程序时,首先要了解相关函数: WinMain() //程序入口函数 WinProc() //消息处理函数,用于接收消息 下面详细介绍这两个函数 int WINAPI WinMain...
  • 平台服务器程序的作用所谓跨平台,主要指Windows和Linux两个主要平台。如今绝大多数服务器后端程序运行在Linux平台,这是因为Linux...但是在开发过程中,大部分开发者更习惯使用Windows平台的Visual Studio(简称VS)
  • Java微信公众号开发之入门基本流程

    千次阅读 2018-05-30 15:00:06
    1、微信公众号开发 [01] 入门基本流程 https://www.cnblogs.com/deng-cc/p/6795425.html 2、微信Java开发工具包下载(weixin-java-tools),比较全 https://github.com/Wechat-Group/weixin-java-tools 分别有...
  • 目录 前言 介绍 ...这篇博文先总的说一下 Xilinx FPGA开发基本流程(不包括实例介绍),实例介绍在另有博文介绍。 Xilinx FPGA的开发在ISE(Integrated Software Environment)(集成软件环境...
  • 开发一个程序基本思路

    千次阅读 2016-11-26 14:17:47
    开发一个程序基本思路整体流程: 1、确定需求和构思整个网站系统(初步设想需要实现什么) 2、根据需求和需求文档制作UI图 3、根据UI图制作前端静态页面 4、根据前端静态页面(主要)和需求文档(次要)架构整个...
  • Android开发项目的基本流程

    千次阅读 2019-05-28 19:34:27
    之前在网上搜索关于项目开发流程的文章,然后搜到了一位大神的讲解,通俗易懂。 所以我就按照他的讲法总结了一个比较短的解释。 原博链接:https://blog.csdn.net/duantianya2012/article/details/78021701 项目...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,620,222
精华内容 648,088
关键字:

平台开发的基本流程