As I discussed in my last blog about the latest updates to the LTI Core and LTI Advantage specifications, 1EdTech has published a guide of best practices for LTI assessment tools. However, much of the advice in this guide can apply to a variety of different types of tools, not just assessment tools. This guide covers a very broad range of topics, from account binding for rostering strategies to how to handle course copy. Excitingly, the guide also hints at many of the new specifications the LTI workgroup has authored that are currently only available to 1EdTech members. The guide also offers advice for many questions I frequently receive from clients encountering some of the more challenging use cases associated with LTI. Below, I outline these highlights according to rostering, Deep Linking, course copy, and the Assignments & Grades Service.
Rostering Best Practices
Regarding user identity, account binding, and rostering, this guide is the first place I’ve seen it explicitly indicated that the “sub” claim within an LTI launch’s ID token actually corresponds to the user ID. The guide goes on to state that the easiest way for LTI tools to obtain user data is from the LTI launch or LTI Names & Roles Provisioning Service (NRPS). However, user data may also be obtained from outside sources such as the institution’s Student Information System (SIS), in which case the LTI launch’s ID token may contain an LIS global user identifier to bind together the LMS’s LTI user account to another source’s user account. It is recommended to scope resource permissions to customer LMS instances or class contexts rather than to individual users in order to avoid the need to verify a user’s account binding to a third party before they can access your tool. It is not recommended to store user data to ensure compliance with CCPA and GDPR, which is why LTI conveniently supplies the current user’s data each time they launch into a tool.
Deep Linking Best Practices
When constructing a Deep Linking response of links that the instructor would like to insert into the LMS, each link (content item) should include an identifier either within its URL as part of the path, as a query parameter, or within a custom parameter field. LTI-certified LMSs are guaranteed to preserve these values upon course copy. When associating a line item (assignment with a grade book column) to a content item link, ensure to include an identifier connecting the line item to the resource link by using either the resource ID or tag fields. However, it should be noted that the resource ID and tag fields for the line item are considered immutable once set.
The guide also recommends including the line item within the Deep Linking response as opposed to using the Assignments & Grades Service to associate the content item to a line item. However, as was hinted at above, this may prove to be a better recommendation in theory than in practice. Every Deep Linking flow provided by the LMSs does not support line item creation, so a tool can easily be left thinking that a line item was created when it sends its Deep Linking response, even though the LMS actually ignored that request altogether.
How can a tool manage situations where the instructor removes an LTI link from their course using the LMS UI instead of the tool’s UI? Since there is currently no way for a tool to query for all of its existing LTI links within a course, the best workaround for this is to associate a line item with each link in the course. Since it is possible for a tool to query for all of its existing line items within a course, this query can then be used as a stand-in for a good approximation of a list of existing LTI links within a course.
Course Copy Best Practices
The recommended way to determine if a course is a copy is to use the context ID history substitution variable, which would enable the LMS to send a comma-delimited list of the context ID history corresponding to each user’s LTI launch. If the list isn’t blank and you can find a match for one of the context IDs in it, then you’ll know which course is the parent to the user’s current course. Additionally, since the resource ID and tag of the line items will still be the same when the course is copied, those fields can also be utilized to pair courses and resource links to their parents. Another strategy can be using the resource link ID history substitution variable, which works similarly to the context ID history substitution variable, except that it provides the history of resource link IDs for parent links to the one clicked by the user.
Assignments & Grades Service Best Practices
LTI does not currently have any mechanism to track or handle multiple submissions. It is recommended that the tool determine its own strategy for handling whether to permit multiple submissions and whether the final score should be an average or the highest score. The tool may choose to add this as a setting in their Deep Linking menu for the instructor to select their preferred final grade calculation for each assignment.
It is recommended for tools to be completely agnostic of all dates related to assignments and grades because all of the types of availability and submission dates are not supported by all of the LMSs, and they are all subject to the instructor changing them in the LMS UI at any time. This presents an unwieldy number of edge cases that the tool must be ready to handle. In the event that a tool’s logic necessitates the use of these dates, the updated values of the data can be provided to the tool when the associated link is launched, if the tool included the relevant substitution variables for them in the Deep Linking response when the assignment was created.
LTI also does not currently support mechanisms for providing accommodations, such as calculators, screen readers, glossaries, translators, or extension timers, for individual assignments. It is recommended that instructors create an additional assignment for each set of accommodations that must be supplied and then use the LMS’s UI to handle making the appropriate assignments available to the correct students.
While the LTI specifications don’t support all use cases as simply as some might hope, the standard has grown quite robust from feedback provided by the community that has been converted into updates to the standard. If you are curious to learn more about how to implement these changes in your application or if you have any more challenging use cases that aren’t covered in this blog, Unicon is happy to help!