【IPFS应用开发】基于ipfs的安卓节点

本系列文章是针对 https://blog.csdn.net/weixin_43668031/article/details/83962959 内容的实现所编写的。开发经历包括思考过程、重构和推翻重来。

前言

这些天一直在纠结关于应用的节点问题,采用以PC节点作为主力节点的方案效率较低,随着移动互联网的发展,移动的ipfs节点将成为主力,这里选用移动Android作为主力传输节点,服务节点仍然是以pc,x86的服务器作为主力。Ipfs跑在Android上,我选用的是go-ipfs作为代码核心,因为go语言的编译支持编译出x86平台,arm平台,arm64平台,并且arm的编译版本已经在Android平台调试过了,已经验证过了这个想法可行。

我的ipfs移动应用构想:这个应用app,是一个平台,是一个载体,是ipfs网络的落地应用平台,这样设计有很多好处,可以提供基础的高级接口给应用的开发者。这类似ipfs提供的接口或者说类似js-ipfs客户端,提供了与ipfs网络的交互接口,但是还是太底层,在sdk和应用之间还可以做一层高级接口的封装,这样一来让应用开发效率更高。

这里阐述的高级接口将是我应用的主要组成部分,这些接口分为2类,BASE_API安卓应用平台的基础接口,将提供给业务应用使用,在多个业务应用之间共享,多个业务应用可以调用这些平台基础接口。APP1_API我的第一个业务应用独享的应用接口,这个接口不包含我业务的具体实现过程,仅仅包含简单的实现过程,这样子抽离应用的功能模块能让业务应用开发更加高效简洁。

【BASE_API】 1. Ipfs gateway选优

这是一个获取内容的函数,主要是在节点不够多的情况下使用,以及在应用初期使用。需要达成一些效果:
①在编译时更新本地gw列表;
②应用启动时更新列表;
③可用列表合并;
④选出列表里返回最快的那一项。

【BASE_API】 2. Ipfs name cache

做这个函数的原因之前写过了https://blog.csdn.net/weixin_43668031/article/details/100174147,但是在安卓平台上将更加细化,需要达成一些效果:
①除了本地解析外可用使用ipfs gateway去捕获header信息来解析,这是多并发的任务,只要其中一个返回就可以结束其他的请求,在应用推广初期这及其适用、实用;
②函数可用传入是否使用cache,cache的持久时间是多少;
③函数要支持异步调用,传入回调函数可用完成异步处理结果的目的;
在这里插入图片描述

【BASE_API】 3. 监控

这里需要实时去轮询ipfs的几个接口,可以每秒触发,目前我关心几个参数:
①实时数据当前一秒内流出多少流量,当前一秒内流入多少流量,当前连接的对等节点有多少个;希望可以通过悬浮窗、状态栏、应用内的悬浮窗来显示这几个实时数据;
②本地ipfs缓存有多少,启动后运行了多久,启动后一共流入多少,启动后一共流出多少。

【BASE_API】 4. Ipfs参数设置

目前想到几个参数是要放给用户去设置的:
①ipfs缓存目录变量IPFS_PATH,也叫ipfs repository,要支持移动,Android应用启动时默认使用外储存的.ipfs 目录作为数据储存目录,允许用户移动这个这个数据目录;
②本地ipfs缓存限制,这个限制不是硬限制,ipfs允许pin超过这个限制的内容,但不pin的可以gc回收,默认值10G。

【BASE_API】 5. APK更新机制

Ipfs应用就要靠ipfs网络来更新,APK更新由一个ipfs的key来管理和控制,更新机制,数据的组织方式参考传统应用http应用的关系方式,但是这个数据是ipfs网络上的数据。在ipfskey绑定的目录中需要有一个version.json的文件,里面定义了last res的apk版本号和对应的更新信息。

