从Android连接到Dynamics CRM 2016(内部部署)

时间:2017-01-19 10:42:36

标签: android dynamics-crm

我想将Android应用程序与Dynamics CRM 2015 Online和On-Premise集成 对于在线版本Connect Android App to Dynamics CRM using Web API,这可以正常工作,但OnPremise不支持ADAL依赖项。 是否有任何资源显示访问Microsoft CRM内部部署的基本步骤。 连接到REST端点的任何示例代码都会有所帮助。

3 个答案:

答案 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());
        }
    }
};

1。 On-Prem and Online using Soap

2。 On-Prem and Online using ADAL