- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
We have been working in a c# paid subscription Revit Add In and it is tested and ready to be published pending of the entitlement checking.
We consider the documentation at: https://damassets.autodesk.net/content/dam/autodesk/www/adn/pdf/entitlement-api-for-desktop-apps.pdf
We added a draft app (not yet submited) in the publisher corner to get the app id and work on the methods but the app is not actually blocking any buttons or displaying any TaskDialog even though my current username is not registered in the entitlement (no one has actually bought the app yet). It does not actually do anything...
Attached you can find our code;
- We subscribe to the Application Initialized event in public Result OnStartup(UIControlledApplication application);
application.ControlledApplication.ApplicationInitialized += ControlledApplication_ApplicationInitialized;
- We declared the constant from our draft app ID;
public const string _baseApiUrl = @"https://apps.autodesk.com/";
public const string _appId = @"(The ID of my unpublished app)";
- We define ControlledApplication_ApplicationInitialized event and Entitlement event (leave codeline references);
- void ControlledApplication_ApplicationInitialized(object sender, Autodesk.Revit.DB.Events.ApplicationInitializedEventArgs e)
- {
- Autodesk.Revit.ApplicationServices.Application rvtApp = sender as Autodesk.Revit.ApplicationServices.Application;
- UIApplication uiapp = new UIApplication(rvtApp);
- if (!Autodesk.Revit.ApplicationServices.Application.IsLoggedIn)
- {
- SplitButton splitbuttonselector = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlaceSelector");
- SplitButton splitbutton1 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace1");
- SplitButton splitbutton2 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace2");
- SplitButton splitbutton3 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace3");
- SplitButton splitbutton4 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace4");
- SplitButton splitbutton5 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace5");
- SplitButton splitbutton6 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace6");
- SplitButton splitbutton7 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace7");
- SplitButton splitbutton8 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace8");
- SplitButton splitbutton9 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace9");
- SplitButton splitbutton10 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace10");
- SplitButton splitbutton11 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace11");
- SplitButton splitbutton12 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace12");
- splitbuttonselector.Visible = false;
- splitbutton1.Visible = false;
- splitbutton2.Visible = false;
- splitbutton3.Visible = false;
- splitbutton4.Visible = false;
- splitbutton5.Visible = false;
- splitbutton6.Visible = false;
- splitbutton7.Visible = false;
- splitbutton8.Visible = false;
- splitbutton9.Visible = false;
- splitbutton10.Visible = false;
- splitbutton11.Visible = false;
- splitbutton12.Visible = false;
- TaskDialog.Show("Entitlement", "Please, login to Autodesk 360.\n");
- }
- else
- {
- string userId = rvtApp.LoginUserId;
- bool isValid = Entitlement(_appId, userId);
- if (isValid == false || isValid == null)
- {
- SplitButton splitbuttonselector = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlaceSelector");
- SplitButton splitbutton1 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace1");
- SplitButton splitbutton2 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace2");
- SplitButton splitbutton3 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace3");
- SplitButton splitbutton4 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace4");
- SplitButton splitbutton5 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace5");
- SplitButton splitbutton6 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace6");
- SplitButton splitbutton7 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace7");
- SplitButton splitbutton8 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace8");
- SplitButton splitbutton9 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace9");
- SplitButton splitbutton10 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace10");
- SplitButton splitbutton11 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace11");
- SplitButton splitbutton12 = App.Instance.SplitButtons.Find(x => x.Name == "pullDownToolPlace12");
- splitbuttonselector.Visible = false;
- splitbutton1.Visible = false;
- splitbutton2.Visible = false;
- splitbutton3.Visible = false;
- splitbutton4.Visible = false;
- splitbutton5.Visible = false;
- splitbutton6.Visible = false;
- splitbutton7.Visible = false;
- splitbutton8.Visible = false;
- splitbutton9.Visible = false;
- splitbutton10.Visible = false;
- splitbutton11.Visible = false;
- splitbutton12.Visible = false;
- TaskDialog.Show("Entitlement", "This Autodesk account cannot be verified.\n");
- }
- }
- }
- private bool Entitlement(string appId, string userId)
- {
- //REST API call for the entitlement API.
- //We are using RestSharp for simplicity.
- //You may choose to use another library.
- //(1) Build request
- var client = new RestClient();
- client.BaseUrl = new System.Uri(_baseApiUrl);
- //Set resource/end point
- var request = new RestRequest();
- request.Resource = "webservices/checkentitlement";
- request.Method = Method.GET;
- //Add parameters
- request.AddParameter("userid", userId);
- request.AddParameter("appid", appId);
- //(2) Execute request and get response
- IRestResponse response = client.Execute(request);
- //Get the entitlement status.
- bool isValid = false;
- if (response.StatusCode == HttpStatusCode.OK)
- {
- JsonDeserializer deserial = new JsonDeserializer();
- EntitlementResponse entitlementResponse =
- deserial.Deserialize<EntitlementResponse>(response);
- isValid = entitlementResponse.IsValid;
- }
- //
- return isValid;
- }
- [Serializable]
- public class EntitlementResponse
- {
- public string UserId { get; set; }
- public string AppId { get; set; }
- public bool IsValid { get; set; }
- public
- string Message
- { get; set; }
- }
We wonder if we should implement an internal check to confirm that the app is only used in one seat. Could one autodesk account have a license with several seats and use the same account in several computers? In that case, I guess the current checking will allow them to have our app in all their computers with only one paid license of our app.
Any help would be much appreciated.
Thanks
Solved! Go to Solution.