API调用

361一键新机 除了简洁人性化的UI体验之外,也提供脚本调用的使用方式。开发者可以使用Lua语言,在触动精灵的平台上,通过http方式调用本设备上的361一键新机的核心功能。本文列出了基本的调用接口和示例。

  我们推荐使用Lua语言的方式来调用。但我们同时也支持OpenUrl的调用方式,使用非常简单,将以下指令中的"http://127.0.0.1:361/"替换成"361://"即可。同时,其返回值将会自动写入到/var/mobile/cmdResultOpenUrl.plist文件。

启动 361一键新机:

runApp("cn.tinyapps.RST");
mSleep(5*1000); //等待5秒钟再进行后续调用

1、一键新机

  • 指令:http://127.0.0.1:361/cmd?fun=newDevice&bid=com.xxx.a,cn.yyy.b
  • 参数:
    1. fun=newDevice表示一键新机
    2. bid表示目标App,如果是多个的话,用逗号分隔
  • 返回值:status=-1表示无权限;status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)
  • 请注意:该接口是异步操作,调用该接口后得到返回值只说明接口调用是否成功,不意味着对应操作已执行结束。要判断是否真正执行结束,可以检测该文件 /var/mobile/script_status 是否存在:不存在说明执行尚未结束,存在说明执行结束。存在的话可以通过判断文件中的值来确定是否执行成功,如果文件中的值是1,则代表执行成功,为0代表执行失败。

2、生成备份记录

  • 指令:http://127.0.0.1:361/cmd?fun=newBackup&bid=com.xxx.a
  • 参数:
    1. fun=newBackup表示生成备份记录
    2. bid表示目标App,如果是多个的话,用逗号分隔
  • 返回值:status=-1表示无权限;status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)
  • 请注意:该接口是异步操作,调用该接口后得到返回值只说明接口调用是否成功,不意味着对应操作已执行结束。要判断是否真正执行结束,可以检测该文件 /var/mobile/script_status 是否存在:不存在说明执行尚未结束,存在说明执行结束。存在的话可以通过判断文件中的值来确定是否执行成功,如果文件中的值是1,则代表执行成功,为0代表执行失败。

3、获取备份记录

  • 指令:http://127.0.0.1:361/cmd?fun=getBackups&bid=com.xxx.a
  • 参数:
    1. fun=getBackups表示获取备份记录
    2. bid表示目标App,如果是多个的话,用逗号分隔
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)
    1. 如果status为1,则可以通过backups获取到其备份记录信息,通过currentBackupId获取到与当前的目标app相关联的备份记录在backups中的序列号
    2. backups是一个数组,其中每一个元素是个dictionary,其中有3个key,name表示备份的名字,time表示备份的时间
  • 返回值示例:
    1. {status:1, backups:{[ {name:'backup0001', time:1463637809}, {name:'backup0002', time:1463647909}]}, currentBackupId:0}

4、重命名备份记录

  • 指令A:http://127.0.0.1:361/cmd? fun=renameBackup &bid=PumpkinCat.WordBlades &index=3&name=goodname
  • 指令B:http://127.0.0.1:361/cmd? fun=renameBackup &bid=PumpkinCat.WordBlades &indexup=1&name=goodname
  • 指令C:http://127.0.0.1:361/cmd? fun=renameBackup &bid=PumpkinCat.WordBlades &backname=老名字&name=goodname
  • 指令D:http://127.0.0.1:361/cmd? fun=renameBackup &bid=PumpkinCat.WordBlades
  • 参数:
    1. fun=renameBackup表示重命名单条备份记录
    2. bid表示目标App,如果是多个的话,用逗号分隔
    3. index表示备份记录的序列号,序列号即备份记录从上到下排序的序号,与361一键新机界面上一致,从上到下依次为0, 1, 2, 3, 4, 5, ....,也可以认为备份条目的行号
    4. indexup取0或者1,以与目标app相关联的备份的index为基准,对其上一条或下一条备份记录改名,为1表示上一条,为0表示下一条。
    5. backname表示要操作的目标备份记录的名字(index、indexup、backname三项只需其中一项;三者优先顺序 index>indexup>backname:提供了index的话,则自动忽略indexup和backname的值;只提供indexup和backname的值的话,则忽略backname的值)
    6. 如果不提供index、indexup、backname参数,则默认为对当前的备份条目操作(即指令D)
    7. name表示备份记录的新名字
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)

