草庐IT

fusion app远程公告(微云)

bushrose 2023-03-28 原文

前言

在app中经常会有发送公告的需求,告知用户一些重大的事情。本文将使用FA重置版和qq收藏的笔记功能完成远程公告的功能。

远程公告的思路

  1. 在qq收藏新建笔记,设置好公告内容
  2. 分享笔记给好友,拿到外部链接地址
  3. FA发送http请求,解析出公告内容

在qq收藏新建笔记,设置好公告内容

  • 点击头像,在点击收藏

  • 点击右上角加号

  • 按照以下格式输入以下内容。
【公告标题】这是FA的公告标题【公告标题】
【公告内容】这是公告内容【公告内容】
【公告显示】开【公告显示】
【按钮标题】关闭【按钮标题】
【公告返回】关【公告返回】
【暗主题】关【暗主题】

每一块控制不同的显示效果

在笔记中录入:

分享笔记给好友,拿到外部链接地址

点击分享的链接,再点击右上角三个点,再点击复制链接。保存好这个链接,下一步需要用。

FA发送http请求,解析出公告内容

在FA新建工程,如何新建项目,不再赘述,可以前面的文章。把以下代码粘贴到程序启动事件中,将第一行的链接替换为上一步拿到的链接。


-- 代码来源于网络

url="https://sharechain.qq.com/c2282a70cb92e88f3ebae5c767543a4f"  -- 替换为自己的
local headers={["User-Agent"]="Mozilla/5.0 (Linux; Android 9; STF-AL00 Build/HUAWEISTF-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36"}
Http.get(url.."#t="..os.time(),nil,"UTF-8",headers,function(code,content,cookie,header)
  if(code==200 and content)then
    --这一堆是识别替换QQ远程的乱码
    local content=content:match('<div class="note%-content">(.-)</div>%s+</article>')
    local content=content:gsub("</p ><p>","") or content;
    local content=content:gsub("<%/?p>","") or content;
    local content=content:gsub("</div><div>","") or content;
    local content=content:gsub("<%/?div>","") or content;
    local content=content:gsub("<%/?span>","") or content;
    local content=content:gsub("<br%s+/>","\n") or content;
    local content=content:gsub("&nbsp;"," ") or content;
    local content=content:gsub("</div><div>","") or content;
    local content=content:gsub("!","\n") or content;
    --替换结束
    公告标题=content:match("【公告标题】(.-)【公告标题】")
    公告内容=content:match("【公告内容】(.-)【公告内容】")
    按钮标题=content:match("【按钮标题】(.-)【按钮标题】")
    公告显示=content:match("【公告显示】(.-)【公告显示】")
    公告返回=content:match("【公告返回】(.-)【公告返回】")
    暗主题=content:match("【暗主题】(.-)【暗主题】")
    --暗主图=="开"    --这里手动开暗主题调试
    if(暗主题=="开")then--判断远程明暗主题切换
      UIColor="#222222"
      btColor="#ffffff"
      nrColor="#dfffffff"
     else
      UIColor="#ffffff"
      btColor="#000000"
      nrColor="#98000000"
    end
    公告布局=
    {
      LinearLayout;
      orientation='vertical';
      layout_width='fill';
      layout_height='fill';

      {
        CardView;
        layout_gravity='center';
        layout_width='80%w';
        layout_height='36%h';
        cardBackgroundColor=UIColor;
        layout_margin='0dp';
        cardElevation='2dp';
        radius='15dp';
        {
          LinearLayout;
          orientation='vertical';
          layout_width='fill';
          layout_height='75dp';
          background=UIColor;
          {
            TextView;
            id='bt';
            layout_width='fill';
            layout_height='fill';
            text=公告标题;
            textSize='25sp';
            textColor=btColor;
            gravity='bottom|center';
          };
        };
        {
          LinearLayout;
          orientation='vertical';
          layout_width='fill';
          layout_height='145dp';
          layout_marginTop='75dp';
          background=UIColor;
          {
            TextView;
            id='nr';
            layout_width='fill';
            layout_height='fill';
            layout_margin='35dp';
            text=公告内容;
            textSize='15sp';
            textColor=nrColor;
            gravity='left';
          };
        };
        {
          CardView;
          layout_gravity='bottom|center';
          layout_width='75dp';
          layout_height='35dp';
          layout_marginBottom='15dp';
          cardBackgroundColor='#FF0055FF';
          layout_margin='0dp';
          cardElevation='3dp';
          alpha=0.85;
          radius='15dp';
          {
            TextView;
            id='nn1';
            layout_width='fill';
            layout_height='fill';
            text=按钮标题;
            textSize='16sp';
            textColor='#ffffff';
            gravity='center';
            onClick=function(v)
              tc.dismiss()
            end;
          };
        };
      };
    };
    tc=AlertDialog.Builder(this).show()

    if(公告返回=="开")then
      tc.setCancelable(true)
     else
      tc.setCancelable(false)
    end
    tc.getWindow().setContentView(loadlayout(公告布局));
    import"android.graphics.drawable.ColorDrawable"
    tc.getWindow().setBackgroundDrawable(ColorDrawable(0x00000000));
    tc.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    bt.getPaint().setFakeBoldText(true)
    nr.getPaint().setFakeBoldText(true)
    nn1.getPaint().setFakeBoldText(true)
    if(公告显示=="关")then
      tc.dismiss()
     else
      tc.show()
    end

   else
    print("获取公告失败 "..code)
  end
end)

