cancel
Showing results for 
Search instead for 
Did you mean: 

Open application from Quest web browser through a "android:scheme" Deeplink

khelkun
Explorer
I followed the Android deep linking documentation to be able to open my Quest application from the Quest web browser:
1. Edit the AndroidManifest.xml of the application to add this:

 

  <intent-filter>
	<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://gizmos” -->
	<data android:scheme="example" android:host="gizmos" />
  </intent-filter>

 

2. Deploy the application to the Quest device
3. Run this command where "com.example.android" is the application pacakge:

 

adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

 

This works, e.g the previous command launches the application on the device.
 
The "android.intent.category.BROWSABLE" is here to allow this intent action to be launched from a web browser. So now please open the Quest web browser on the device, then try to navigate to the "example://gizmos" URL. This does not work, e.g the application is not launched by querying the "example://gizmos" URL from the Quest web browser. The Android Log cat shows the following output: 

 

2023/05/15 10:52:57.625 24304 24304 Info chromium [INFO:web_contents_impl.cc(6947)] WebContentsImpl Loading end: ID = 3
2023/05/15 10:52:57.630 24304 24304 Info cr_tabmodel Appending tabs being restored to metadata lists, 0, startingNormalCount: 2, startingIncognitoCount: 0
2023/05/15 10:52:57.630 24304 24304 Info cr_tabmodel Serializing tab lists; counts: 2, 0
2023/05/15 10:52:57.635 2990 3117 Warn [CT] Anchor:SlamAnchorMemoryOSSDKClient: [Throttled count=551] Skipping invalid anchorHandle when attempting to cache AnchorStates
2023/05/15 10:52:57.649 22167 22167 Debug Zygote Forked child process 28240
2023/05/15 10:52:57.651 1083 1172 Debug ActivityManager Is background playback GK enabled: false Is background playback enabled for all apps: false
2023/05/15 10:52:57.651 1083 1172 Error AppOps Cannot setMode
2023/05/15 10:52:57.651 1083 1172 Error AppOps java.lang.SecurityException: Specified package com.oculus.browser under uid 90086 but it is not
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4621)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4513)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2784)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2770)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ActivityManagerService.setAppOpMode(ActivityManagerService.java:14775)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ActivityManagerService.onTopAppStatusChanged(ActivityManagerService.java:14713)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2703)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2674)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStart(ProcessList.java:2204)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.lambda$startProcessLocked$0$ProcessList(ProcessList.java:2125)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList$$ExternalSyntheticLambda1.run(Unknown Source:22)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Handler.handleCallback(Handler.java:938)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Handler.dispatchMessage(Handler.java:99)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Looper.loopOnce(Looper.java:214)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Looper.loop(Looper.java:304)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.HandlerThread.run(HandlerThread.java:67)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.ServiceThread.run(ServiceThread.java:44)
2023/05/15 10:52:57.651 1083 1172 Error AppOps Cannot setMode
2023/05/15 10:52:57.651 1083 1172 Error AppOps java.lang.SecurityException: Specified package com.oculus.browser under uid 90086 but it is not
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4621)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4513)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2784)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2770)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ActivityManagerService.setAppOpMode(ActivityManagerService.java:14775)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ActivityManagerService.onTopAppStatusChanged(ActivityManagerService.java:14719)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2703)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2674)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStart(ProcessList.java:2204)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.lambda$startProcessLocked$0$ProcessList(ProcessList.java:2125)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList$$ExternalSyntheticLambda1.run(Unknown Source:22)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Handler.handleCallback(Handler.java:938)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Handler.dispatchMessage(Handler.java:99)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Looper.loopOnce(Looper.java:214)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Looper.loop(Looper.java:304)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.HandlerThread.run(HandlerThread.java:67)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.ServiceThread.run(ServiceThread.java:44)
2023/05/15 10:52:57.651 1083 1172 Error AppOps Cannot setMode
2023/05/15 10:52:57.651 1083 1172 Error AppOps java.lang.SecurityException: Specified package com.oculus.browser under uid 90086 but it is not
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4621)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4513)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2784)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2770)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ActivityManagerService.setAppOpMode(ActivityManagerService.java:14775)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ActivityManagerService.onTopAppStatusChanged(ActivityManagerService.java:14724)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2703)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2674)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.handleProcessStart(ProcessList.java:2204)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList.lambda$startProcessLocked$0$ProcessList(ProcessList.java:2125)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.am.ProcessList$$ExternalSyntheticLambda1.run(Unknown Source:22)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Handler.handleCallback(Handler.java:938)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Handler.dispatchMessage(Handler.java:99)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Looper.loopOnce(Looper.java:214)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.Looper.loop(Looper.java:304)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at android.os.HandlerThread.run(HandlerThread.java:67)
2023/05/15 10:52:57.651 1083 1172 Error AppOps at com.android.server.ServiceThread.run(ServiceThread.java:44)
2023/05/15 10:52:57.652 1083 1172 Info ActivityManager Start proc 28240:com.oculus.browser:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:49/u0ai86 for  {com.oculus.browser/org.chromium.content.app.SandboxedProcessService0:49}
2023/05/15 10:52:57.668 948 1452 Error Tracking SubmapRecords: findSubmapId found 2 submap records hold the same query krHandle
2023/05/15 10:52:57.680 28240 28240 Error cessService0:4 Not starting debugger since process cannot load the jdwp agent.
2023/05/15 10:52:57.614 0 0 Info binder 28240:28240 ioctl 40046210 7fc6e6fd54 returned -22
2023/05/15 10:52:57.700 1083 6246 Debug CompatibilityChangeReporter Compat change id reported: 168419799; UID 10058; state: DISABLED
2023/05/15 10:52:57.708 28240 28240 Debug CompatibilityChangeReporter Compat change id reported: 171979766; UID 90086; state: ENABLED
2023/05/15 10:52:57.726 28240 28240 Debug CompatibilityChangeReporter Compat change id reported: 175409949; UID 90086; state: DISABLED
2023/05/15 10:52:57.727 28240 28240 Debug CompatibilityChangeReporter Compat change id reported: 175409951; UID 90086; state: DISABLED
2023/05/15 10:52:57.729 28240 28240 Debug CompatibilityChangeReporter Compat change id reported: 175409950; UID 90086; state: DISABLED
2023/05/15 10:52:57.730 28240 28240 Debug NetworkSecurityConfig Using Network Security Config from resource 0_resource_name_obfuscated debugBuild: false
2023/05/15 10:52:57.733 28240 28240 Debug NetworkSecurityConfig Using Network Security Config from resource 0_resource_name_obfuscated debugBuild: false
2023/05/15 10:52:57.748 28240 28240 Info cr_SplitCompatApp Launched version=112.0.5615.136 minSdkVersion=25 isBundle=false processName=com.oculus.browser:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:49 isIsolated=true
2023/05/15 10:52:57.750 948 27901 Info Tracking CONSTELLATION:VISION_STATUS: fb11304f9b41e4ec (R): BlobDetection:[#BlobsDetected=(15.24, 6.50)]Matching:[MatchSuccess=1.000, MatchCost=(0.00142, 0.00000), #MatchedBlobs=(8.10, 3.35), #MatchedLeds=(6.94, 0.12), RematchM=0.000, SkipRefine=0.000] MatchMethod:[Prox=1.000, ConstBrute=0.000, UnconstBrute=0.000] MatchResets[AnomBlobSize=0.000, SharedMatch=0.000, DenseReacq=0.000] | Fusion:[FusionError=0.000, ImuFromCamMs=(8.902, 1.609), RematchF=0.004] FusionUpdates:[Successful=0.140, Reliable=0.140, TightFusion=0.140, FullPose=0.000, StaticPrior=0.860, StaticForHandTrans=0.860, PoseUpdateMD=(0.0000, 0.0000)] FusionResets[6DoFReset=0.000, ResetSuccess=0.000] FusionStatus[HasPosition=1.000, HasVelocity=1.000] 
2023/05/15 10:52:57.754 28240 28240 Info cr_ChildProcessService Creating new ChildProcessService pid=28240
2023/05/15 10:52:57.757 24304 24329 Info cr_ChildProcessConn onServiceConnected: org.chromium.content.app.SandboxedProcessService0
2023/05/15 10:52:57.758 568 568 Error SELinux avc:  denied  { find } for pid=28240 uid=90086 name=content_capture scontext=u:r:isolated_app:s0:c512,c768 tcontext=u:object_r:content_capture_service:s0 tclass=service_manager permissive=0
2023/05/15 10:52:57.763 28240 28253 Error cr_ChromiumAndroidLinker ReserveAddressWithHint: Address range starting at 0x76be260000 was not free to use
2023/05/15 10:52:57.766 1083 6246 Info ActivityManager Killing 28240:com.oculus.browser:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:49/u0a58i-8914 (adj 0): isolated not needed

 

 

This has been reported for a few years and several times on the Meta community forum, Stackoverflow and Unity developer forum but without an answer to workaround it or to explain why it's not possible to achieve. Something in the Meta Quest web browser prevents the intent action to open the application.

A feedback from the Developper Team of the Meta Quest web browser would be great, at least to say "we cannot support this because [...]".

 

3 REPLIES 3

Ayfel
Expert Protege

Any solutions to this, or answer from Meta?

No, I've tried to poke the support a few times those last 3 years about that, but I've never obtained an answer. I've just tossed a bottle into to the sea of the bug reports through Meta Quest Developer Hub (MQDH) tool. Hopefully some nice guy of the Dev team will come to give us an answer of what's wrong about this. For the posterity, the trace has not changed so much on the up to date Quest 3:

 

09:40:31.557 SpatialAnchorPipeline        Guardian needs anchor search = 0, 1 && (1, 0, 0)
09:40:31.844 chromium                     [INFO:web_contents_impl.cc(8270)] WebContentsImpl Loading begin: ID = 1
09:40:31.846 CompatibilityChangeReporter  Compat change id reported: 135634846; UID 10070; state: DISABLED
09:40:31.846 CompatibilityChangeReporter  Compat change id reported: 143937733; UID 10070; state: ENABLED
09:40:31.852 chromium                     [INFO:web_contents_impl.cc(8317)] WebContentsImpl Loading end: ID = 1
09:40:31.852 Zygote                       Forked child process 8359
09:40:31.853 ActivityManager              Is background playback GK enabled: false Is background playback enabled for all apps: false
09:40:31.854 AppOps                       Cannot setMode
09:40:31.854 AppOps                       java.lang.SecurityException: Specified package com.oculus.browser under uid 90002 but it is not
09:40:31.854 AppOps                       at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4627)
09:40:31.854 AppOps                       at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4519)
09:40:31.854 AppOps                       at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2790)
09:40:31.854 AppOps                       at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2776)
09:40:31.854 AppOps                       at com.android.server.am.ActivityManagerService.setAppOpMode(ActivityManagerService.java:14883)
09:40:31.854 AppOps                       at com.android.server.am.ActivityManagerService.onTopAppStatusChanged(ActivityManagerService.java:14835)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2703)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2674)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList.handleProcessStart(ProcessList.java:2204)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList.lambda$startProcessLocked$0$ProcessList(ProcessList.java:2125)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList$$ExternalSyntheticLambda1.run(Unknown Source:22)
09:40:31.854 AppOps                       at android.os.Handler.handleCallback(Handler.java:938)
09:40:31.854 AppOps                       at android.os.Handler.dispatchMessage(Handler.java:99)
09:40:31.854 AppOps                       at android.os.Looper.loopOnce(Looper.java:214)
09:40:31.854 AppOps                       at android.os.Looper.loop(Looper.java:304)
09:40:31.854 AppOps                       at android.os.HandlerThread.run(HandlerThread.java:67)
09:40:31.854 AppOps                       at com.android.server.ServiceThread.run(ServiceThread.java:44)
09:40:31.854 AppOps                       Cannot setMode
09:40:31.854 AppOps                       java.lang.SecurityException: Specified package com.oculus.browser under uid 90002 but it is not
09:40:31.854 AppOps                       at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4627)
09:40:31.854 AppOps                       at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4519)
09:40:31.854 AppOps                       at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2790)
09:40:31.854 AppOps                       at com.android.server.appop.AppOpsService.setMode(AppOpsService.java:2776)
09:40:31.854 AppOps                       at com.android.server.am.ActivityManagerService.setAppOpMode(ActivityManagerService.java:14883)
09:40:31.854 AppOps                       at com.android.server.am.ActivityManagerService.onTopAppStatusChanged(ActivityManagerService.java:14840)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2703)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList.handleProcessStartedLocked(ProcessList.java:2674)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList.handleProcessStart(ProcessList.java:2204)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList.lambda$startProcessLocked$0$ProcessList(ProcessList.java:2125)
09:40:31.854 AppOps                       at com.android.server.am.ProcessList$$ExternalSyntheticLambda1.run(Unknown Source:22)
09:40:31.854 AppOps                       at android.os.Handler.handleCallback(Handler.java:938)
09:40:31.854 AppOps                       at android.os.Handler.dispatchMessage(Handler.java:99)
09:40:31.854 AppOps                       at android.os.Looper.loopOnce(Looper.java:214)
09:40:31.854 AppOps                       at android.os.Looper.loop(Looper.java:304)
09:40:31.854 AppOps                       at android.os.HandlerThread.run(HandlerThread.java:67)
09:40:31.854 AppOps                       at com.android.server.ServiceThread.run(ServiceThread.java:44)
09:40:31.854 ActivityManager              Start proc 8359:com.oculus.browser:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:7/u0ai2 for {com.oculus.browser/org.chromium.content.app.SandboxedProcessService0:7}
09:40:31.862 adbd                         jdwp connection from 8359
09:40:31.870 CompatibilityChangeReporter  Compat change id reported: 171979766; UID 90002; state: ENABLED
09:40:31.873 BodyApiService               NativeCode:Update
09:40:31.876 CompatibilityChangeReporter  Compat change id reported: 175409949; UID 90002; state: DISABLED
09:40:31.877 CompatibilityChangeReporter  Compat change id reported: 175409951; UID 90002; state: DISABLED
09:40:31.877 CompatibilityChangeReporter  Compat change id reported: 175409956; UID 90002; state: DISABLED
09:40:31.877 CompatibilityChangeReporter  Compat change id reported: 175409950; UID 90002; state: DISABLED
09:40:31.877 NetworkSecurityConfig        Using Network Security Config from resource 0_resource_name_obfuscated debugBuild: false
09:40:31.879 NetworkSecurityConfig        Using Network Security Config from resource 0_resource_name_obfuscated debugBuild: false
09:40:31.891 SELinux                      avc: denied { find } for pid=8359 uid=90002 name=content_capture scontext=u:r:isolated_app:s0:c512,c768 tcontext=u:object_r:content_capture_service:s0 tclass=service_manager permissive=0
09:40:31.896 ActivityManager              Killing 8359:com.oculus.browser:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:7/u0a70i-8998 (adj 0): isolated not needed
09:40:31.902 libprocessgroup              Successfully killed process cgroup uid 90002 pid 8359 in 5ms
09:40:31.903 Zygote                       Process 8359 exited due to signal 9 (Killed)

 

 

 

Ayfel
Expert Protege

Thank you, hopefully we will get some acknowledgement or answer.