I am trying to integrate an external app with Canvas via LTI. I was able to quickly use LTI to handle teacher assignment creation and student assignment launches. However, I'm stumped on how a teacher could launch my external app in order to view a particular assignment/student submission. The closest I've come is passing my LTI URL back to the outcomes URL (via 'ltiLaunchUrl') when a student completes an assignment. This prompts the Speed Grader to launch an LTI request to my app when a student session is selected. However, this LTI request does not contain the student id, assignment ID or the 'lis_result_sourcedid', so my app is unable to determine which student is being graded.
Am I just looking in the wrong place? Is there some way to get Canvas to launch my external app so that an educator can review a particular student assignment submission? Any feedback much appreciated!
@adamrabung I don't have an exact solution for you.
I have developed a custom grading LTI app to assist with grading on a tablet.
It runs independently from the Canvas gradebook, and feeds the grades back to the Canvas gradebook.
The app scrolls through assignments / students allowing the instructor to quickly find what they are looking for.
With your app launched, would it be acceptable to have the instructor select the assignment / student of interest from within your LTI app? One advantage of this is the instructor could review/grade all students for the assignment without having to relaunch your LTI for every submission.
I'd be interested to learn more about what you're doing, please post the solution you end up with.
Hi Adam --
I think the idea is that your tool would pass a user/assignment-specific launch URL back to the LMS when the student completes the assignment; Canvas will associate that with the submission and when the instructor is grading that submission in SpeedGrader it will launch that specific URL.
Hopefully that makes sense!
I could do that, but the URL I provided would need to be authenticated. It seems like I would have to re-invent LTI in order to form this custom GET url, right? I don't think I can correctly generate some of those OAuth fields w/o Canvas private key.
If the 'ltiLaunchUrl' could include 'lis_result_sourcedid' for the session being graded, I could uniquely identify which session is being graded in the "SpeedGrader", all while re-using LTI/OAuth security provisions.
If you have passed the URL back as a Canvas "LTI Launch URL"
Then in the SpeedGrader the URL will be launched as an LTI tool - so its done as a POST with all the OAuth stuff.
If you add the identifier (userid, lis_result_sourcedid, etc.) you need to the end of your tool's URL as a query string it is still launched with a POST, not a GET. Eg.,
is still POSTed to.
If you want to see an example of this working, the test tool provider at
https://lti.netkno.nz/tp supports the Canvas outcomes extensions. It will show you the launch parameters it receives by type (required, recommended, etc.) and the outcomes XML sent/received.
You can use the consumer key / secret combination: myschool.edu / letmein