作者:dongyx

      使用SuperMap iMobile产品需要SuperMap的授权,即获得许可。目前,针对不同的用户和不同的使用场景,SuperMap iMobile提供三种许可方式,分别为试用许可、正式许可、教育许可。
一、试用许可
      想必有很多同学在使用初期都是使用的试用许可,那么试用许可具有哪些特点呢?
1.许可免费,可以直接使用邮箱申请,但是试用期为3个月;并且功能无限制
2.地图上含有超图水印;
3.试用许可不需要绑定设备,一个许可文件可以用在多个设备上。
      使用方法:
      将申请后的*.slm许可文件拷贝至设备中,然后调用

String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
Environment.setLicensePath(rootPath + "/SuperMap/license/")

二、正式许可
      在正式项目的开发中很多客户都是需要购买正式许可的,但是并不知道需要购买哪种正式许可,下面小编带大家了解iMobile产品的正式许可使用场景以及使用方法。
1.文件型正式许可:该许可主要适用于设备不能联网的情况下使用,一个许可文件对应一个设备。
使用方法:
      通过 Evironment 类的接口获取目标设备的硬件识别码(也可以通过定制应用直接获得设备的硬件识别码)

Environment.getDeviceID();

      用获得的硬件识别码通过销售渠道获取许可激活文件,将文件拷贝至设备中,然后调用以下代码:

String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
Environment.setLicensePath(rootPath + "/SuperMap/license/")

2.在线激活许可
      该许可在第一次激活时设备需要联网,激活后可一直使用。并且该许可是可归还的,在使用后都可以进行归还,然后其他设备进行激活使用
使用方法:
      通过查询序列号获取功能模块进行激活:

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);		
}

3.在线公有云许可
      在线公有云许可对接的是SuperMap Online账号,不需要在本地部署相关服务。使用在线公有云许可需要满足设备联网、拥有SuperMap Online账号并且账号中有iMobile许可。
使用方法:
      初始化公有云对象:

3.CloudLicenseManager manager = CloudLicenseManager.getInstance(this);
manager. setLoginCallback(new CloudLicenseManager.LicenseLoginCallback(){
	@Override
	public void loginAccount(boolean issuccess) {
	}
	@Override
	public void queryLicense(QueryFormalLicenseResponse queryFormalLicenseResponse) {
	}
	@Override
	public void activeLicense(String returnid) {
	}
	@Override
	public void recycleLicense(int days) {
	}
	@Override
	public void otherError(String error) {
	}
	@Override
	public void logoutAccount(boolean logout) {
	}
manager.login("username","password");

      查询许可,查询成功后在queryLicense回调中拿到许可ID licenseID用于下一步激活:

@Override
public void queryLicense(QueryFormalLicenseResponse queryFormalLicenseResponse) {
	if (queryFormalLicenseResponse!=null){
		int licenseCount =  queryFormalLicenseResponse.licenseCount;
		boolean formal = queryFormalLicenseResponse.formal;
		LicenseInfo[] licenseInfos = queryFormalLicenseResponse.licenses;
		licenseid = licenseInfos[0].id;
	}
}

激活许可

manager.applyFormal(licenseid);

4.教育版许可
      教育版许可顾名思义是给教育单位提供的许可,该许可需要部署一个许可服务器,在使用时只需要通过许可服务器的url地址激活就可以。具体使用方法如下:
1.初始化教育许可类 :

eduLicense = EduLicense.getInstance(this);

2.设置教育许可监听:

eduLicense.setEduLicenseApplyListener(new EduLicense.EduLicenseApplyListener() {
        @Override
            public void getApplySuccess(boolean isApplySuccess) {
                if (isApplySuccess){
                    Log.i(TAG, "激活成功 ");
                }
                else {
                    Log.i(TAG, "激活失败 ");
                }
            }
        });

3.设置许可服务网址 :

eduLicense.setUrl("URL");

4.激活许可 ;

eduLicense.applyLicense();

5.激活完成后,获取许可信息。

eduLicense.getLicenseInfos();

许可信息中包括:
许可激活信息,及激活成功或失败。
许可描述。
许可合同有效期。该有效期是许可服务上的许可合同到期时间。