{
	"last":"v0.0.2",
	"version_list":{
		"v0.0.2":{
			"title":"VS2",
			"changelog":"1.fix aaa. 2.fix bbb",
			"arch":{
				"arm64":"apk/io.ipfs.vs-v0.0.2.apk",
				"x86":"apk/io.ipfs.vs-x86-v0.0.2.apk",
			}
		},
		"v0.0.1":{
			"title":"VS1",
			"changelog":"1.fix aa. 2.fix bb",
			"arch":{
				"arm64":"/ipfs/QmdJaMWDAdu7LkUPCRqb4NepUBXgmBdfegT6zjUyjVFUTb/io.ipfs.vs-v0.0.1.apk",
				"x86":"apk/io.ipfs.vs-x86-v0.0.1.apk",
			}
		},
	}
}

【BASE_API】 6. 下载应用

区别于传统的apk有集中的应用商店下载,ipfs的下载就更加随意一些,主要包含:
①运行的人下载后通过第三方传输工具传给需要安装的人,
②通过gw生成下载引导界面展示二维码让需要安装的人扫描下载;
③通过gw生成apk直接的下载路径展示二维码让需要安装的人扫描下载;

【BASE_API】 7. 应用pin信息

应用会不时的检测本地是否pin了一些资源,主要包括:
①应用本身的apk和应用相关的资源,方便分享与下载;
②通过ipfs key控制一些热门资源缓存在用户移动节点上,但是需要注意的是在流量不收费的wifi和移动网络下进行,不然肯定会得到用户的反感。

【BASE_API】 8. 任意内容输入接口、扫描二维码接口

需要能扫描二维码,解析字符串后需要进行ipfs内容过滤,支持识别以下内容:
①识别内容类型(hash内容已经压缩),hash需要支持V0版本和V1版本:
V0:QmWGqmbfgP2TJRXkyNsmU8qqDKCVoNc7C9fx8NeVsUdm2C
V1:bafkreid4dzwiglj7goy22jmqumhnf2mmaole2trr6sfhtdulxt6un4mwza

直接Hash式 子文件夹式 子文件式
ipfs协议开头 ipfs://Qm…Tb ipfs://Qm…Tb/files/ ipfs://Qm…Tb/files.json
dweb协议开头 dweb:/ipfs/Qm…Tb dweb:/ipfs/Qm…Tb/files/ dweb:/ipfs/Qm…Tb/files.json
ipns协议开头 ipns://Qm…Mm ipns://Qm…Mm/files/ ipns://Qm…Mm/files.json
ipfs网关开头 https://ipfs.io/ipfs/Qm…Tb https://ipfs.io/ipfs/Qm…Tb/files/ https://ipfs.io/ipfs/Qm…Tb/files.json
ipns网关开头 https://ipfs.io/ipns/Qm…Mm https://ipfs.io/ipns/Qm…Mm/files/ https://ipfs.io/ipns/Qm…Mm/files.json
ipfs网关前缀 https://Qm…Tb.ipfs.cf-ipfs.com https://Qm…Tb.ipfs.cf-ipfs.com/files/ https://Qm…Tb.ipfs.cf-ipfs.com/files.json
ipfs路径 /ipfs/Qm…Tb /ipfs/Qm…Tb/files/ /ipfs/Qm…Tb/files.json
ipns路径 /ipns/Qm…Mm /ipns/Qm…Mm/files/ /ipns/Qm…Mm/files.json

②识别是否为本平台的应用,将会匹配本平台的应用特征,如果是将跳转到本平台应用上
③识别是否不是本平台的,但是是ipfs的资源,一般还是以网页web形式展现(目录里判断是否存在index.html),提供gw选优服务,跳转到外部浏览器打开,如果目录里不包含index.html 提供目录浏览界面,文件夹里的内容匹配后缀名可以在其他应用里打开,如果为文件显示文件信息(大小,块大小)
④如果没有匹配到ipfs应用,判断是否是传统web应用,是的话用外部浏览器打开,
在这里插入图片描述
这个接口主要为信息跨设备连接提供,特别是安卓移动设备。

原创文章 29 获赞 21 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43668031/article/details/104062175