我想将Android应用程序与Dynamics CRM 2015 Online和On-Premise集成 对于在线版本Connect Android App to Dynamics CRM using Web API,这可以正常工作,但OnPremise不支持ADAL依赖项。 是否有任何资源显示访问Microsoft CRM内部部署的基本步骤。 连接到REST端点的任何示例代码都会有所帮助。
答案 0 :(得分:1)
为内部部署部署设置IFD。
Authenticate to Microsoft Dynamics 365 with the Web API
当您使用适用于Dynamics 365的Web API(在线)或内部部署时 面向Internet的部署(IFD)您必须使用OAuth,如中所述 使用OAuth连接到Microsoft Dynamics 365 Web服务。
Connect to Microsoft Dynamics 365 web services using OAuth
适用于:Dynamics 365(在线), Dynamics 365(内部部署), Dynamics CRM 2016,Dynamics CRM Online
推荐用于Dynamics 365 Web的身份验证API API是Azure Active Directory身份验证库(ADAL),即 适用于各种平台和编程语言。 ADAL API使用Dynamics 365管理OAuth 2.0身份验证 Web服务标识提供者。有关实际OAuth的更多详细信息 使用的协议,请参阅Use OAuth to Authenticate with the CRM Service。
答案 1 :(得分:0)
现场需要ADFS。请查看此文档以了解如何设置服务器。 https://msdn.microsoft.com/en-us/library/dn531009(v=crm.7).aspx
如果这是客户的一次性项目,那么在应用和CRM之间创建基于.Net的代理也是值得的。这样您就可以使用.Net SDK而无需担心失去支持
答案 2 :(得分:0)
使用ADAL进行On-Prem:
public static String GetAdfs(String url) throws IOException,
ParserConfigurationException, SAXException {
URL WsdlURL = new URL(url
+ "/XrmServices/2011/Organization.svc?wsdl=wsdl0");
HttpURLConnection rc = (HttpURLConnection) WsdlURL.openConnection();
rc.setRequestMethod("GET");
rc.setDoOutput(true);
InputStreamReader read = new InputStreamReader(rc.getInputStream());
StringBuilder sb = new StringBuilder();
int ch = read.read();
while (ch != -1) {
sb.append((char) ch);
ch = read.read();
}
String response = sb.toString();
read.close();
rc.disconnect();
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document x = builder
.parse(new ByteArrayInputStream(response.getBytes()));
NodeList nodes = x.getElementsByTagName("ms-xrm:Identifier");
if (nodes.getLength() == 0)
return null;
return nodes.item(0).getFirstChild().getTextContent()
.replace("http://", "https://");
}
// ADAL init
AuthenticationContext authenticationContext = new AuthenticationContext(LoginActivity.this, GetAdfs(url), false);
authenticationContext.acquireToken(context, domain, Constants.CLIENT_ID, Constants.REDIRECT_URL, "", PromptBehavior.Auto, "", callback);
private AuthenticationCallback<AuthenticationResult> callback = new AuthenticationCallback<AuthenticationResult>() {
@Override
public void onError(Exception exc) {
ViewHelper.showToast(context, "Domain name or user not available in ms crm");
}
@Override
public void onSuccess(AuthenticationResult result) {
if (result == null || result.getAccessToken() == null || result.getAccessToken().isEmpty()) {
Toast.makeText(context, "Token is Empty", Toast.LENGTH_SHORT).show();
} else {
Log.i(Keys.TOKEN_KEY, result.getAccessToken());
}
}
};