Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/DEVELOPER/authentication/on-device-authentication.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ To check for a valid access token in the device registry, follow these steps:
...
end if

'check if access token stored in Roku cloud has specifed value
'check if access token stored in Roku cloud has specified value
response = myChannelStore.storeChannelCredDataStatus.response
if response.json.channel_data = myChannelStore.channelCredData
...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ If both the device registry and Roku cloud do not contain a valid access token,
' ...
end if

'check if access token stored in Roku cloud has specifed value
'check if access token stored in Roku cloud has specified value
response = myChannelStore.storeChannelCredDataStatus.response
if response.json.channel_data = myChannelStore.channelCredData
' ...
Expand All @@ -168,4 +168,4 @@ Roku does not recommend any one approach to addressing sign out situations, and

## Testing Automatic Account Link

You can test Automatic Account Link by sideloading your app and using the [billing test feature in the Developer Dashboard](doc:billing-testing).
You can test Automatic Account Link by sideloading your app and using the [billing test feature in the Developer Dashboard](doc:billing-testing).
2 changes: 1 addition & 1 deletion docs/DEVELOPER/dev-tools/app-tracing.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ The following examples demonstrate some of the use cases for querying your trace

Roku's Perfetto-based app tracing solution exposes a number of terms that Roku developers may be unfamiliar with:

| Term | Defintion |
| Term | Definition |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| SdkLauncher | A Roku OS plugin that provides an environment for running SDK apps in a sandboxed process. |
| PR_ui | The main BrightScript thread. |
Expand Down
2 changes: 1 addition & 1 deletion docs/DEVELOPER/dev-tools/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Describes each SceneGraph component, defines the relationship between nodes, and

## Development Application Installer

Every Roku device can be configured to support developer tasks such as installing apps, packaging apps, and creating your app's screenshots. The Developmemnt Application Installer enables installing or "sideloading" an app to a Roku device to test and QA before submitting for publication.
Every Roku device can be configured to support developer tasks such as installing apps, packaging apps, and creating your app's screenshots. The Development Application Installer enables installing or "sideloading" an app to a Roku device to test and QA before submitting for publication.

