1<?xml version="1.0" encoding="utf-8"?> 2<manifest 3 package="host.exp.exponent" 4 xmlns:android="http://schemas.android.com/apk/res/android" 5 xmlns:tools="http://schemas.android.com/tools"> 6 7 <permission 8 android:name="host.exp.exponent.permission.C2D_MESSAGE" 9 android:protectionLevel="signature"/> 10 11 <!-- These are required permissions to make the app run --> 12 <uses-permission android:name="host.exp.exponent.permission.C2D_MESSAGE" /> 13 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 14 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 15 <uses-permission android:name="android.permission.INTERNET" /> 16 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 17 <uses-permission android:name="android.permission.WAKE_LOCK" /> 18 19 <!-- ADD PERMISSIONS HERE --> 20 <!-- BEGIN OPTIONAL PERMISSIONS --> 21 <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" /> 22 <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 23 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 24 <uses-permission android:name="android.permission.USE_FINGERPRINT" /> 25 <uses-permission android:name="android.permission.VIBRATE" /> 26 <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 27 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 28 29 <!-- These require runtime permissions on M --> 30 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 31 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 32 <uses-permission android:name="android.permission.CAMERA" /> 33 <uses-permission android:name="android.permission.READ_CONTACTS" /> 34 <uses-permission android:name="android.permission.READ_CALENDAR" /> 35 <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 36 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 37 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 38 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 39 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 40 <!-- END OPTIONAL PERMISSIONS --> 41 42 <!-- ADD TEST PERMISSIONS HERE --> 43 44 <uses-feature android:glEsVersion="0x00020000" android:required="false" /> 45 <uses-feature android:name="android.software.leanback" android:required="false" /> 46 <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> 47 48 <application 49 android:name=".MainApplication" 50 android:allowBackup="true" 51 android:icon="@mipmap/ic_launcher" 52 android:label="${appLabel}" 53 android:largeHeap="true" 54 android:requestLegacyExternalStorage="true" 55 android:usesCleartextTraffic="true"> 56 57 <activity 58 android:name=".LauncherActivity" 59 android:exported="true" 60 android:launchMode="singleTask" 61 android:theme="@android:style/Theme.Translucent.NoTitleBar"> 62 <!-- START LAUNCHER INTENT FILTERS --> 63 <intent-filter> 64 <data android:scheme="exp"/> 65 <data android:scheme="exps"/> 66 67 <action android:name="android.intent.action.VIEW"/> 68 69 <category android:name="android.intent.category.DEFAULT"/> 70 <category android:name="android.intent.category.BROWSABLE"/> 71 </intent-filter> 72 73 <intent-filter android:autoVerify="true"> 74 <data 75 android:host="expo.io" 76 android:path="/expo-go" 77 android:scheme="https"/> 78 <data 79 android:host="expo.io" 80 android:path="/expo-go" 81 android:scheme="http"/> 82 83 <data 84 android:host="expo.dev" 85 android:path="/expo-go" 86 android:scheme="https"/> 87 <data 88 android:host="expo.dev" 89 android:path="/expo-go" 90 android:scheme="http"/> 91 92 <action android:name="android.intent.action.VIEW"/> 93 94 <category android:name="android.intent.category.DEFAULT"/> 95 <category android:name="android.intent.category.BROWSABLE"/> 96 </intent-filter> 97 98 <!-- This has to be separate from the exp[s]:// scheme filter. No idea why --> 99 <intent-filter> 100 <data 101 android:host="exp.host" 102 android:pathPrefix="/@" 103 android:scheme="http"/> 104 <data 105 android:host="exp.host" 106 android:pathPrefix="/@" 107 android:scheme="https"/> 108 <data 109 android:host="*.exp.direct" 110 android:pathPattern=".*" 111 android:scheme="http"/> 112 <data 113 android:host="*.exp.direct" 114 android:pathPattern=".*" 115 android:scheme="https"/> 116 117 <action android:name="android.intent.action.VIEW"/> 118 119 <category android:name="android.intent.category.DEFAULT"/> 120 <category android:name="android.intent.category.BROWSABLE"/> 121 </intent-filter> 122 123 <intent-filter> 124 <category android:name="android.intent.category.DEFAULT" /> 125 <category android:name="android.intent.category.BROWSABLE" /> 126 <action android:name="expo.modules.notifications.OPEN_APP_ACTION"/> 127 </intent-filter> 128 <!-- END LAUNCHER INTENT FILTERS --> 129 </activity> 130 131 <activity 132 android:name=".experience.ExperienceActivity" 133 android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" 134 android:theme="@style/Theme.Exponent.Light" 135 android:windowSoftInputMode="adjustResize"> 136 </activity> 137 138 <activity 139 android:name=".MainActivity" 140 android:launchMode="singleTask" 141 android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" 142 android:theme="@style/Theme.Exponent.Splash" 143 android:windowSoftInputMode="adjustResize"> 144 <!-- ADD DETACH SCHEME HERE --> 145 <!-- ADD DETACH INTENT FILTERS HERE --> 146 <!-- ADD DETACH APP SPECIFIC INTENT FILTERS --> 147 </activity> 148 149 <activity 150 android:name=".experience.HomeActivity" 151 android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" 152 android:label="${appLabel}" 153 android:launchMode="singleTask" 154 android:screenOrientation="portrait" 155 android:theme="@style/Theme.Exponent.HomeActivity"> 156 <!-- START HOME INTENT FILTERS --> 157 <intent-filter> 158 <action android:name="android.intent.action.MAIN"/> 159 160 <category android:name="android.intent.category.DEFAULT"/> 161 <category android:name="android.intent.category.LAUNCHER"/> 162 </intent-filter> 163 <intent-filter> 164 <data android:scheme="expauth"/> 165 166 <action android:name="android.intent.action.VIEW"/> 167 168 <category android:name="android.intent.category.DEFAULT"/> 169 <category android:name="android.intent.category.BROWSABLE"/> 170 </intent-filter> 171 <intent-filter> 172 <data android:scheme="expo-home"/> 173 174 <action android:name="android.intent.action.VIEW"/> 175 176 <category android:name="android.intent.category.DEFAULT"/> 177 <category android:name="android.intent.category.BROWSABLE"/> 178 </intent-filter> 179 <!-- END HOME INTENT FILTERS --> 180 </activity> 181 182 <activity 183 android:name=".experience.TvActivity" 184 android:label="${appLabel}" 185 android:theme="@style/Theme.Exponent.Light" 186 android:screenOrientation="landscape"> 187 <intent-filter> 188 <action android:name="android.intent.action.MAIN" /> 189 <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> 190 </intent-filter> 191 </activity> 192 193 194 195 <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/> 196 <!-- WHEN_PREPARING_SHELL_REMOVE_FROM_HERE --> 197 <!-- ADD DEV SETTINGS HERE --> 198 <!-- BEGIN_SDK_42 --> 199 <activity android:name="abi42_0_0.com.facebook.react.devsupport.DevSettingsActivity"/> 200 <!-- END_SDK_42 --> 201 <!-- BEGIN_SDK_41 --> 202 <activity android:name="abi41_0_0.com.facebook.react.devsupport.DevSettingsActivity"/> 203 <!-- END_SDK_41 --> 204 <!-- BEGIN_SDK_40 --> 205 <activity android:name="abi40_0_0.com.facebook.react.devsupport.DevSettingsActivity"/> 206 <!-- END_SDK_40 --> 207 <!-- BEGIN_SDK_39 --> 208 <activity android:name="abi39_0_0.com.facebook.react.devsupport.DevSettingsActivity"/> 209 <!-- END_SDK_39 --> 210 <!-- WHEN_PREPARING_SHELL_REMOVE_TO_HERE --> 211 212 <activity 213 android:name="net.openid.appauth.RedirectUriReceiverActivity" 214 tools:node="replace"> 215 <intent-filter> 216 <action android:name="android.intent.action.VIEW"/> 217 <category android:name="android.intent.category.DEFAULT"/> 218 <category android:name="android.intent.category.BROWSABLE"/> 219 <data android:scheme="host.exp.exponent" android:path="oauthredirect"/> 220 </intent-filter> 221 </activity> 222 223 <!-- START OF STRIPE SCHEMES --> 224 <activity 225 android:exported="true" 226 android:launchMode="singleTask" 227 android:name="expo.modules.payments.stripe.RedirectUriReceiver" 228 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> 229 <intent-filter> 230 <action android:name="android.intent.action.VIEW" /> 231 <category android:name="android.intent.category.DEFAULT" /> 232 <category android:name="android.intent.category.BROWSABLE" /> 233 <data android:scheme="expo.modules.payments.stripe" /> 234 </intent-filter> 235 </activity> 236 <!-- Versioned Activity for Stripe --> 237 <!-- BEGIN_SDK_42 --> 238 <activity 239 android:exported="true" 240 android:launchMode="singleTask" 241 android:name="abi42_0_0.expo.modules.payments.stripe.RedirectUriReceiver" 242 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> 243 <intent-filter> 244 <action android:name="android.intent.action.VIEW" /> 245 <category android:name="android.intent.category.DEFAULT" /> 246 <category android:name="android.intent.category.BROWSABLE" /> 247 <data android:scheme="abi42_0_0.expo.modules.payments.stripe" /> 248 </intent-filter> 249 </activity> 250 <!-- END_SDK_42 --> 251 <!-- BEGIN_SDK_41 --> 252 <activity 253 android:exported="true" 254 android:launchMode="singleTask" 255 android:name="abi41_0_0.expo.modules.payments.stripe.RedirectUriReceiver" 256 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> 257 <intent-filter> 258 <action android:name="android.intent.action.VIEW" /> 259 <category android:name="android.intent.category.DEFAULT" /> 260 <category android:name="android.intent.category.BROWSABLE" /> 261 <data android:scheme="abi41_0_0.expo.modules.payments.stripe" /> 262 </intent-filter> 263 </activity> 264 <!-- END_SDK_41 --> 265 <!-- BEGIN_SDK_40 --> 266 <activity 267 android:exported="true" 268 android:launchMode="singleTask" 269 android:name="abi40_0_0.expo.modules.payments.stripe.RedirectUriReceiver" 270 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> 271 <intent-filter> 272 <action android:name="android.intent.action.VIEW" /> 273 <category android:name="android.intent.category.DEFAULT" /> 274 <category android:name="android.intent.category.BROWSABLE" /> 275 <data android:scheme="abi40_0_0.expo.modules.payments.stripe" /> 276 </intent-filter> 277 </activity> 278 <!-- END_SDK_40 --> 279 <!-- BEGIN_SDK_39 --> 280 <activity 281 android:exported="true" 282 android:launchMode="singleTask" 283 android:name="abi39_0_0.expo.modules.payments.stripe.RedirectUriReceiver" 284 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> 285 <intent-filter> 286 <action android:name="android.intent.action.VIEW" /> 287 <category android:name="android.intent.category.DEFAULT" /> 288 <category android:name="android.intent.category.BROWSABLE" /> 289 <data android:scheme="abi39_0_0.expo.modules.payments.stripe" /> 290 </intent-filter> 291 </activity> 292 <!-- END_SDK_39 --> 293 <!-- END OF STRIPE SCHEMES --> 294 295 <activity 296 android:name=".experience.ErrorActivity" 297 android:theme="@style/Theme.Exponent.Dark" 298 android:screenOrientation="portrait"> 299 </activity> 300 301 <activity 302 android:name="com.facebook.FacebookActivity" 303 android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 304 android:label="${appLabel}" 305 android:theme="@android:style/Theme.Translucent.NoTitleBar" 306 tools:replace="android:theme" /> 307 308 <activity 309 android:name="com.facebook.CustomTabActivity" 310 android:exported="true"> 311 <intent-filter> 312 <action android:name="android.intent.action.VIEW" /> 313 <category android:name="android.intent.category.DEFAULT" /> 314 <category android:name="android.intent.category.BROWSABLE" /> 315 <!-- REPLACE WITH FACEBOOK SCHEME --> 316 </intent-filter> 317 </activity> 318 319 <activity 320 android:name="com.facebook.ads.InterstitialAdActivity" 321 android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 322 android:label="${appLabel}" 323 android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 324 325 <service 326 android:name=".ExponentIntentService" 327 android:exported="false" /> 328 329 <!-- Analytics --> 330 <receiver 331 android:name="host.exp.exponent.referrer.InstallReferrerReceiver" 332 android:exported="true"> 333 <intent-filter> 334 <action android:name="com.android.vending.INSTALL_REFERRER" /> 335 </intent-filter> 336 </receiver> 337 338 <!-- 339 This crashes: https://code.google.com/p/analytics-issues/issues/detail?id=667 340 TODO: turn it back on when it's fixed 341 <service 342 android:name="com.google.android.gms.analytics.CampaignTrackingService" 343 android:enabled="true" 344 android:exported="false" />--> 345 346 <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver" 347 android:enabled="true"> 348 <intent-filter> 349 <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" /> 350 </intent-filter> 351 </receiver> 352 353 <service android:name="com.google.android.gms.analytics.AnalyticsService" 354 android:enabled="true" 355 android:exported="false"/> 356 357 <!-- FCM --> 358 <service 359 android:name=".fcm.ExpoFcmMessagingService"> 360 <intent-filter> 361 <action android:name="com.google.firebase.MESSAGING_EVENT" /> 362 </intent-filter> 363 </service> 364 <service 365 android:name=".fcm.FcmRegistrationIntentService" 366 android:exported="false"> 367 </service> 368 <!-- Applied to Firebase data messages --> 369 <meta-data 370 android:name="expo.modules.notifications.default_notification_icon" 371 android:resource="@drawable/shell_notification_icon" /> 372 <meta-data 373 android:name="expo.modules.notifications.default_notification_color" 374 android:resource="@color/notification_icon_color" /> 375 376 <!-- Applied to Firebase notification messages --> 377 <meta-data 378 android:name="com.google.firebase.messaging.default_notification_icon" 379 android:resource="@drawable/shell_notification_icon" /> 380 <meta-data 381 android:name="com.google.firebase.messaging.default_notification_color" 382 android:resource="@color/notification_icon_color" /> 383 384 385 <!-- ImagePicker native module --> 386 <activity 387 android:name="com.theartofdev.edmodo.cropper.CropImageActivity" 388 android:theme="@style/Base.Theme.AppCompat"> 389 </activity> 390 391 <!-- ADD GOOGLE MAPS CONFIG HERE --> 392 <!-- BEGIN GOOGLE MAPS CONFIG --> 393 <meta-data 394 android:name="com.google.android.geo.API_KEY" 395 android:value="${GOOGLE_MAPS_API_KEY}"/> 396 <!-- END GOOGLE MAPS CONFIG --> 397 398 <!-- ADD GOOGLE MOBILE ADS CONFIG HERE --> 399 <!-- BEGIN GOOGLE MOBILE ADS CONFIG --> 400 <meta-data 401 android:name="com.google.android.gms.ads.APPLICATION_ID" 402 android:value="ca-app-pub-3940256099942544~3347511713"/> 403 <meta-data android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT" android:value="true"/> 404 <!-- END GOOGLE MOBILE ADS CONFIG --> 405 406 <!-- ADD BRANCH CONFIG HERE --> 407 408 <!-- ADD FACEBOOK APP ID CONFIG HERE --> 409 <!-- ADD FACEBOOK APP DISPLAY NAME CONFIG HERE --> 410 <!-- Tags below need to be in one line with no whitespace after android:value --> 411 <!-- in order for XDL to be able to replace values in them --> 412 <meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="false"/> 413 <meta-data android:name="com.facebook.sdk.AutoInitEnabled" android:value="false"/> 414 <meta-data android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled" android:value="false"/> 415 416 <!-- ADD HERE STRIPE SCHEME META DATA --> 417 </application> 418 419</manifest> 420