发布了自己的第一个 App -- 网络剪切板 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ety001
V2EX    分享创造

发布了自己的第一个 App -- 网络剪切板

  •  
  •   ety001
    ety001 2019-11-04 12:14:05 +08:00 6617 次点击
    这是一个创建于 2180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    花了两周时间简单学习了下 Flutter,然后把之前我的网页版网络剪切板做成了 App。

    项目下载地址

    这里是原来的网页版(手机浏览器可以自适应):https://oc.to0l.cn

    这里是 Android App 下载地址:https://fir.im/yhu7

    这里是 iOS App 下载地址:https://apps.apple.com/us/app/%E7%BD%91%E7%BB%9C%E5%89%AA%E5%88%87%E6%9D%BF/id1485974770

    这里是网页版的源码:https://github.com/ety001/online-clipboard

    这里是 App 源码:https://github.com/ety001/oc_flutter

    项目说明

    网络剪切板的网页版已经运行了四年多了,最初是为了解决在某些情况下 PC 端不方便安装 IM 的时候,可以快速从其他 PC 端传入待执行的 CLI 命令。

    最近正好有一些时间,所以就学了下 Flutter 做了个 App。 目前对于 Flutter 代码的一些结构还不是很好的理解,所以代码里有些东西自我感觉写的不是很好。 不过对于初学者来说也能作为一个可以参考的例子吧。

    PS:iOS 版安装后,应用名是 oc_flutter 是因为我忘记修改了,新版本已经提交审核了。这一点我很想吐槽 Flutter 的 CLI 工具居然不能自己去生成对应的配置,这很烦啊。像 cordova 会根据 config.xml 去自动生成 Android 和 iOS 的配置文件,开发者在 config.xml 里配置好,就不用操心别的了。

    第 1 条附言    2019-11-07 00:49:29 +08:00
    增加了 cli 接口,看下示例就懂怎么用了。

    ```
    # 发送
    curl https://oc-server.to0l.cn/public/public -d "cOntent=$(cat /etc/v2ray/config.json)"

    # 接收(只能接收最后一条)
    curl https://oc-server.to0l.cn/public/public > /etc/v2ray/config.json
    ```
    第 2 条附言    2020-03-07 16:02:14 +08:00

    由于 fir.im 域名的问题,安卓下载地址更新为:https://betaqr.com/yhu7

    第 3 条附言    2020-05-12 20:31:36 +08:00
    fir.im 可以绑定自己的域名了,安卓下载地址更新为: http://fir.akawa.ink/onlinecb
    27 条回复    2019-11-26 15:41:25 +08:00
    luogege
        1
    luogege  
       2019-11-04 12:25:18 +08:00
    能选择删除一些就好了
    ety001
        2
    ety001  
    OP
       2019-11-04 12:27:13 +08:00
    @luogege 不要在意这些,50 条后就覆盖了。
    luogege
        3
    luogege  
       2019-11-04 12:32:19 +08:00
    @ety001 主要是,如果我是很长或者很多的文章要审阅复制粘贴修改,就会显得很长很很乱。也就说明你这个还不如用记事本方便
    ety001
        4
    ety001  
    OP
       2019-11-04 12:45:52 +08:00
    @luogege 额。。。我这个不是记事本。。。
    nicoljiang
        5
    nicoljiang  
    PRO
       2019-11-04 12:51:00 +08:00
    Mac 和 iPhone 不是都原生支持了嘛?
    文本、图片、视频、大文件,都很好。
    ety001
        6
    ety001  
    OP
       2019-11-04 12:59:33 +08:00
    @nicoljiang 如果你有拿着 MacBook Air 去维护一个不允许装 IM 的 Linux 设备的场景的时候,可能就会用到类似我这样的工具了。
    leaves7i
        7
    leaves7i  
       2019-11-04 17:07:36 +08:00
    提个建议,如果能快速选择并复制到剪贴板,对我就够用了
    ety001
        8
    ety001  
    OP
       2019-11-04 17:08:58 +08:00
    @leaves7i 你是指的在网页版,实现点击即复制吗?
    zhigang1992
        9
    zhigang1992  
       2019-11-05 11:43:29 +08:00
    要是能有一个 cli 就好了
    ety001
        10
    ety001  
    OP
       2019-11-05 12:30:54 +08:00
    @zhigang1992 cli 一直想弄,但是没有想好怎么弄比较好。预留一个可以 curl 的接口?
    UserNameisNull
        11
    UserNameisNull  
       2019-11-05 14:53:10 +08:00
    哈哈,巧了,我这有个 CURL 的接口
    t/614994
    Mtianmin
        13
    Mtianmin  
       2019-11-06 13:43:38 +08:00
    想要那个网络 U 盘的...
    ety001
        14
    ety001  
    OP
       2019-11-06 15:28:38 +08:00
    Mtianmin
        15
    Mtianmin  
       2019-11-06 21:26:17 +08:00
    @ety001 好的谢谢,php 版本是否需要支持什么扩展,或者特定的环境设置
    ety001
        16
    ety001  
    OP
       2019-11-06 23:40:32 +08:00
    @Mtianmin 没有什么特别的要求,能跑 laravel 就可以了。就是一个非常简单的上传功能。
    cytong1994
        17
    cytong1994  
       2019-11-24 10:08:31 +08:00 via Android
    老哥,自己部署的服务端咋用不了,打开显示的是空白页,服务器后台显示“PHP Notice: Undefined offset: 2 in /source/server.php on line 121”
    ety001
        18
    ety001  
    OP
       2019-11-24 23:42:44 +08:00
    @cytong1994

    使用的 docker 部署的吗?

    如果是按照我库里的 README 操作的话,那么 8000 端口开的是 websocket 服务,不是直接用浏览器访问的。

    静态页面在 fe 分支下,切换到那个分支,npm install,然后修改里面的服务器地址为你自己搭建的 websocket 服务地址,再 npm build 编译即可。

    如果找省劲,可以直接用 gh-pages 分支,修改 app.17dd6270.js 里面的 wss://oc-server.to0l.cn 为你自己的 websocket 地址。
    cytong1994
        19
    cytong1994  
       2019-11-25 19:56:25 +08:00
    @ety001 是用 docker 部署的, 按库里的 README 的话 websocket 服务开的不是 8080 端口吗?还有请问服务端和静态页面在同一台机器上,应该把 app.17dd6270.js 里面的 wss://oc-server.to0l.cn 修改成啥?小白不太懂。。。
    ety001
        20
    ety001  
    OP
       2019-11-25 20:26:03 +08:00
    @cytong1994
    口误口误,默认是 8080,我打错了。

    按照 README 操作的话,操作完,应该会有两个容器在运行,一个是 redis,一个是 php 写的 websocket 服务(开了 8080 端口)。

    然后用户最终访问的其实是 gh-pages 分支下的纯静态页面,在静态页面的 js 里设置你的 websocket 地址。现在代码里默认是 `wss://oc-server.to0l.cn`,你用 `ws://你的服务器 IP:8080` 替换掉 `wss://oc-server.to0l.cn`。
    cytong1994
        21
    cytong1994  
       2019-11-25 20:30:51 +08:00
    @ety001 搞好了,之前用了“ws://服务器 IP:8080”也不行,刚才看了下忘记了浏览器缓存。。。
    cytong1994
        22
    cytong1994  
       2019-11-25 20:33:50 +08:00
    @ety001 为啥用 localhost,127.0.0.1 之类的本地回环打不开啊?
    ety001
        23
    ety001  
    OP
       2019-11-25 21:24:23 +08:00
    @cytong1994 你要是搭建在你自己的电脑上,那用 localhost。你要是搭建在远程服务器,你觉得用 localhost 能访问?
    cytong1994
        24
    cytong1994  
       2019-11-25 22:54:50 +08:00
    @ety001 额,表达有误,我是说静态页面里 js 里设置的“ws://服务器 IP:8080",服务器 ip 换成 localhost。
    ety001
        25
    ety001  
    OP
       2019-11-26 00:56:25 +08:00
    @cytong1994 我说的就是 app.js 里的啊。你的 websocket 服务部署在哪里?你的本地吗? localhost 和 127.0.0.1 是指的你的本地啊。你要是把服务部署在远端,你怎么可能能用 localhost 访问到远端的服务?
    ety001
        26
    ety001  
    OP
       2019-11-26 00:56:48 +08:00
    @cytong1994 请再多学习些网络知识。
    cytong1994
        27
    cytong1994  
       2019-11-26 15:41:25 +08:00
    @ety001 懂了懂了,非常感谢!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5202 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 07:31 PVG 15:31 LAX 00:31 JFK 03:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86