5、删除指定备份记录

  • 指令A:http://127.0.0.1:361/cmd? fun=deleteBackup &bid=PumpkinCat.WordBlades &index=3
  • 指令B:http://127.0.0.1:361/cmd? fun=deleteBackup &bid=PumpkinCat.WordBlades &indexup=0
  • 指令C:http://127.0.0.1:361/cmd? fun=deleteBackup &bid=PumpkinCat.WordBlades &backname=老名字
  • 指令D:http://127.0.0.1:361/cmd? fun=deleteBackup &bid=PumpkinCat.WordBlades
  • 参数:
    1. fun=deleteBackup表示删除指定的备份记录
    2. bid表示目标App,如果是多个的话,用逗号分隔
    3. index表示备份记录的序列号,序列号即备份记录从上到下排序的序号,与361一键新机界面上一致,从上到下依次为0, 1, 2, 3, 4, 5, ....,也即备份条目的行号。为-1则表示删除对应app的所有记录
    4. indexup取0或者1,以与目标app相关联的备份的index为基准,删除其上一条或下一条备份记录,为1表示上一条,为0表示下一条。
    5. backname表示要操作的目标备份记录的名字(index、indexup、backname三项只需其中一项;三者优先顺序 index>indexup>backname:提供了index的话,则自动忽略indexup和backname的值;只提供indexup和backname的值的话,则忽略backname的值)
    6. 如果不提供index、indexup、backname参数,则默认为删除当前的备份条目(即指令D)
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)

6、还原备份记录

  • 指令A:http://127.0.0.1:361/cmd? fun=restoreBackup &bid=PumpkinCat.WordBlades &index=3
  • 指令B:http://127.0.0.1:361/cmd? fun=restoreBackup &bid=PumpkinCat.WordBlades &indexup=1
  • 指令C:http://127.0.0.1:361/cmd? fun=restoreBackup &bid=PumpkinCat.WordBlades &backname=老名字
  • 参数:
    1. fun=restoreBackup表示还原备份记录
    2. bid表示目标App,如果是多个的话,用逗号分隔
    3. index表示备份记录的序列号,序列号即备份记录从上到下排序的序号,与361一键新机界面上一致,从上到下依次为0, 1, 2, 3, 4, 5, ....,也即备份条目的行号。
    4. indexup取0或者1,以与目标app相关联的备份的index为基准,恢复到其上一条或下一条备份记录,为1表示上一条,为0表示下一条。
    5. backname表示要操作的目标备份记录的名字(index、indexup、backname三项只需其中一项;三者优先顺序 index>indexup>backname:提供了index的话,则自动忽略indexup和backname的值;只提供indexup和backname的值的话,则忽略backname的值)
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)
  • 请注意:该接口是异步操作,调用该接口后得到返回值只说明接口调用是否成功,不意味着对应操作已执行结束。要判断是否真正执行结束,可以检测该文件 /var/mobile/script_status 是否存在:不存在说明执行尚未结束,存在说明执行结束。存在的话可以通过判断文件中的值来确定是否执行成功,如果文件中的值是1,则代表执行成功,为0代表执行失败。

7、获取虚拟设备信息

  • 指令:http://127.0.0.1:361/cmd? fun=getCurrentVDInfo &bid=PumpkinCat.WordBlades
  • 参数:
    1. fun=getCurrentVDInfo表示获取虚拟设备信息
    2. bid表示某个目标App,或同一组里的多个目标app,用逗号分隔
  • 返回值:status=1 运行成功,返回idfa、idfv、ios版本,ssid、imie、udid等其他虚拟设备信息; status=0运行失败(可以通过errMsg获取错误信息)
  • 返回值示例:
    1. {status:1, info:[{idfa:'89B0A172-57C2-46E6-BB1D-0D250C270EB2'}, {ios:'12.1.1'}] }

8、设置虚拟设备信息IDFA

  • 指令:http://127.0.0.1:361/cmd? fun=setCurrentVDInfo &bid=PumpkinCat.WordBlades &idfa=89B0A172-57C2-46E6-BB1D-0D250C270EB2
  • 参数:
    1. fun=setCurrentVDInfo表示获取虚拟设备信息,对应的目标app必须已经具有虚拟设备信息才行,如果app对应的环境是真实机器,则执行此指令无效
    2. bid表示某个目标App,或同一组里的多个目标app,用逗号分隔
    3. idfa表示新设置的idfa
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)