最终效果

粘贴保存后运行,看到如下效果,就说明已经完成了。

总结

通过qq收藏和fa,完成了简单的公告功能。除此之外,还可以通过水仙app或蓝奏云等完成类似的功能,等待大家去探索。

本文由【产品经理不是经理】gzh同步发布,欢迎关注

有关fusion app远程公告(微云)的更多相关文章

  1. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  2. ruby - 带有 grep 远程日志文件的 tail - 2

    我有这段代码来跟踪远程日志文件:defdo_tail(session,file)session.open_channeldo|channel|channel.on_datado|ch,data|puts"[#{file}]->#{data}"endchannel.exec"tail-f#{file}"endNet::SSH.start("host","user",:password=>"passwd")do|session|do_tailsession,"/path_to_log/file.log"session.loop我只想在file.log中检索带有ERROR字符串的行,我正在尝

  3. ruby - 如何使用远程 API 将 Confluence "Space"导出为 PDF - 2

    如何将Confluence的“空间”导出为pdf文件?看起来Confluence5.0可能仍然支持使用XML-RPCAPI。不过,我找不到调用什么的示例。https://developer.atlassian.com/display/CONFDEV/Remote+API+Specification+for+PDF+Export#RemoteAPISpecificationforPDFExport-XML-RPCInformation该链接表示调用应以pdfexport为前缀,但没有列出任何调用或给出示例。 最佳答案 这可以使用Bob

  4. ruby - AWS 上远程机器上的进程计数 - 2

    我正在为在AmazonEC2实例上运行的应用程序设计一个AutoScaling系统。应用程序从SQS读取消息并对其进行处理。AutoScaling系统将监控两件事:SQS中的消息数量,所有EC2机器上运行的进程总数。例如,如果SQS中的消息数量超过3000,我希望系统自动缩放,创建一个新的EC2实例,在其上部署代码,当消息数量低于2000时,我希望系统终止EC2实例.我正在用Ruby和Capistrano做这件事。我的问题是:我无法找到一种方法来确定在所有EC2机器上运行的进程数并将该数字保存在变量中。你能帮帮我吗? 最佳答案 您可

  5. 如何使用手机远程访问自己的电脑? - 2

    手机访问电脑后AnyViewer可以做什么? 您成功将手机连接到Windows电脑后,然后您可以做任何您想做的事情,例如:查看文件和运行应用程序。电源管理:在远程会话中,点击电源管理,您可以看到三个项目:锁定、重启和关机,供您在不同情况下管理计算机。如果您需要暂时离开远程会话,可以锁定计算机。如果计算机死机,您可以重新启动它,然后再次连接。如果您已完成计算机上的所有工作,您可以使用手机远程关闭它。更改图像质量:当电脑和手机的网络都处于良好状态时,您可以选择高图像质量以获得更好的体验。当网络状况不佳时,您可以选择低图像质量以获得更流畅的操作。     显示桌面:我们无法在手机上按Windows+

  6. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误 - 2

    废话不多先看bug解决方案在下面!!!!启动服务查看服务是否开启首先我的电脑-右键-管理-服务和应用程序-服务-找到IPsecPolicyAgent-右键属性-启动方式改为自动,并重启服务,如下图打开设置-更改适配器选项如下图点击连接失败的连接-右键-属性-安全-允许使用这些协议编辑注册表按Ctrl+R打开命令行窗口输入regedit打开注册表输入下面命令进入以下页面HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters如下图在右侧编辑菜单上,鼠标右键新建,然后单击DWORD(32)位值。键入Prohibit

  7. ruby-on-rails - 在远程服务器上执行 rake 任务 - 2

    生产环境的物理架构包括多台机器执行不同的工作(rake任务),所有这些机器都在同一个数据库上。如果其他作业正在运行,其中一个作业会对表执行大型UPDATE,这通常会返回postgres死锁。我已经有一个rake任务来优雅地停止其他作业,但我只能从本地机器上执行它。我想实现的是:task:big_update=>:environmentdostop_tasks_on_another_servers#dotheSQLUPDATE...endstop_tasks_on_another_servers应该在其他服务器上执行rake任务。我最好的尝试是使用https://github.com/c

  8. ruby-on-rails - 没有命名路线的rails3中的远程form_tag - 2

    使这个实际异步发布的正确咒语是什么?form_tag:controller=>:magic,:action=>:search,:method=>post,:remote=>truedomethod=post和remote=true只是在url的末尾被压扁,而不是真正使它成为一个ajaxpost。 最佳答案 我发现唯一的方法是将url参数包装在url_for方法中。form_tagurl_for(:action=>:create,:id=>@artist.id),:remote=>truedo但是,如果您需要传递method参数,您可

  9. ruby-on-rails - 使用远程 Postgres 连接在本地使用 Rails 应用程序? - 2

    有没有办法配置database.yml文件来远程连接到Heroku的Postgres?我无法理解Heroku、Rails和PGgem如何协同工作。看起来在部署期间,Heroku重写了database.yml文件-是否可以看到这个更新后的.yml文件的内容并在本地使用它? 最佳答案 以下是从本地开发访问Heroku数据库的步骤:登录到您的heroku帐户。导航到此URLhttps://postgres.heroku.com/databases/或者您可以通过在终端中运行此命令来获取herokudburl:herokupg:creden

  10. ipv6外网能ping通,但无法访问服务(自建网站,远程桌面等) - 2

    1.当前环境及情况说明宽带:电信、光猫桥接、路由器拨号ipv6地址:在各大网站都能ping通这个ipv6地址,本机也能访问ipv6的网站问题:其它外网电脑除了能ping通这个ipv6地址之外什么都访问不了2.可能出现问题的原因本机防火墙拦截了(关闭防火墙也是一样的)×光猫防火墙拦截了(试了不行,貌似桥接后跟光猫就没关系了)×路由器防火墙拦截了(用的是小米AX6000,IPV6配置的地方有个防火墙没有关闭)√运营商拦截了(根据最终效果测试,80端口、443端口被拦截无法使用,尽量用些不常用的端口)×3.路由器设置(关闭IPV6防火墙) 不同路由器可能设置不同,根据情况处理,我这里做为一个参考关闭

随机推荐