{"_id":"5966171741509d00158116b9","project":"574ff4bd3fa1870e00889ba6","version":{"_id":"574ff4bd3fa1870e00889ba9","project":"574ff4bd3fa1870e00889ba6","__v":25,"createdAt":"2016-06-02T08:56:29.492Z","releaseDate":"2016-06-02T08:56:29.492Z","categories":["574ff4bd3fa1870e00889baa","577278ecdceb570e003a9001","577279865617b117009e643f","577279985617b117009e6440","577279bc8c48e00e00503504","5774fe18605b770e0037be8a","577ce3ad87acf617003c4187","577f8476a77c700e006a6c52","57b486ae0d2b640e00e9d3f5","57b722133d3e620e004ec74b","57bd95f00fe3a00e003e2cc5","57c8349359cd4b0e00b888ef","57c8349b5754fa1700b12242","57cedb0bad483e0e00890239","57cedbe807d7ea0e00e438cc","57d82967156ef72b007ffcd8","58ee353ad1ee2f0f0034a13d","596623221738df00298622a5","59a51730192dba000fc9ca38","59a8129f1e7b26000fa0fb1a","5a0322bf044b6f001c236e36","5a79897c5b6e430030746df6","5a79898c2b2d5f0012cbab63","5ab3b5e3d2d1e2006252a8f2","5b1a43bd678eab0003aa54a4"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"3.0.0","version":"3.0"},"category":{"_id":"57b486ae0d2b640e00e9d3f5","__v":0,"project":"574ff4bd3fa1870e00889ba6","version":"574ff4bd3fa1870e00889ba9","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2016-08-17T15:45:50.062Z","from_sync":false,"order":7,"slug":"native-ads-mediation-layer","title":"Android SDK"},"user":"5770fa1ce5a0000e0023c680","__v":2,"parentDoc":null,"updates":["5971f0bab5c232001bcc1fbf","597f1b8b81a71f0014606191"],"next":{"pages":[],"description":""},"createdAt":"2017-07-12T12:33:27.387Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":true,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":17,"body":"This guide is intended for publishers who are interested in serving:\n\n* Native Ads\n* Banner Ads\n* MRect Ads\n* Fullscreen Interstitials\n\nfrom PubNative using the MoPub mediation network. This document will include help the setting up of the mediation adapter with your Android application and setting up any additional request parameters.\n[block:api-header]\n{\n  \"title\": \"Requirements\"\n}\n[/block]\n* MoPub Android SDK\n* PubNative MoPub Android Adapter\n* An App Token obtained from PubNative Dashboard\n* A Placement Name configured and obtained from the PubNative Dashboard\n\n**Note:** At the moment, this adapter project is supporting the versions down below:\n* **Pubnative SDK:** 2.0.11\n* **MoPub:** 4.16.1\n* **Android:** Min API level 15.\n[block:api-header]\n{\n  \"title\": \"Install MoPub Android SDK\"\n}\n[/block]\n[Download](https://github.com/mopub/mopub-android-sdk) and install the MoPub Android SDK as described in the [MoPub Wiki](https://github.com/mopub/mopub-android-sdk/wiki/Getting-Started#download-the-mopub-android-sdk).\n\n**Note:** If you plan to use Native Ads, please implement MoPub Native in your project.\n[block:api-header]\n{\n  \"title\": \"Install PubNative MoPub Android Adapter\"\n}\n[/block]\n## Gradle\n\nThe PubNative Admob Adapter is available via jCenter. To add the sdk dependency, open your project's build.gradle and update the repositories and dependencies blocks as follows:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"repositories {\\n    // ... other project repositories\\n    jcenter()\\n}\\n\\n// ...\\n\\ndependencies {\\n    // ... other project dependencies\\n    compile 'net.pubnative:adapters.mopub:4.16.1-2.0.11'\\n}\",\n      \"language\": \"groovy\"\n    }\n  ]\n}\n[/block]\nThe adapter library includes the Pubnative Android SDK. So there's no need to import it as an extra step.\n\n## Proguard\n\nIf you are using **Proguard** for you Android builds then you should add the following lines to your **proguard** file:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"-keepattributes Signature\\n-keep class net.pubnative.** { *; }\",\n      \"language\": \"text\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Configuring a Custom Event\"\n}\n[/block]\nPubNative MoPub Android Adapter supports the following ad formats:\n\n  * [Native](http://developers.pubnative.net/v3.0/docs/mopub-adapter#adding-a-custom-event-for-mediation-of-native)\n  * [Banner](http://developers.pubnative.net/v3.0/docs/mopub-adapter#adding-a-custom-event-for-mediation-of-banners)\n  * [Mrect](http://developers.pubnative.net/docs/mopub-adapter#adding-a-custom-event-for-mediation-of-mrect) \n  * [Interstitial](http://developers.pubnative.net/v3.0/docs/mopub-adapter#adding-a-custom-event-for-mediation-of-interstitia)\n[block:api-header]\n{\n  \"title\": \"Adding a Custom Event for mediation of Native\"\n}\n[/block]\n1.\tLog into your MoPub account\n\n2.\tNavigate to the **Networks** tab and click **Add a Network**\n           \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/42064a8-Netwokr.png\",\n        \"Netwokr.png\",\n        682,\n        162,\n        \"#2e2f36\"\n      ]\n    }\n  ]\n}\n[/block]\n3.\tUnder **Additional Networks**, click **Custom Native Network** *(for mediation of Native format)*:\n           \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/347f8af-native.png\",\n        \"native.png\",\n        689,\n        721,\n        \"#315e82\"\n      ]\n    }\n  ]\n}\n[/block]\n4.\tUnder **Setup Custom Native Network**, fill in **‘PubNative’** in the **Title** field\n          \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/1e2e802-custom.png\",\n        \"custom.png\",\n        767,\n        170,\n        \"#ddd9d7\"\n      ]\n    }\n  ]\n}\n[/block]\n5.\tUnder the **Set Up your Inventory**, select the ad units where you want to show PubNative native ads, and fill in the appropriate class name under the **Custom Event Class** and app token ID with placement name under **Custom Event Class Data**\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"net.pubnative.sdk.adapters.mopub.PNNativeAdapter\",\n      \"language\": \"java\",\n      \"name\": \"Custom Event Class\"\n    }\n  ]\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\\"app_token\\\":\\\"YOUR-APP-TOKEN-ID\\\", \\\"placement\\\":\\\"YOUR-PLACEMENT-NAME\\\"}\",\n      \"language\": \"json\",\n      \"name\": \"Custom Event Class Data\"\n    }\n  ]\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/f4654c2-Native.png\",\n        \"Native.png\",\n        808,\n        314,\n        \"#f2f2f1\"\n      ]\n    }\n  ]\n}\n[/block]\n6.\tClick **Save and Continue **\n \n\n7.\tClick the **PubNative** network and make sure the **Run** button is active\n\n \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/4e7abd0-activate.png\",\n        \"activate.png\",\n        318,\n        148,\n        \"#f0f6f6\"\n      ]\n    }\n  ]\n}\n[/block]\n8.\tTesting Your Application: with the above steps, you can start receiving PubNative ads through the MoPub Dashboard\n\n[block:api-header]\n{\n  \"title\": \"Adding a Custom Event for mediation of Banners\"\n}\n[/block]\n1.\tLog into your MoPub account\n\n2.\tNavigate to the **Networks** tab and click **Add a Network**\n\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/454a609-Netwokr.png\",\n        \"Netwokr.png\",\n        682,\n        162,\n        \"#2e2f36\"\n      ]\n    }\n  ]\n}\n[/block]\n3.\tUnder **Additional Networks**, click **Custom Native Network** *(for mediation of Banner  format)*:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/adb1685-native.png\",\n        \"native.png\",\n        689,\n        721,\n        \"#315e82\"\n      ]\n    }\n  ]\n}\n[/block]\n4.\tUnder **Setup Custom Native Network**, fill in **‘PubNative’** in the **Title** field\n\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/29f0811-custom.png\",\n        \"custom.png\",\n        767,\n        170,\n        \"#ddd9d7\"\n      ]\n    }\n  ]\n}\n[/block]\n5.\tUnder the **Set Up your Inventory**, select the ad units where you want to show PubNative banner ads, and fill in the appropriate class name under the **Custom Event Class** and app token ID with placement name under **Custom Event Class Data**\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"net.pubnative.sdk.adapters.mopub.PNBannerAdapter\",\n      \"language\": \"java\",\n      \"name\": \"Custom Event Class\"\n    }\n  ]\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\\"app_token\\\":\\\"YOUR-APP-TOKEN-ID\\\", \\\"placement\\\":\\\"YOUR-PLACEMENT-NAME\\\"}\",\n      \"language\": \"json\",\n      \"name\": \"Custom Event Class Data\"\n    }\n  ]\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/6c05b29-Banner.png\",\n        \"Banner.png\",\n        823,\n        311,\n        \"#f1f1f0\"\n      ]\n    }\n  ]\n}\n[/block]\n6.\tClick **Save and Continue **\n \n\n7.\tClick the **PubNative** network and make sure the **Run** button is active\n\n \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/f1eb35e-activate.png\",\n        \"activate.png\",\n        318,\n        148,\n        \"#f0f6f6\"\n      ]\n    }\n  ]\n}\n[/block]\n8.\tTesting Your Application: with the above steps, you can start receiving PubNative ads through the MoPub Dashboard\n\n[block:api-header]\n{\n  \"title\": \"Adding a Custom Event for mediation of MRect\"\n}\n[/block]\nSame procedure as for Banners. The only difference is that you need to configure it for Medium placements and use relevant Custom Event Class.\n\nUnder the Set Up your Inventory, select the ad units where you want to show PubNative MRect ads, and fill in the appropriate class name under the Custom Event Class and app token ID with placement name under Custom Event Class Data.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"net.pubnative.sdk.adapters.mopub.PNMrectBannerAdapter\",\n      \"language\": \"java\",\n      \"name\": \"Custom Event Class\"\n    }\n  ]\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\\"app_token\\\":\\\"YOUR-APP-TOKEN-ID\\\", \\\"placement\\\":\\\"YOUR-PLACEMENT-NAME\\\"}\",\n      \"language\": \"json\",\n      \"name\": \"Custom Event Class Data\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Adding a Custom Event for mediation of Interstitials\"\n}\n[/block]\n1.\tLog into your MoPub account\n\n2.\tNavigate to the **Networks** tab and click **Add a Network**\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/527b47e-Netwokr.png\",\n        \"Netwokr.png\",\n        682,\n        162,\n        \"#2e2f36\"\n      ]\n    }\n  ]\n}\n[/block]\n3.\tUnder **Additional Networks**, click **Custom Native Network** *(for mediation of Interstitial format)*:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/1f1331a-native.png\",\n        \"native.png\",\n        689,\n        721,\n        \"#315e82\"\n      ]\n    }\n  ]\n}\n[/block]\n4.\tUnder **Setup Custom Native Network**, fill in **‘PubNative’** in the **Title** field\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/df2bdc7-custom.png\",\n        \"custom.png\",\n        767,\n        170,\n        \"#ddd9d7\"\n      ]\n    }\n  ]\n}\n[/block]\n5.\tUnder the **Set Up your Inventory**, select the ad units where you want to show PubNative fullscreen ads, and fill in the appropriate class name under the **Custom Event Class** and app token ID with placement name under **Custom Event Class Data**\n\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"net.pubnative.sdk.adapters.mopub.PNInterstitialAdapter\",\n      \"language\": \"java\",\n      \"name\": \"Custom Event Class\"\n    }\n  ]\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\\"app_token\\\":\\\"YOUR-APP-TOKEN-ID\\\", \\\"placement\\\":\\\"YOUR-PLACEMENT-NAME\\\"}\",\n      \"language\": \"json\",\n      \"name\": \"Custom Event Class Data\"\n    }\n  ]\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/ea8a40d-Interstitial.png\",\n        \"Interstitial.png\",\n        802,\n        280,\n        \"#f1f2f1\"\n      ]\n    }\n  ]\n}\n[/block]\n6.\tClick **Save and Continue **\n \n\n7.\tClick the **PubNative** network and make sure the **Run** button is active\n\n \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/37f4e6e-activate.png\",\n        \"activate.png\",\n        318,\n        148,\n        \"#f0f6f6\"\n      ]\n    }\n  ]\n}\n[/block]\n8.\tTesting Your Application: with the above steps, you can start receiving PubNative ads through the MoPub Dashboard","excerpt":"","slug":"mopub-adapter","type":"basic","title":"MoPub Adapter Android"}

MoPub Adapter Android


This guide is intended for publishers who are interested in serving: * Native Ads * Banner Ads * MRect Ads * Fullscreen Interstitials from PubNative using the MoPub mediation network. This document will include help the setting up of the mediation adapter with your Android application and setting up any additional request parameters. [block:api-header] { "title": "Requirements" } [/block] * MoPub Android SDK * PubNative MoPub Android Adapter * An App Token obtained from PubNative Dashboard * A Placement Name configured and obtained from the PubNative Dashboard **Note:** At the moment, this adapter project is supporting the versions down below: * **Pubnative SDK:** 2.0.11 * **MoPub:** 4.16.1 * **Android:** Min API level 15. [block:api-header] { "title": "Install MoPub Android SDK" } [/block] [Download](https://github.com/mopub/mopub-android-sdk) and install the MoPub Android SDK as described in the [MoPub Wiki](https://github.com/mopub/mopub-android-sdk/wiki/Getting-Started#download-the-mopub-android-sdk). **Note:** If you plan to use Native Ads, please implement MoPub Native in your project. [block:api-header] { "title": "Install PubNative MoPub Android Adapter" } [/block] ## Gradle The PubNative Admob Adapter is available via jCenter. To add the sdk dependency, open your project's build.gradle and update the repositories and dependencies blocks as follows: [block:code] { "codes": [ { "code": "repositories {\n // ... other project repositories\n jcenter()\n}\n\n// ...\n\ndependencies {\n // ... other project dependencies\n compile 'net.pubnative:adapters.mopub:4.16.1-2.0.11'\n}", "language": "groovy" } ] } [/block] The adapter library includes the Pubnative Android SDK. So there's no need to import it as an extra step. ## Proguard If you are using **Proguard** for you Android builds then you should add the following lines to your **proguard** file: [block:code] { "codes": [ { "code": "-keepattributes Signature\n-keep class net.pubnative.** { *; }", "language": "text" } ] } [/block] [block:api-header] { "title": "Configuring a Custom Event" } [/block] PubNative MoPub Android Adapter supports the following ad formats: * [Native](http://developers.pubnative.net/v3.0/docs/mopub-adapter#adding-a-custom-event-for-mediation-of-native) * [Banner](http://developers.pubnative.net/v3.0/docs/mopub-adapter#adding-a-custom-event-for-mediation-of-banners) * [Mrect](http://developers.pubnative.net/docs/mopub-adapter#adding-a-custom-event-for-mediation-of-mrect) * [Interstitial](http://developers.pubnative.net/v3.0/docs/mopub-adapter#adding-a-custom-event-for-mediation-of-interstitia) [block:api-header] { "title": "Adding a Custom Event for mediation of Native" } [/block] 1. Log into your MoPub account 2. Navigate to the **Networks** tab and click **Add a Network** [block:image] { "images": [ { "image": [ "https://files.readme.io/42064a8-Netwokr.png", "Netwokr.png", 682, 162, "#2e2f36" ] } ] } [/block] 3. Under **Additional Networks**, click **Custom Native Network** *(for mediation of Native format)*: [block:image] { "images": [ { "image": [ "https://files.readme.io/347f8af-native.png", "native.png", 689, 721, "#315e82" ] } ] } [/block] 4. Under **Setup Custom Native Network**, fill in **‘PubNative’** in the **Title** field [block:image] { "images": [ { "image": [ "https://files.readme.io/1e2e802-custom.png", "custom.png", 767, 170, "#ddd9d7" ] } ] } [/block] 5. Under the **Set Up your Inventory**, select the ad units where you want to show PubNative native ads, and fill in the appropriate class name under the **Custom Event Class** and app token ID with placement name under **Custom Event Class Data** [block:code] { "codes": [ { "code": "net.pubnative.sdk.adapters.mopub.PNNativeAdapter", "language": "java", "name": "Custom Event Class" } ] } [/block] [block:code] { "codes": [ { "code": "{\"app_token\":\"YOUR-APP-TOKEN-ID\", \"placement\":\"YOUR-PLACEMENT-NAME\"}", "language": "json", "name": "Custom Event Class Data" } ] } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/f4654c2-Native.png", "Native.png", 808, 314, "#f2f2f1" ] } ] } [/block] 6. Click **Save and Continue **   7. Click the **PubNative** network and make sure the **Run** button is active [block:image] { "images": [ { "image": [ "https://files.readme.io/4e7abd0-activate.png", "activate.png", 318, 148, "#f0f6f6" ] } ] } [/block] 8. Testing Your Application: with the above steps, you can start receiving PubNative ads through the MoPub Dashboard [block:api-header] { "title": "Adding a Custom Event for mediation of Banners" } [/block] 1. Log into your MoPub account 2. Navigate to the **Networks** tab and click **Add a Network** [block:image] { "images": [ { "image": [ "https://files.readme.io/454a609-Netwokr.png", "Netwokr.png", 682, 162, "#2e2f36" ] } ] } [/block] 3. Under **Additional Networks**, click **Custom Native Network** *(for mediation of Banner format)*: [block:image] { "images": [ { "image": [ "https://files.readme.io/adb1685-native.png", "native.png", 689, 721, "#315e82" ] } ] } [/block] 4. Under **Setup Custom Native Network**, fill in **‘PubNative’** in the **Title** field [block:image] { "images": [ { "image": [ "https://files.readme.io/29f0811-custom.png", "custom.png", 767, 170, "#ddd9d7" ] } ] } [/block] 5. Under the **Set Up your Inventory**, select the ad units where you want to show PubNative banner ads, and fill in the appropriate class name under the **Custom Event Class** and app token ID with placement name under **Custom Event Class Data** [block:code] { "codes": [ { "code": "net.pubnative.sdk.adapters.mopub.PNBannerAdapter", "language": "java", "name": "Custom Event Class" } ] } [/block] [block:code] { "codes": [ { "code": "{\"app_token\":\"YOUR-APP-TOKEN-ID\", \"placement\":\"YOUR-PLACEMENT-NAME\"}", "language": "json", "name": "Custom Event Class Data" } ] } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/6c05b29-Banner.png", "Banner.png", 823, 311, "#f1f1f0" ] } ] } [/block] 6. Click **Save and Continue **   7. Click the **PubNative** network and make sure the **Run** button is active [block:image] { "images": [ { "image": [ "https://files.readme.io/f1eb35e-activate.png", "activate.png", 318, 148, "#f0f6f6" ] } ] } [/block] 8. Testing Your Application: with the above steps, you can start receiving PubNative ads through the MoPub Dashboard [block:api-header] { "title": "Adding a Custom Event for mediation of MRect" } [/block] Same procedure as for Banners. The only difference is that you need to configure it for Medium placements and use relevant Custom Event Class. Under the Set Up your Inventory, select the ad units where you want to show PubNative MRect ads, and fill in the appropriate class name under the Custom Event Class and app token ID with placement name under Custom Event Class Data. [block:code] { "codes": [ { "code": "net.pubnative.sdk.adapters.mopub.PNMrectBannerAdapter", "language": "java", "name": "Custom Event Class" } ] } [/block] [block:code] { "codes": [ { "code": "{\"app_token\":\"YOUR-APP-TOKEN-ID\", \"placement\":\"YOUR-PLACEMENT-NAME\"}", "language": "json", "name": "Custom Event Class Data" } ] } [/block] [block:api-header] { "title": "Adding a Custom Event for mediation of Interstitials" } [/block] 1. Log into your MoPub account 2. Navigate to the **Networks** tab and click **Add a Network** [block:image] { "images": [ { "image": [ "https://files.readme.io/527b47e-Netwokr.png", "Netwokr.png", 682, 162, "#2e2f36" ] } ] } [/block] 3. Under **Additional Networks**, click **Custom Native Network** *(for mediation of Interstitial format)*: [block:image] { "images": [ { "image": [ "https://files.readme.io/1f1331a-native.png", "native.png", 689, 721, "#315e82" ] } ] } [/block] 4. Under **Setup Custom Native Network**, fill in **‘PubNative’** in the **Title** field [block:image] { "images": [ { "image": [ "https://files.readme.io/df2bdc7-custom.png", "custom.png", 767, 170, "#ddd9d7" ] } ] } [/block] 5. Under the **Set Up your Inventory**, select the ad units where you want to show PubNative fullscreen ads, and fill in the appropriate class name under the **Custom Event Class** and app token ID with placement name under **Custom Event Class Data** [block:code] { "codes": [ { "code": "net.pubnative.sdk.adapters.mopub.PNInterstitialAdapter", "language": "java", "name": "Custom Event Class" } ] } [/block] [block:code] { "codes": [ { "code": "{\"app_token\":\"YOUR-APP-TOKEN-ID\", \"placement\":\"YOUR-PLACEMENT-NAME\"}", "language": "json", "name": "Custom Event Class Data" } ] } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/ea8a40d-Interstitial.png", "Interstitial.png", 802, 280, "#f1f2f1" ] } ] } [/block] 6. Click **Save and Continue **   7. Click the **PubNative** network and make sure the **Run** button is active [block:image] { "images": [ { "image": [ "https://files.readme.io/37f4e6e-activate.png", "activate.png", 318, 148, "#f0f6f6" ] } ] } [/block] 8. Testing Your Application: with the above steps, you can start receiving PubNative ads through the MoPub Dashboard