9、获取机器码权限信息

  • 指令:http://127.0.0.1:361/cmd?fun=license
  • 参数:fun=license表示获取权限
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息) 如果status=1,则可以通过deviceId获取到机器码,endDate获取到有效截止时间

10、开关自动备份/App自动启动/自动更换IP

  • 指令:http://127.0.0.1:361/cmd?fun=autoBackup&open=1
  • 参数:
    1. fun=autoBackup表示开关自动备份指令;fun=autoAppLaunch表示App自动启动;fun=autoIP表示自动更换IP
    2. open=1表示开启,为0表示关闭
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)

11、卸载指定App

  • 指令:http://127.0.0.1:361/cmd? fun=uninstallApp &bid=PumpkinCat.WordBlades
  • 参数:
    1. fun=uninstallApp表示卸载app
    2. bid表示目标App,如果是多个的话,用逗号分隔
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)

12、跳转到指定App

  • 指令:http://127.0.0.1:361/cmd? fun=goToApp &bid=PumpkinCat.WordBlades
  • 参数:
    1. fun=goToApp表示卸载app
    2. bid表示目标App,只能是一个
  • 返回值:status=1 运行成功; status=0运行失败(可以通过errMsg获取错误信息)

13、示例

function getLicenseInfo()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=license");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
local deviceId = resJson.deviceId;
local endDateTimestamp = resJson.endDate;
local endDate = os.date("%Y:%m:%d %H:%M",endDateTimestamp)
dialog("deviceId: ".. deviceId .." endDate " .. endDate, 2);
end;
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end

function enableAutoBackup()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=autoBackup&open=1");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
dialog("成功开启自动备份", 2);
end;
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end

function newDevice()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=newDevice&bid=PumpkinCat.WordBladesf");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
dialog("一键新机成功!", 2);
end;
if status == -1 then
local errMsg = resJson.errMsg;
dialog("error: ", 2);
end
if status == 0 then
local errMsg = resJson.errMsg;
dialog("err:"..errMsg, 2);
end

end
end

function getBackups()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=getBackups&bid=PumpkinCat.WordBlades");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
local backups = resJson.backups;
local backupNames="";
for i=1, #(backups) do
local name = backups[i].name;
backupNames = backupNames..name..", ";
end
dialog("backups: " .. backupNames, 2);
end;
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end

function renameBackup()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=renameBackup&bid=PumpkinCat.WordBlades&index=43&name=godname");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
dialog("重命名成功! ", 2);
end;
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end

function deleteBackup()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=deleteBackup&bid=PumpkinCat.WordBlades&index=2");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
dialog("删除备份成功! ", 2);
end;
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end

function restoreBackup()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=restoreBackup&bid=PumpkinCat.WordBlades&index=2");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
dialog("还原成功! ", 2);
end;
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end

function getVDInfo()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=getCurrentVDInfo&bid=com.tencent.mqq");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
dialog("成功! "..resJson.VDInfo, 8);
end
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end

function setVDInfo()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=setCurrentVDInfo&bid=com.tencent.mqq&idfa=89B0A172-57C2-46E6-BB1D-0D250C270EB2");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
dialog("IDFA设置成功! ", 8);
end;
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end

function uninstallApp()
local sz = require("sz");
local http = require("szocket.http");
local res, code = http.request("http://127.0.0.1:361/cmd?fun=uninstallApp&bid=PumpkinCat.WordBlades");
if code == 200 then
local resJson = sz.json.decode(res);
local status = resJson.status;
if status == 1 then
dialog("删除App成功! ", 2);
end;
if status == 0 then
local errMsg = resJson.errMsg;
dialog("error: ".. errMsg, 2);
end
end
end


r = runApp("cn.tinyapps.RST");
mSleep(5*1000);
if r == 0 then
closeApp("com.apple.weather"); --退出天气应用,使用此函数后在后台仍可看到应用程序图标属正常现象,实际进程已不在后台
else
dialog("启动失败"..r, 3);
end

newDevice();

© 2024 361MultiAccount Master. 版权所有