![roku815px - developersettings](https://image.roku.com/ZHZscHItMTc2/developersettings.png "developersettings")

Expand Down
2 changes: 1 addition & 1 deletion docs/DEVELOPER/discovery/instant-signup.md
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,7 @@ Apps can leverage the [ChannelStore](doc:channelstore) APIs and [Roku Pay web se
...
end if

'check if access token stored in Roku cloud has specifed value
'check if access token stored in Roku cloud has specified value
response = myChannelStore.storeChannelCredDataStatus.response
if response.json.channel_data = myChannelStore.channelCredData
...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ Exit codes do not persist across system reboots and system resumptions. The last
| EXIT_CHANNEL_SIDELOAD | The app was exited due to the user installing a sideloaded app. |
| EXIT_CHANNEL_RESTART | The app was exited due to an app-initiated restart. This is typically a reserved function in the system. |
| EXIT_TILE_HIDDEN | The app was exited due to the user hiding the Soundbar tile on a Roku TV. |
| EXIT_SETTINGS_UPDATE | The app was exited by the system due to a device settings update (for exampe, a theme or resolution change that required restart). |
| EXIT_SETTINGS_UPDATE | The app was exited by the system due to a device settings update (for example, a theme or resolution change that required restart). |
| EXIT_CHANNEL_MEM_LIMIT_FG | The app was exited by the system because it exceeded its memory limit while running in the foreground. |
| EXIT_CHANNEL_MEM_LIMIT_BG | The app was exited by the system because it exceeded its memory limit while running in the background. |
| EXIT_ADDON_DEPENDENCY | The app was exited by the system while applying a system dependency update. This should only apply while running in the background. |
Expand Down
4 changes: 2 additions & 2 deletions docs/DEVELOPER/media-playback/voice-controls/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ With voice controls, your app can respond to the following types of voice comman
For more information on handling basic and enhanced voice controls, see [Implementing voice controls](doc:transport-controls).


> Apps that have streamed more than an average of 5 million hours per month over the last three months must implement all basic, enhanced, and additonal enhanced voice controls to pass [certification](doc:certification). This is also applicable to new apps projected to reach the specified streaming hours threshold shortly after launch.
> Apps that have streamed more than an average of 5 million hours per month over the last three months must implement all basic, enhanced, and additional enhanced voice controls to pass [certification](doc:certification). This is also applicable to new apps projected to reach the specified streaming hours threshold shortly after launch.

## Profile selection

Apps with a profile selection screen can also audibly and visually prompt the viewer to select a user profile and then handle a voice request with the name or position of the selected profile. For more information, see [Selecting user profiles with Roku Voice](doc:voice-profile-selector).
Apps with a profile selection screen can also audibly and visually prompt the viewer to select a user profile and then handle a voice request with the name or position of the selected profile. For more information, see [Selecting user profiles with Roku Voice](doc:voice-profile-selector).
6 changes: 3 additions & 3 deletions docs/DEVELOPER/performance-guide/data-transfer-apis.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ print my_aa ' contents of aa_field

## Accessing fields by reference

You can access fields by reference instead of copying their values. This is significantly faster than copying; however, you can only do this on the render thread for fields with an associative array type. Access by reference cannot be used when queuing fields, and you must explicity set references before getting them.
You can access fields by reference instead of copying their values. This is significantly faster than copying; however, you can only do this on the render thread for fields with an associative array type. Access by reference cannot be used when queuing fields, and you must explicitly set references before getting them.

> **Function references**
>
Expand Down Expand Up @@ -167,7 +167,7 @@ This function returns true if successful; otherwise it return false, indicating

#### Description

Indicates whether the **GetRef()** function will succeed in the current context. The **GetRef()** call will only succeed if is called on the render thread and the **SetRef()** function had previoulsy been called on the **field_name**.
Indicates whether the **GetRef()** function will succeed in the current context. The **GetRef()** call will only succeed if is called on the render thread and the **SetRef()** function had previously been called on the **field_name**.

The specified **field_name** must be an associative array, and it must have previously been given a value via **SetRef()**.

Expand Down Expand Up @@ -235,7 +235,7 @@ The **roUtils** component provides a unique namespace for a library of global fu

#### Description

Performs a deep copy of the source node object (it copies the obejct and all of its nested objects). If the source object contains items that are not copyable, they are skipped.
Performs a deep copy of the source node object (it copies the object and all of its nested objects). If the source object contains items that are not copyable, they are skipped.

#### Parameters

Expand Down
2 changes: 1 addition & 1 deletion docs/DEVELOPER/publishing/channel-publishing-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ Configure how your app is listed in the Streaming Store, including the app's hom
Domestic region
</td>
<td>
Select the country where your app is considered native and/or domestic. Your app will be displayed in the "International" category of all regional Streming Stores that include your app and are outside your domestic region.
Select the country where your app is considered native and/or domestic. Your app will be displayed in the "International" category of all regional Streaming Stores that include your app and are outside your domestic region.
</td>
</tr>
<tr>
Expand Down
6 changes: 3 additions & 3 deletions docs/DEVELOPER/release-notes/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
The roUtils component includes new *isNumber()*, *isString()*, and *isFloatingPoint()* functions that check whether a given value is any kind of number or string (boxed or unboxed).

**Example**
```

Check failure on line 66 in docs/DEVELOPER/release-notes/index.md

View workflow job for this annotation

GitHub Actions / Lint changed docs

docs-lint

[brightscript-fence-required] bare ``` fence with BrightScript content; tag it as ```brightscript (CreateObject("ro..."), CreateObject assignment)
utils = CreateObject("roUtils")
? utils.isNumber(42) ' true
? utils.isNumber(box(3.14)) ' true
Expand All @@ -79,7 +79,7 @@

**Example**

```

Check failure on line 82 in docs/DEVELOPER/release-notes/index.md

View workflow job for this annotation

GitHub Actions / Lint changed docs

docs-lint

[brightscript-fence-required] bare ``` fence with BrightScript content; tag it as ```brightscript (endfor, for each ... in)
conventions = {"2026": "Los Angeles", "2027": "Chicago", "2028": "New York", "2029": "Miami", "2030", "Seattle"}
CityLabel.Text = conventions.values().join(", ")
for each city in conventions.values()
Expand Down Expand Up @@ -116,7 +116,7 @@

**Example**

```

Check failure on line 119 in docs/DEVELOPER/release-notes/index.md

View workflow job for this annotation

GitHub Actions / Lint changed docs

docs-lint

[brightscript-fence-required] bare ``` fence with BrightScript content; tag it as ```brightscript (CreateObject("ro..."), BRS comment ', CreateObject assignment)
' Create and load an animated image
animg = CreateObject("roAnimatedImage")
animg.SetContent({uri: "pkg:/images/spinner.json", mimeType: "video/lottie+json"})
Expand Down Expand Up @@ -1658,7 +1658,7 @@

* Developer controlled HLS stream switching strategies for improved playback ability.
* Multiple Grid layouts: flat-movie, flat-portrait, flat-landscape, flat-square, and flat-16x9
* Developer customized Grid Focused Border image, and Grid Descripton callout box image.
* Developer customized Grid Focused Border image, and Grid Description callout box image.
* Use .png and .gif images as Grid posters.
* Ability to get the Roku's IPAddress within your app. This will enable the External Control API to be utilized directly within your app.

Expand Down Expand Up @@ -1706,7 +1706,7 @@

If any of your BrightScript code is enabling certain features based on model number, we have a new roDeviceInfo.HasFeature() method that will enable you to code this logic in a more forward-looking manner.If you don't account for the new "Back" and "Info" buttons in your code, users may think your app does not behave correctly.

On most screens, the back button will automatically send an event that matches the isScreenClosed() predicate. However, this behavior would break many modal dialogs that do not expect to receive an isScreenClosed()event because they are waiting for a state change or reacting to user input that must be answered. We chose not to break these apps and instead did not enable the back button by default on the roMessageDialog component. We did provide a method to enable the back button on roMessageDialogs that can successfully handle an isScreenClosed() event. You should survey your app for any roMessageDialog components that should enable the back button with EnableBackButton(true). The "Info" button will enable you to pop-up any screen of your choosing. There are two new events added to support this new button. Events matching isButtonInfo()return the button focus of any on screen buttons in when the Info remote key is pressed. Events matching isListItemInfo()return the index of the focused poster when the Info remote key is pressed. The simpleinfo sample application shows basic support for the "Info" button that also demonstrates an overlay dialog on a poster screen. When isRemoteKey()events are propogated to your script, the event.GetIndex() for the Info key is 10.
On most screens, the back button will automatically send an event that matches the isScreenClosed() predicate. However, this behavior would break many modal dialogs that do not expect to receive an isScreenClosed()event because they are waiting for a state change or reacting to user input that must be answered. We chose not to break these apps and instead did not enable the back button by default on the roMessageDialog component. We did provide a method to enable the back button on roMessageDialogs that can successfully handle an isScreenClosed() event. You should survey your app for any roMessageDialog components that should enable the back button with EnableBackButton(true). The "Info" button will enable you to pop-up any screen of your choosing. There are two new events added to support this new button. Events matching isButtonInfo()return the button focus of any on screen buttons in when the Info remote key is pressed. Events matching isListItemInfo()return the index of the focused poster when the Info remote key is pressed. The simpleinfo sample application shows basic support for the "Info" button that also demonstrates an overlay dialog on a poster screen. When isRemoteKey()events are propagated to your script, the event.GetIndex() for the Info key is 10.

## Roku OS 2.6

Expand Down Expand Up @@ -1793,4 +1793,4 @@

There are lots of other changes in this release and these are just some highlights that we wanted to specifically mention. Please check the documentation for additional details.

<br />
<br />
2 changes: 1 addition & 1 deletion docs/DEVELOPER/roku-pay/implementation/channel-store-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ When this command is executed, a Request for Information (RFI) screen is display

The [**doOrder** command](doc:channelstore#doorder) completes the transaction for the customer's purchase.

When this command is executed, the Roku Pay order confirmation screen is displayed. This publisher-branded screen summarizes the product being purchased, including the price, product name, and any trial period/discount. It enables the customer to confirm their purchase and update their method of payment if neccessary.
When this command is executed, the Roku Pay order confirmation screen is displayed. This publisher-branded screen summarizes the product being purchased, including the price, product name, and any trial period/discount. It enables the customer to confirm their purchase and update their method of payment if necessary.

![roku815px - img](https://image.roku.com/ZHZscHItMTc2/rsg-channelstore-doorder.jpg)

Expand Down
4 changes: 2 additions & 2 deletions docs/DEVELOPER/roku-pay/implementation/push-notifications.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ Roku Pay sends push notifications for the following transactions:
[Cancellation](#cancellation)
</td>
<td>
A subscription is canceled by the customer, deactivated becuase the customer opted out of automatic renewal, or is passively canceled because payment could not be recovered.<br /><br />Active cancellations: The **expirationDate** field is set to the current or future date<br /><br />Deactivations: The **expirationDate** field is set to the decactivation date<br /><br />Passive cancellations: The **expirationDate** field is set to a past date.
A subscription is canceled by the customer, deactivated becuase the customer opted out of automatic renewal, or is passively canceled because payment could not be recovered.<br /><br />Active cancellations: The **expirationDate** field is set to the current or future date<br /><br />Deactivations: The **expirationDate** field is set to the deactivation date<br /><br />Passive cancellations: The **expirationDate** field is set to a past date.
</td>
<td>
* expirationDate is a future date: no action is required until the expiration date.
Expand Down Expand Up @@ -523,7 +523,7 @@ The publisher action required (if any) depends on the **expirationDate** field:
* **Today's date**: Remove the entitlement (the customer actively canceled the subscription and today is the last day of the billing cycle).
* **Past date**: Remove entitlement (passive cancellation; the subscription could not be recovered).

#### Active cancelation/decativation example
#### Active cancelation/deactivation example

```json
{
Expand Down
6 changes: 3 additions & 3 deletions docs/DEVELOPER/roku-pay/quickstart/product-catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ To create a purchase option for a product, follow these steps:
<tbody>
<tr>
<td>Billing frequency</td>
<td>Select the billing period to be used for the subscription product: <strong>monthly</strong>, <strong>quarterly</strong>, or <strong>annual</strong>. Using quartely billing requires [additional API work](doc:add-ons-integration#appendix-a-add-on-api-reference).</td>
<td>Select the billing period to be used for the subscription product: <strong>monthly</strong>, <strong>quarterly</strong>, or <strong>annual</strong>. Using quarterly billing requires [additional API work](doc:add-ons-integration#appendix-a-add-on-api-reference).</td>
</tr>
<tr>
<td>Regular price</td>
Expand Down Expand Up @@ -254,7 +254,7 @@ Each set of _mutually exclusive_ subscription products must be added to a produc

* **Double billing**. If an app has two in-app products for the same monthly subscription but with different free trial durations, these two products must be added to the same product group to prevent the customer from paying for two separate monthly subscriptions.

From the customer's perspective, if they try to purchase a subscription product when they already have one in the same product group, Roky Pay displays a "You're already subscribed to this channel" dialog.
From the customer's perspective, if they try to purchase a subscription product when they already have one in the same product group, Roku Pay displays a "You're already subscribed to this channel" dialog.

![roku815px - already-subscribed](https://image.roku.com/ZHZscHItMTc2/already-subscribed.jpg)

Expand Down Expand Up @@ -372,7 +372,7 @@ Before you archive a purchase option, notify existing subscribers that their sub

You can create limited-time offers to provide customers with a free trial or introductory pricing for a specific period of time (for example, a New Year's promotion for the first two weeks of January). When a new customer subscribes to a product during an active limited-time offer, the customer receives that offer (a limited-time offer takes precedence over the base offer). If no limited-time offer is active, the customer receives the base offer. Customers may only ever receive a single free trial or discount offer for a subscription product, and they may only receive an offer that was made and accepted.

To create a lmited-time offer, follow these steps:
To create a limited-time offer, follow these steps:

1. From the **Purchase options** tab, click the action button for the purchase option, and then click **Add a limited-time offer** on the shortcut menu. Alternatively, click the purchase option row to open the purchase option's details page, and then click **Add limited-time offer** under the **Billing plan** section.

Expand Down
Loading
Loading