POST
|
Hi there, as a key component of a citizen science project on logging raptor observations around the world for The Peregrine Fund, we have a mobile app developed in v 10.2.9 Runtime SDK both iOS and Android which talks with a custom identity store in ArcGIS Server. The app is distributed freely and has gathered 600+ users during the pilot for Africa. So having the identity store in ArcGIS Server is essential for the unlimited number of users that can access our secured feature service to keep their sensitive data safe. Google have recently asked that all new apps are fully 64bit compliant and this has necessitated upgrading to v100.6 ArcGIS Runtime for Android. The documentation indicates that this version works with ArcGIS Server >10.3. Yet the licensing of Runtime (we now need basic tier for features that did not previously need subscription) appears to be structured for the system of named users employed by ArcGIS Online / Portal. Does anyone have experience of developing Android apps with 100.6 to talk with ArcGIS Server secured feature services using AGS or custom identity stores? Can they please confirm that the new tiered system of licensing Runtime works with such user systems? Any advice would be greatly appreciated Rob Davies
... View more
10-25-2019
10:14 AM
|
0
|
0
|
173
|
POST
|
Ok, we fixed the issue ourselves. Just in case anybody else has a similar issue it was being caused by generic type mapping on the feature. To fix it we had to cast each attribute to it's esri field type in our feature class. In the prior version (10.2.9) the runtime could successfully map generic types to their relevant esri types but it seems that the new sdk cannot do that without generating an exception on incompatible data types. I am unsure if this is by design or if it is a bug, maybe an esri guru could tell us.
... View more
09-30-2019
06:52 AM
|
0
|
0
|
681
|
POST
|
Followed up with some more testing by sending a query instead of an edit. This passed successfully and returned the correct query result, so my idea about authentication was wrong leading me to change my original appraisal to a possible licencing issue. The feature we are using requires a basic licence to function and we are using our developer licence to test with. According to documentation this should work but will return a watermark on any produced maps (which we are not returning to. I am wondering if it is failing because we are sending data directly to the ArcGIS Server rather than via a portal rest interface.
... View more
09-26-2019
08:14 AM
|
0
|
0
|
681
|
POST
|
We are constructing an app that talk directly to an unfederated Arcgis 10.61 enterprise server. We are trying to upload data to a secure feature service but the applyEditsAsync is returning immediately and not uploading the data. private void applyEdits() {
final ListenableFuture<List<FeatureEditResult>> editResult = _fl.applyEditsAsync(); // THE PROBLEM: request does not reach the server
editResult.addDoneListener(() -> { // RETURNS IMMEDIATELY
try {
List<FeatureEditResult> editResults = editResult.get(); // editResults IS EMPTY
if (editResults != null && !editResults.isEmpty()) {
FeatureEditResult result = editResults.get(0);
if (!result.hasCompletedWithErrors()) {
...
}
} else {
throw editResults.get(0).getError();
}
}
} catch (InterruptedException | ExecutionException e) {
runOnUiThread(() -> logToUser(true, getString(R.string.error_applying_edits, e.getCause().getMessage())));
}
}); the GIS Server log contains the following: FINE 25 Sep 2019 13:51:09 REST request successfully processed. Response size is 306601 characters. GRIN/GRIN_secure.MapServer FINE 25 Sep 2019 13:51:09 REST request successfully processed. Response size is 274509 characters. GRIN/GRIN_secure.MapServer FINE 25 Sep 2019 13:51:08 REST request received. Request size is 30 characters. GRIN/GRIN_secure.MapServer FINE 25 Sep 2019 13:51:08 REST request received. Request size is 30 characters. GRIN/GRIN_secure.MapServer FINE 25 Sep 2019 13:51:08 GraphicFeatureServer::HandleRESTRequest ## requestProperties = {"computeETag":true,"Aggregate":false} GRIN/GRIN_secure.MapServer FINE 25 Sep 2019 13:51:08 GraphicFeatureServer::HandleRESTRequest ## inputJSON = {"returnAdvancedSymbols":true} GRIN/GRIN_secure.MapServer FINE 25 Sep 2019 13:51:08 Wait time for 'GRIN.GRIN_secure.MapServer' service request is 0 milliseconds. Server INFO 25 Sep 2019 13:51:08 Request user: test, Service: GRIN/GRIN_secure/FeatureServer Rest FINE 25 Sep 2019 13:51:05 HTTP Referer: Not Available Server INFO 25 Sep 2019 13:51:05 Request user: Anonymous user, Service: GRIN/GRIN_secure/FeatureServer Rest I am thinking the issue may be authentication related as the log is not showing a token being passed in the request FINE 25 Sep 2019 13:51:08 GraphicFeatureServer::HandleRESTRequest ## inputJSON = {"returnAdvancedSymbols":true} GRIN/GRIN_secure.MapServer (log entry from 10.2.9) FINE Sep 25, 2019, 12:41:56 PM GraphicFeatureServer::HandleRESTRequest ## inputJSON = {"returnAdvancedSymbols":false,"token":"ag6BjT8jWJKv5BzLaQO5_Hd4zGrhfqyun3PDduWM6qZet73sZ0olSPYbM_3B2b5B"} GRIN/GRIN_secure.MapServer but the server is still responding with the metadata FINE 25 Sep 2019 13:51:09 REST request successfully processed. Response size is 274509 characters. GRIN/GRIN_secure.MapServer Main call: private ServiceFeatureTable _fl;
private void loadService(final int layerId) {
String url = _url + String.valueOf(layerId);
AuthenticationChallengeHandler ah = new AuthenticationChallengeHandler() {
@Override
public AuthenticationChallengeResponse handleChallenge(AuthenticationChallenge authenticationChallenge) {
String message = "Authentication Failed! ";
message += authenticationChallenge.getException().getMessage();
fireProgressEvent(SYNC_ERROR, message);
return null;
}
};
AuthenticationManager.setAuthenticationChallengeHandler(ah);
_fl = new ServiceFeatureTable(url);
_fl.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_CACHE);
_fl.setCredential(_cred);
_fl.loadAsync();
_fl.addDoneLoadingListener(() -> {
if (_fl.getLoadStatus().equals(LoadStatus.LOADED)) {
uploadObservation();
//creates the feature and calls applyEdits()
}
});
} Is this correct behaviour for 100.6 or am I correct and it's an issue with authentication
... View more
09-25-2019
10:26 AM
|
0
|
3
|
854
|
POST
|
We sorted this one it was Symantec Endpoint preventing the connections Rob
... View more
10-29-2013
12:52 AM
|
0
|
0
|
160
|
POST
|
Hi We are having problems getting LDAP to work. We are able to login but cannot get access to the admin tabs, so I believe that the system is just ignoring the groups set up in AD. Here is a rundown of the LDAP settings in our config file just in case I am missing something obvious. <ldapAdapter>
<ldapConnectionProperties
providerURL="ldap://********:389"
initialContextFactoryName="com.sun.jndi.ldap.LdapCtxFactory"
securityAuthentication="simple"
securityProtocol="">
<ldapServiceAccount
securityPrincipal="CN=gptadmin,CN=Users,DC=********,DC=local"
securityCredentials="*******"
encrypted="false"
catalogAdminDN="CN=gptadmin,CN=Users,DC=********,DC=local"/>
</ldapConnectionProperties>
<singleSignOn
active="false"
credentialLocation="userPrincipal"
anonymousValue=""
logoutOutcome=""/>
<selfCareSupport
supportsLogin="true"
supportsLogout="true"
supportsUserRegistration="true"
supportsUserProfileManagement="true"
supportsPasswordChange="true"
supportsPasswordRecovery="true"/>
<roles authenticatedUserRequiresRole="true">
<role
key="gptRegisteredUser"
resKey="catalog.role.gptRegisteredUser"
manage="true"
forbidden="false"
groupDN="CN=gpt_registeredusers,CN=Users,DC=********,DC=local"/>
<role
key="gptPublisher"
inherits="gptRegisteredUser"
resKey="catalog.role.gptPublisher"
manage="true"
forbidden="false"
groupDN="CN=gpt_publishers,CN=Users,DC=********,DC=local"/>
<role
key="gptAdministrator"
inherits="gptPublisher"
resKey="catalog.role.gptAdministrator"
manage="true"
forbidden="false"
groupDN="CN=gpt_administrators,CN=Users,DC=********,DC=local"/>
</roles>
<users
displayNameAttribute="sAMAccountName"
passwordEncryptionAlgorithm="SHA"
newUserDNPattern="cn={0},CN=Users,DC=********,DC=local"
usernameSearchPattern="(&(objectclass=person)(sAMAccountName={0}))"
searchDIT="CN=Users,DC=******,DC=local"/>
<requiredObjectClasses>
<objectClass name="top"/>
<objectClass name="person"/>
<objectClass name="organizationalPerson"/>
<objectClass name="inetOrgPerson"/>
</requiredObjectClasses>
<userAttributeMap>
<attribute key="username" ldapName="sAMAccountName"/>
<attribute key="password" ldapName="userPassword"/>
<attribute key="email" ldapName="mail"/>
<attribute key="firstName" ldapName="givenName"/>
<attribute key="lastName" ldapName="sn"/>
<attribute key="displayName" ldapName="displayName"/>
<attribute key="organization" ldapName="o"/>
<attribute key="affiliation" ldapName="businessCategory"/>
<attribute key="street" ldapName="street"/>
<attribute key="city" ldapName="l"/>
<attribute key="stateOrProv" ldapName="st"/>
<attribute key="postalCode" ldapName="postalCode"/>
<attribute key="country" ldapName=""/>
<attribute key="phone" ldapName="telephoneNumber"/>
</userAttributeMap>
</users>
<groups
displayNameAttribute="cn"
dynamicMemberOfGroupsAttribute=""
dynamicMembersAttribute=""
memberAttribute="member"
memberSearchPattern="(&(objectclass=group)(member:1.2.840.113556.1.4.1941:={0}))"
searchDIT="CN=Users,DC=********,DC=local"/>
<!--
<metadataManagementGroup
name="Region 1"
groupDN="group_distinguished_name"/>
<metadataManagementGroup
name="Region 2"
groupDN="group_distinguished_name"/>
-->
</groups>
</ldapAdapter> Hope someone can help. Thanks Rob
... View more
10-24-2013
07:40 AM
|
0
|
1
|
3814
|
Online Status |
Offline
|
Date Last Visited |
2 weeks ago
|