在使用ArcGIS for Android 进行开发的时候,你会注意到你的地图上会有Licensed For Developer Use Only
和Powered by Esri
等提示。如果你想去掉这些信息,你需要获取Esri的许可证。下面讲讲具体怎么做。
我们可以去ArcGIS Runtime SDK for Android
查看怎么给应用授权,链接地址:
https://developers.arcgis.com/android/latest/guide/license-your-app.htm
在将ArcGIS Runtime应用程序部署到生产环境中之前,需要使用四种ArcGIS运行时许可证级别之一进行许可:Lite(免费),Basic,Standard和Advanced。
请注意,在部署您的应用程序时可能会产生其他成本,例如应用程序中由ArcGIS Online服务使用的积分。例如,如果您在您的应用中使用ArcGIS Online,并且每个月使用超过50个积分,或者您的应用可以产生收入,则必须购买部署计划。
Esri的许可证级别
Esri提供四种ArcGIS Runtime许可证级别:精简版(免费),基础版,标准版和高级版。每个额外的级别为您的应用程序用户打开更多功能。
作为ArcGIS开发人员计划的成员,您可以下载和安装任何ArcGIS Runtime SDK并访问所有API功能以进行开发。 您可以免费成为开发者计划的成员。 使用ArcGIS Runtime SDK开发应用程序不需要任何费用,也无需授权开发计算机。 但是,应用程序中的任何地图或场景都将被嵌入水印,并且可能会在运行时生成调试输出消息,以指示您的应用程序仅供开发人员使用。
在将ArcGIS Runtime应用程序部署到生产环境中之前,您需要对其进行许可。 Esri提供四种ArcGIS Runtime许可证级别:精简版,基本版,标准版和高级版。 在您的应用中访问ArcGIS Online并每月使用超过50个积分或创造收入时,您需要购买ArcGIS Online部署计划。 有关条款和条件的更多信息,请参阅我们的常见问题解答。
官方关于这四种账户的说明:https://developers.arcgis.com/arcgis-runtime/licensing/
四种许可证的详细说明
1、精简版
功能
1、可以查看ArcGIS平台上的地图,图层和包;
2、可以编辑公共服务中的功能。 这些服务在互联网上可用,并不安全;
3、可以同步要素图层服务生成移动地理数据库;
4、可以同步更新要素服务图层到本地移动地理数据库;
5、地理编码或反向地理编码,需要使用到ArcGIS Online的世界地理编码服务中的for_storage参数。具体可以参考ArcGIS Online文档中的地理编码服务;
6、简单和优化的进程;
7、使用网络服务计算服务区域并找到最近的设施。
许可证密钥
免费提供。 登录到您的ArcGIS for Developers帐户,转到许可您的ArcGIS Runtime应用程序,然后将许可证密钥复制到您的应用程序中。
指定用户
在ArcGIS Online组织或本地门户网站中的1级或2级注册用户。
2、基础版
功能
1、精简版的所有功能;
2、在移动地理数据库中编辑要素和要素服务上编辑要素,这些只能在本地网络上访问或者固定;
3、将移动地理数据库中编辑的要素对象(几何:点线面)、属性、附件同步到要素服务上;
4、在门户网站上添加,更新或删除内容。
许可证密钥
购买可供部署的包,可以联系为您服务的Esri办事处,或者如果您在美国,致电Esri,电话是1-800-447-9778。
指定用户
在ArcGIS Online组织或本地门户网站中的2级注册用户。
3、标准版
功能
1、基础版的所有功能;
2、访问额外的数据,包括:
Shapefiles
GeoPackages
- ENC层(S-57)
- 本地栅格图层
- 使用栅格功能
- 本地具有海拔数据的栅格。
3、视觉分析,视线、视域。
许可证密钥
购买可供部署的包,可以联系为您服务的Esri办事处,或者如果您在美国,致电Esri,电话是1-800-447-9778。
指定用户
暂时不可用。
4、高级版
功能
1、标准版的所有功能。
许可证密钥
购买可供部署的包,可以联系为您服务的Esri办事处,或者如果您在美国,致电Esri,电话是1-800-447-9778。
指定用户
暂时不可用。
扩展许可证
ArcGIS Runtime提供扩展,可以访问其他功能,分析工具和/或数据。
1、 分析
功能
1、最低使用的等级为 标准版;
2、使用网络服务计算服务区域并找到最近的设施。
许可证密钥
无
指定用户
无
2、 ArcGIS Runtime的街道地图(StreetMap Premium)
功能
1、适用于所有许可证级别
- 在移动地图包中离线使用
- 高质量的制图地图
- 离线地理编码
- 离线路由
2、可以为以下地区下载街道地图(StreetMap Premium):
- 北美
- 拉丁美洲
- 欧洲
- 亚太地区
- 中东和非洲
- 日本
每个区域性的移动地图包都被许可使用扩展许可证密钥。 您可以使用这些软件包与相关许可证密钥的任意组合。
补充:
ArcGIS Runtime的StreetMap Premium是一种新的数据产品,作为ArcGIS Runtime的扩展,它提供了丰富的街道数据,为高质量的地图绘制提供地理编码和路径支持。ArcGIS Runtime的StreetMap Premium运行时映射在世界所有地区都是一致的,可以离线使用; 他们可以同时满足您应用中的地址定位器,街道网络数据集和底图的需求。
注意:
StreetMap Premium for ArcGIS Runtime许可证由客户购买并提供。 您必须为您的应用程序提供访问此许可证密钥的机制。 许可证过期后,StreetMap Premium数据不能使用。 一旦到期,应用程序用户必须购买另一个许可证才能继续使用数据。 您必须在您的应用中提供正确的消息,以通知用户其许可证已过期或即将到期。
许可证密钥
许可证可供购买。
StreetMap Premium for ArcGIS运行时延伸许可证按年度提供。 许可证过期后,不能使用StreetMap Premium数据集。
请联系为您服务的Esri办事处,或者如果您在美国,致电Esri,电话是1-800-447-9778。
指定用户
暂时不可用。
许可证的使用
有两种方式可以在你的应用中设置许可证的级别,分别是Named user
(指定用户) 和 License key
(注册码) 。
1、Named user
(指定用户)
Named user
是指ArcGIS的组织帐户,它是ArcGIS Online或ArcGIS Enterprise组织中的成员。获取应用运行时的许可证只是指定用户的某一项权利。你需要在应用程序中引入代码,以便程序可以登录到门户并返回和指定用户相关联的许可证信息。
这种方式支持30天周期的标准版许可,在30天的许可周期内可实现离线使用。但是超过30天最长使用期,应用需要在联网状态下重新获取标准版许可,否则只能使用基础版功能。
2、License key
许可证密钥
许可证密钥是包含许可证详细信息的文本字符串,许可证密钥可以通过ArcGIS for Developer帐户获取,也可以在ArcGIS Runtime部署包中购买。许可证密钥通常编译到您的运行时应用程序中。
购买ArcGIS Runtime SDK标准版永久授权,这种方式可以实现许可永久离线使用。在绝对禁止联网的情况下,需要采用这种模式。
授权应用的代码集成
1、获得部署许可
-
阅读最终用户许可协议。
-
在使用任何ArcGIS Runtime功能之前插入如下代码。
-
调用ArcGISRuntimeEnvironment单例对象上的setLicense方法以使用许可证密钥许可应用程序。代码如下:
//ArcGISRuntimeEnvironment.setLicense(String licenseKey);
ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud#########,day-month-year,####################");
您的应用现已获得部署许可。
2、使用指定用户的帐户授权您的应用程序
将指定用户添加到你的代码中,以便你的应用能够登录和使用ArcGIS组织的帐户。
在应用运行的时候,用户必须成功登录才能返回应用程序将使用的许可证信息(确认许可证级别)。
步骤如下:
-
阅读最终用户许可协议。
-
在使用任何ArcGIS Runtime功能之前插入如下代码。
-
允许应用使用ArcGIS组织的帐户进行身份验证。 在加载门户网站时,获取LicenseInfo并使用它来许可应用程序。 作为该过程的一部分,请保存许可证信息,以准备在离线环境中使用您的应用程序长达30天。代码如下:
// connect to ArcGIS Online or an ArcGIS portal as a named user
// The code below shows the use of token based security but
// for ArcGIS Online you may consider using Oauth authentication.
UserCredential credential = new UserCredential("user", "password");
// replace the URL with either the ArcGIS Online URL or your portal URL
Portal portal = new Portal("https://your-org.arcgis.com/");
portal.setCredential(credential);
// load portal and listen to done loading event
portal.loadAsync();
portal.addDoneLoadingListener(() -> {
// get license info from the portal
LicenseInfo licenseInfo = portal.getPortalInfo().getLicenseInfo();
// Apply the license at Standard level
ArcGISRuntimeEnvironment.setLicense(licenseInfo);
});
- 如果您将许可证信息保存在本地存储中,则可以使用保存的许可证信息在离线环境中启动和许可您的应用程序。 从存储中检索许可证并授权您的应用程序。代码如下:
// connect to ArcGIS Online or an ArcGIS portal as a named user
// The code below shows the use of token based security but
// for ArcGIS Online you may consider using Oauth authentication.
UserCredential credential = new UserCredential("user", "password");
// replace the URL with either the ArcGIS Online URL or your portal URL
Portal portal = new Portal("https://your-org.arcgis.com/");
portal.setCredential(credential);
// load portal and listen to done loading event
portal.loadAsync();
portal.addDoneLoadingListener(() -> {
// get license info from the portal
LicenseInfo licenseInfo = portal.getPortalInfo().getLicenseInfo();
// Apply the license at Standard level
ArcGISRuntimeEnvironment.setLicense(licenseInfo);
});
扩展级别许可证的使用
使用扩展级别许可证的步骤和上面的部署许可类似,只是多一个参数。
-
阅读最终用户许可协议。
-
在使用任何ArcGIS Runtime功能之前插入如下代码。
-
调用ArcGISRuntimeEnvironment单例对象上的setLicense方法以使用许可证密钥许可应用程序。代码如下:
//ArcGISRuntimeEnvironment.setLicense(String licenseKey, List<String> extensions);
ArcGISRuntimeEnvironment.setLicense("runtimeadvanced,1000,rud#########,day-month-year,####################",
Arrays.asList("runtimeanalysis,1000,rud#########,day-month-year,####################", "another license extension code"));
您的应用现已获得部署许可。
注册账户
在代码中使用时,你需要ArcGis的开发者账户,但是在国内由于一些原因你无法直接在Gis的开发者网站上进行注册,这时你有两种方式获得这个ArcGis的开发者账户
-
1、你先注册 arcgis online 的试用账户,然后使用 arcgis online 的试用账户去登录Gis的开发者网站,但是这种方式有一个弊端,就是你的 arcgis online 的试用账户是有时间限制的,到期之后需要续费或者转为公共账户,续费(不可能的,o(╥﹏╥)o,因为穷),而转为公共账户之后,你就没办法在ArcGIS Runtime / Licensing 界面获取你的应用授权码。
-
2、就是直接注册Gis的开发者账户,不用arcgis online 的试用账户去登录,这种方式就需要你使用VPN绕过“墙”的限制了。使用这种方式就不用理会账户的时间限制了,注册Gis的开发者之后,我们就可以在ArcGIS Runtime / Licensing 界面获取你的应用授权码了。
1、注册 arcgis online 的试用账户
第一次使用时需要先注册arcgis online 的试用账户,地址arcgis online 的试用账户http://www.arcgis.com ,点击“试用ArcGIS”
填写相关信息
在邮件中确认
确认后,填写相关信息
在这个填写完之后,还有一个填写组织(公司)相关信息的界面,忘记截图了o(╥﹏╥)o,都填写完整之后我们可以来到这个界面
可以看到我们的账号级别是第二级的,但是账号有效期只有21天。如果要永久使用需要购买,联系方式如下
2、登录arcgis开发者网站
使用上面注册的账号在Gis的开发者网站上登录,https://developers.arcgis.com/,或者直接在Gis的开发者网站上注册(翻墙),登录之后界面如下
我们点击“New Application”创建一个新的应用,填写新应用的标题 , 标签 ,和描述。
**创建完成之后,可以看到对应的 Client ID **
获取授权
1、使用精简版(lite)的授权
-
登录你的ArcGis 开发者账号 https://developers.arcgis.com
-
在ArcGIS Runtime / Licensing 界面获取你的应用授权码 https://developers.arcgis.com/arcgis-runtime/licensing/
-
点击
Show my ArcGIS Runtime Lite license key
获取你的授权码
- 在使用ArcGis 之前调用以下代码
ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud#########,day-month-year,####################");
2、使用用户名密码进行授权
在使用ArcGis 之前调用以下代码
UserCredential credential = new UserCredential("user", "password");
final Portal portal = new Portal("https://your-org.arcgis.com/");
portal.setCredential(credential);
portal.loadAsync();
portal.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
LicenseInfo licenseInfo = portal.getPortalInfo().getLicenseInfo();
ArcGISRuntimeEnvironment.setLicense(licenseInfo);
}
});
前面提到的离线使用许可证信息,我们可以这样写
boolean connected = MyUtils.isNetWorkConnected(this);
if (!connected) {
new CenterHintToast(MainActivity.this, "您当前处于离线状态!");
} else { //只要有网就去更新许可证信息zuo12138zhijie12138##
UserCredential credential = new UserCredential("yourname", "password");
final Portal portal = new Portal("https://C-NBS.maps.arcgis.com/");
portal.setCredential(credential);
portal.loadAsync();
portal.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
PortalInfo portalInfo = portal.getPortalInfo();
if (portalInfo != null) {
LicenseInfo licenseInfo = portalInfo.getLicenseInfo();
if (licenseInfo != null) instance.setLicenseInfo(licenseInfo.toJson());
}
}
});
}
String info = instance.getLicenseInfo();
if (!TextUtils.isEmpty(info)) { //本地存有许可证信息
LicenseInfo licenseInfo = LicenseInfo.fromJson(info);
ArcGISRuntimeEnvironment.setLicense(licenseInfo);
}
if (portalInfo != null),我加上这个非空判断是因为我在使用了VPN后,有网的情况下获取的portalInfo 有可能为null
试用账户到期后的处理
如果你的使用账户到期了,你将不能使用上述的“用户名密码获取授权”的方式去消除水印,但依旧可以使用“精简版的授权”。
如果试用账户到期,官方会邮件通知你续费或转为公共账户。