正式许可

正式许可服务行业用户、测绘用户、大众用户,使用前,请先购买SuperMap GIS 产品许可,购买方式如下:

(1). 联系超图软件销售人员或致电超图公司,电话:+86-10-59896655。

(2). 超图官网购买在线许可时长,购买地址:https://www.supermapol.com/subscription/time-license/mobile。

公有云许可

公有云许可使用SuperMap Online账号,无需在本地部署相关许可服务。使用SuperMap iMobile公有云许可,需要满足以下几点需求:

(1). 移动设备能连接网络,且网络稳定;

(2). 拥有SuperMap Online账号。前往超图官网注册SuperMap Online账号,已有账号可跳过此步;

(3). SuperMap Online账号下有能使用的SuperMap iMobile许可。

公有云许可代码步骤如下:

第一步:设置许可路径(可选)

若设备本地默认许可路径下有离线许可,需设置许可路径,否则默认使用本地离线许可,不使用公有云许可。

Environment.setLicensePath(RoothPath + "/SuperMap/License1/");//

第二步:初始化,获取对象

CloudLicenseManager manager = CloudLicenseManager.getInstance(this);

第三步:设置公有云回调

manager.setLoginCallback(new CloudLicenseManager.LicenseLoginCallback() {
    @Override
    public void loginAccount(boolean issuccess) {//登录回调,true为登录成功
        if (issuccess) {
            Log.i(TAG, "loginAccount: 登录成功");
            showMsg("登录成功");
        }
    }
    @Override
    public void logoutAccount(boolean logout) {//退出登录回调,true为退出成功
        if (logout) {
            Log.i(TAG, "退出成功");
            showMsg("退出成功");
        }
    }
    @Override
    public void queryLicense(CloudLicenses licenses) {//查询许可回调
        cloudLicenses = licenses;
        if (licenses != null) {
            Log.i(TAG, "查询成功");
            showMsg("查询成功");
        } else {
            showMsg("许可为空");
        }
    }
    @Override
    public void activeLicense(boolean activeSuccess) {//激活许可回调
        if (activeSuccess) {
            Log.i(TAG, "激活成功");
            showMsg("激活成功");
        } else {
            showMsg("激活失败");
        }
    }
    @Override
    public void recycleLicense(boolean days) {//归还许可回调,归还失败返回-1
        recycle = days;
    }
    @Override
    public void otherError(String error) {//错误信息回调
        Log.e(TAG, error);
    }
});

第四步:登录SuperMap Online账号

manager.login("username","password");

第五步:查询许可

查询许可为激活许可做准备,这一步不能过滤掉。

manager.queryLicense();

(1). 一个账号下,如有多个许可,这里会将每一个都查询出来;

(2). 区别是否已经激活过的许可,看LicenseInfo.lockMacAddr是否为空,如果激活,这里就是绑定的mac地址。

第六步:激活许可

manager.activateLicense(cloudLicenses.getLicenses().get(0));;

(1). 公有云许可时间粒度为1天,该许可当天内只要激活,便只会扣除一天时间,后面不管多少台设备使用,都不再扣除许可(前提是归还后,下一台设备才能使用);

(2). 一个账号下有多个许可,这些许可都是独立存在的单元,所以可以出现一个设备把所有许可都给激活掉;

(3). 由于云许可激活序列号是存在内存中,当应用退出后,需要重新登录、查询、激活;

(4). 另一个设备想要使用该序列号,只有将该许可归还后在使用;

(5). 每次重新登录激活都会产生一个新的returnID,请使用最新的ID进行后续操作。

第七步:归还云许可

manager.recycleLicense(cloudLicenses.getLicenses().get(0));

断网2小时或退出应用,许可也将被动回收。归还和回收后的许可允许再分配。

第八步:退出云许可

manager.logout();

公有云无账号归还许可

公有云无账号归还许可,是公有云许可的补充,适合无法保证网络稳定的应用场景。使用前,请确保已经购买许可并获得激活序列号。

配置公有云无账号归还许可的一般顺序为:

(1). 初始化许可管理器;

(2). 设置许可激活回调;

(3). 设置许可类型(注意:须先设置许可类型再初始化环境);

(4). 环境初始化;

(5). 传入用户序列号和需要申请许可的模块列表,在线激活设备;

(6). 设备激活成功后,重启程序。

通过查询传入功能模块的方式配置在线许可范例代码如下:

ArrayList<Module> modules = new ArrayList<Module>();
private void active() {
 //用户序列号
 String userSerialID = "用户序列号";
 RecycleLicenseManager manager = RecycleLicenseManager.getInstance(getApplicationContext());
 //设置许可激活回调
 manager.setActivateCallback(new RecycleLicenseCallback() {
    @Override
    public void upgradeFailed(String errorInfo) {
    }
    @Override
    public void success(LicenseStatus newLicStatus) {
    }
    @Override
    public void recycleLicenseFailed(String errorInfo) {
    }
    @Override
    public void bindPhoneNumberFailed(String errorInfo) {
    }
    @Override
    public void activateFailed(String errorInfo) {
    }
    @Override
    public void queryResult(ArrayList<Module> arrModules) {
      modules = arrModules;
    //在线激活设备,传入用户序列号和需要申请的模块列表
      manager.activateDevice(userSerialID, modules);
    }
    @Override
    public void otherErrors(String errorInfo) {
    }
  });
  //设置许可类型(注意:先设置许可类型,再初始化环境)
  Environment.setLicenseType(LicenseType.UUID);
  Environment.initialization(getApplicationContext());
  //查询许可中包含的模块
  manager.query(userSerialID);
  //使用查询到的模块激活,需要在查询结束后调用激活方法,分两步执行,此处直接将其放置在查询回调中执行。
}

通过直接添加模块的方式配置在线许可范例代码如下:

private void active() {
  //用户序列号
  String userSerialID = "用户序列号";
  //设置申请许可的模块
  final ArrayList<Module> modules = new ArrayList<Module>();
  modules.add(Module.Core_Runtime);
  modules.add(Module.Navigation_Runtime);
  modules.add(Module.Realspace_Runtime);
  RecycleLicenseManager manager = RecycleLicenseManager.getInstance(getApplicationContext());
  //设置许可激活回调
  manager.setActivateCallback(new RecycleLicenseCallback() {
    @Override
    public void upgradeFailed(String errorInfo) {
    }
    @Override
    public void success(LicenseStatus newLicStatus) {
    }
    @Override
    public void recycleLicenseFailed(String errorInfo) {
    }
    @Override
    public void bindPhoneNumberFailed(String errorInfo) {
    }
    @Override
    public void activateFailed(String errorInfo) {
    }
    @Override
    public void queryResult(ArrayList<Module> arrModules) {
    }
    @Override
    public void otherErrors(String errorInfo) {
    }
  });
  //设置许可类型(注意:先设置许可类型,再初始化环境)
  Environment.setLicenseType(LicenseType.UUID);
  Environment.initialization(getApplicationContext());
  //在线激活设备,传入用户序列号和需要申请的模块列表
  manager.activateDevice(userSerialID, modules);	
}

备份许可

通过绑定手机号的方式对许可进行备份。许可备份成功后,一旦设备遗失或报废,可在其它设备上通过归还接口对许可进行归还,归还后的许可支持再分配。

建议为每个硬件备份一个手机号,便于设备不可用时收回再分配。

private void bind() {
  RecycleLicenseManager manager = RecycleLicenseManager.getInstance(getApplicationContext());
  //传入手机号,绑定许可
  manager.bindPhoneNumber(mPhoneNumber);	
}

(1). 一个手机号只能备份一个许可。

(2). 许可激活后方可进行备份操作。

归还许可

本设备主动归还许可,传入本机备份过的手机号或者没有备份手机号,传入空参数,系统自动获取设备UUID,用于归还。

本设备遗失或报废,已备份手机号的,通过其它设备传入该手机号进行归还。

