Intent
Need to create an interface for enabling Access to Content on Sunbird across different apps like Read Along,Games etc.
Note: Assumption of this specification is based on the apps being able to support these intents as part of their implementation.
Documentation is categorised into multiple sections:
...
WorkFlow
Vendor Registration of Apps to Sunbird
Global Vendor Registration API
Local Vendor Registration by Deep Linking
Technical Specification for third party apps
Param Data Supported
...
Summary Event Spec
API Documentation
Intent Handling
Approaches
Work Flow
...
Registration of External Apps
...
...
...
Local Vendor Registration by Deep Linking
Approaches
...
title | Approach 1 : (Deeper Integration) |
---|
Approach 1 : (Deeper Integration)
...
Targeted Application need to fetch the data from platform. Understand the Content Metadata and play the content.
Targeted Application need to respond back with Summary Data
...
Params
...
Description
...
resourceID
...
Content ID of the resource
...
context
...
Context of the play - like did, sid, uid etc
...
Pros
It can enable bazaar apps to index the content in their own environment.
It could open up the Sunbird APIs for most of the bazaar players.
Cons
Data to be sent might be huge
Spec is rigid. If the spec changes there can be inconsistency between various version of both apps
...
title | Approach 2 : (Lighter Integration) |
---|
Approach 2 : (Lighter Integration)
Intent provides basic information such as content do_id, context information & artifactUrl and mimeType.
Bazaar Apps can launch the artifactUrl directly based on mimeType.
...
Params
...
Description
...
resourceID
...
Content ID of the resource
...
context
...
Context of the play - like did, sid, uid etc
...
mimeType
...
Mime type of the content
...
artifactUrl
...
The URL to download the content
...
Pros
Least Effort in integrating the Intent for bazaar apps.
Need to develop a secure mechanism to serve only sun bird specific resources.
Cons
Data to be sent might be huge
Spec is rigid. If the spec changes there can be inconsistency between various version of both apps
...
title | Approach 3 : (A Hybrid approach between 1 & 2) |
---|
Intent provides the basic information such as content URL, mimeType & user/session context.
...
Params
...
Description
...
resourceID
...
Content ID of the resource
...
context
...
Context of the play - like did, sid, uid etc
...
mimeType
...
Mime type of the content
...
contentUrl
...
The public Sunbird content url or a dial url (https://<domain>/content/v1/read/do_xxxx => https://<domain>/dial/XC40VV)
Pros
The spec doesn’t need to change if more content metadata needs to be sent
The integration apps need to understand our content model and can also index the content in their apps
Context Information
Following are the contextual params passed to the reader app
Device ID
User ID
Session ID
Collection ID
Batch ID
Reference ID
Technical Specification for Third Party Apps
...
title | Params Data Supported |
---|
...
Params
...
Description
...
Data type
...
resourceId
...
identifier of the resource to be served in bazaar apps
...
String
...
collectionId
...
CollectionID of textbook,course
...
String
...
referrerPackageId
...
package details of referrer app
...
String
...
batchId
...
BatchId if it is trackable collection
...
String
...
mimeType
...
Content MimeType
...
String
...
vendorCode
...
Vendor ID to validate the referrer
...
String
...
contentCategory
...
contentCategory
...
String
...
artifactURL
...
Artifact URL to play content
...
String
...
telemetryContext
...
Hashed value of uid, sid
...
String
...
title | Data Sharing Table |
---|
...
Params
...
Approach 1
...
Approach 2
...
Approach 3
...
resourceId
...
Yes
...
Yes
...
collectionId
...
Yes
...
Yes
...
referrerPackageId
...
Yes
...
Yes
...
Yes
...
batchId
...
Yes
...
mimeType
...
Yes
...
vendorCode
...
Yes
...
Yes
...
Yes
...
contentCategory
...
Yes
...
artifactURL
...
Yes
...
contentURL
...
Yes
...
telemetryContext
...
Yes
...
Yes
...
Yes
...
title | Summary EVENT Spec |
---|
...
language | js |
---|
...
Sunbird Third Party App Interaction
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
Vendor registration of
...
All the reader apps need to send summary data back to Sunbird app via intent data.
Expand | |||||||
---|---|---|---|---|---|---|---|
| |||||||
API: https://<domain>/api/data/v1/dial/assemble Request Object:
Response Object:
For More Details Refer Sunbird Documentation |
...
title | Intent Handling |
---|
Intent Handling
...
Need to implement an activity which is capable of calling API and read the content metadata to launch the content in their respective apps. Following is the API request,response structure to be adhered to.
...
Need to create an intent filter in Android Manifest as follows :
Code Block |
---|
<activity
android:name="com.example.ExampleActivity"
android:label="@string/title_example" >
<intent-filter android:label="@string/play_view_web_example">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://sunbird.staginged.in/play” -->
<data android:scheme="https"
android:host="sunbird.staginged.in"
android:pathPrefix="/play" />
</intent-filter>
<intent-filter android:label="@string/play_view_app_example">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://play” -->
<data android:scheme="example"
android:host="play" />
</intent-filter>
</activity> |
...
Code Block |
---|
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
<!-- Trigger the Business Logic of App -->
} |
Vendor registration of Apps to Sunbird
Global Vendor Registration API
Each Vendor can be registered as part of Global Configuration for Sunbird to have app links being enabled.
Code Block |
---|
{
identifier: "",
name: "",
logo: "",
appName: "",
packageId: "",
mimeType : [],
preferredOrgIds : [],
vendorDetails: {
company: {
name: "<name-of-parent-company>",
year: ""
},...
},
vendorCode: "This is assigned by Sunbird as unique key to identify",
createdDate: Date,
updatedDate: Date,
enabled : boolean,
validUpto: Date
} |
Vendor CRUD API (or) Form Configuration Supported.
...
Vendor app needs to call a deep link of Sunbird app.
Sunbird App as part of handling deep link will try to persist vendor information locally on app’s data.
Any subsequent invocation of intent from Sunbird will show globally registered apps for Sunbird along with locally registered apps in devices.
deeplink Url :
diksha://register?name: "", logo: "", appName: "", packageId: "",mimeType:””
...
Parameter
...
DataType
...
Description
...
name (M)
...
String
...
logo (M)
...
String
...
appName (M)
...
String
...
packageId (M)
...
String
...
mimeType (M)
...
Apps to Sunbird
Global Vendor Registration API
Each Vendor can be registered as part of Global Configuration for Sunbird to have app links being enabled.
Code Block | ||
---|---|---|
| ||
{
identifier: "",
name: "",
logo: "",
appName: "",
packageId: "",
target: {
mimeType : [],
contentType : [],
.... // All content attributes
},
appDetails: {
organization: "",
id: "",
version: ""
},
vendorCode: "" // Internally assigned
} |
Vendor CRUD API (or) Form Configuration Supported.
Local Vendor Registration by Deep Linking
Enabling of Deep link in Sunbird for local registration restricted to device.
Device hears for deep links to register vendor apps locally (Restricted to particular device).Steps
Vendor app needs to call a deep link of Sunbird app.
Sunbird App as part of handling deep link will try to persist vendor information locally on app’s data.
Any subsequent invocation of intent from Sunbird will show globally registered apps for Sunbird along with locally registered apps in devices.
deeplink Url :
sunbird://register?name: "", logo: "", appName: "", packageId: "",target:”{}”,appDetails:”{}”
Parameter | DataType | Description |
---|---|---|
name (M) | String | Name of the vendor |
logo (M) | String | App logo Url |
appName (M) | String | App Name |
packageId (M) | String | PackageID of the app |
target (M) | String | Targeted content query |
appDetails (O) | String | App details |
extra (O) | String | Misceallaneous Information to be sent |
Approaches
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
Approach 1 : (Deeper Integration)
Targeted Application need to fetch the data from platform. Understand the Content Metadata and play the content. Targeted Application need to respond back with Summary Data
Pros It can enable bazaar apps to index the content in their own environment. It could open up the Sunbird APIs for most of the bazaar players. Cons Data to be sent might be huge Spec is rigid. If the spec changes there can be inconsistency between various version of both apps |
Expand | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Approach 2 : (Lighter Integration)Intent provides basic information such as content do_id, context information & artifactUrl and mimeType. Bazaar Apps can launch the artifactUrl directly based on mimeType.
Pros Need to develop a secure mechanism to serve only sun bird specific resources. Cons Data to be sent might be huge Spec is rigid. If the spec changes there can be inconsistency between various version of both apps |
Expand | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Intent provides the basic information such as content URL, mimeType & user/session context.
Pros
Context Information Following are the contextual params passed to the reader app
|
Technical Specification for Third Party Apps
Expand | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||
|
Expand | |||||
---|---|---|---|---|---|
| |||||
https://github.com/sunbird-specs/Telemetry/blob/main/v3_event_details.md/#summary
All the reader apps need to send summary data back to Sunbird app via intent data. |
Expand | |||||||
---|---|---|---|---|---|---|---|
| |||||||
The third party apps should do a HTTP GET call on the contentUrl parameter sent via the intent data
Response Data Structure
For More Details on the content model refer Sunbird Documentation |
Expand | ||||
---|---|---|---|---|
| ||||
Intent Handling
|