本设备遗失或报废,没有备份手机号的,则无法归还许可,许可始终被占用。

许可归还后才能再分配,建议激活许可时,备份手机号。


private void recycle() {
  RecycleLicenseManager manager = RecycleLicenseManager.getInstance(getApplicationContext());
  //传入手机号,回收许可
  manager.recycleLicense(mPhoneNumber);
}

许可激活后方可进行归还操作。

在SuperMap Online的“许可管理-移动产品许可”下,绑定序列号,即可查看该序列号下激活的设备。

图:绑定序列号

私有云许可

私有云许可需要本地搭建一个局域网服务,设备和服务都处于同一IP段下,使用过程中,保持许可服务一直在线。在线私有云许可使用步骤如下:

第一步:搭建私有云许可服务

超图官网下载“许可中心(Web版)”,下载地址:http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx。

说明:

不同的SuperMap iMobile版本,需使用不同版本的Web许可中心。

  • SuperMap iMobile 11i(2024),即v12.0版,搭配Web许可中心v3.0.28。
  • SuperMap iMobile 11i(2023),即v11.0版,搭配Web许可中心v3.0.9。
图:下载许可中心(Web版)

下载完成后,选择对应的版本,这里以Windows版为例。

图:解压许可中心,选择合适版本

解压许可中心,运行“bin”文件夹中的“Start.bat”文件。

图:运行许可中心

浏览器中输入“localhost:9183”,创建账户。已有账户可直接登录。

图:注册和登录许可中心

第二步:许可中心中激活更新

登录后,进入“激活更新”页面,点击“下载报告”得到名为“*.reportc”的文件。将“*.reportc"文件提交给北京超图软件股份有限公司,我们将根据您的需求生成“*.licc”正式许可文件并返回给您,收到后请妥善保管;

在“激活更新”页面,点击“选择(*.licc)文件”,并选中上述返回的许可文件“*.licc”;点击“导入许可”,成功导入后会得到“导入许可成功”提示。

图:激活许可

第三步:程序代码中激活

初始化私有云许可,设置私有云许可地址。

PrivateCloudLicenseManager.getInstance().setServerUrl(URL);//URL为私有云服务地址

查询云许可。

PrivateCloudLicenseManager.getInstance().queryFormalLicense(new         PrivateCloudLicenseManager.privateLicQueryCallback() {
  @Override
  public void onQueryComplete(Vector<PrivateCloudLicenseManager.privateCloudLicInfo> vectors) {
  }
});

获取所有模块信息,将需要激活的模块的ID保存,用于激活。

激活许可。

boolean active= PrivateCloudLicenseManager.getInstance().ApplyFormalLicense(activecount);

激活成功为true,失败为false。

私有云是属于长连接,一旦网络断开,或者App杀掉,许可自动回收,所以不存在回收操作。

离线许可

离线许可,根据移动设备序列号,生成许可文件,并将许可文件拷贝到移动设备中的对应位置,无需联网,即可激活。

第一步:获取设备硬件码

有两种方式获得设备的硬件识别码。

第一种:通过Evironment类的接口获取目标设备的硬件识别码。

Environment.getDeviceID();

第二种:通过定制应用直接获得设备的硬件识别码。

在超图软件技术资源中心下载获取设备硬件识别码的工程代码和apk,地址为:http://support.supermap.com.cn/product/CodeLibrary.aspx?PRODUCT_TYPE=4#pro_name。网盘地址为:https://pan.baidu.com/share/init?surl=c1YaoPM,提取码:f71j。

图:下载定制应用,获取申请许可设备ID号

第二步:获得激活文件

用获得的硬件识别码通过销售渠道获取产品的许可激活文件。

第三步:拷贝许可文件至移动设备

将许可文件拷贝到对应的移动设备中,默认许可路径为“/SuperMap/license”。

在应用程序初始化的代码中通过 Environment 类显式设置许可文件存放的路径,将许可激活文件存放至该指定路径下。

String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
Environment.setLicensePath(rootPath + "/SuperMap/license/");//设置许可文件路径