Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Share Video on Android #616

Closed
JanOwiesniak opened this issue Oct 28, 2019 · 14 comments
Closed

Share Video on Android #616

JanOwiesniak opened this issue Oct 28, 2019 · 14 comments
Labels
os: android question stale There has been a lack of activity on this issue and it may be closed soon.

Comments

@JanOwiesniak
Copy link

I'm recording a mp4 video (Screen Capture) on Android which i want to share with others.

Not sure what i'm doing wrong but whatever i choose (Instagram, Google Drive, Email, ...), the share dialog closes with a message similar to "error during upload: contains no data" (depending on the app i wanted to share the file with).

Any help appreciated.

Code Example

let originalFilePath = hander.data.fileUri; // recorded video
let shareableFilePath = RNFS.DocumentDirectoryPath + "/share.mp4";

RNFS.moveFile(originalFilePath, shareableFilePath).then(result => {
  console.log('RNFS.moveFile: ', originalFilePath, shareableFilePath);

  RNFS.stat(shareableFilePath).then(result => {
    let filePath = result.path

    console.log("RNFS.stat: ", filePath)

    if(RNFS.exists(filePath)){
      let shareOptions = {
        url: "file://" + filePath,
        type: 'video/mp4',
      }

      console.log("Share.open", shareOptions)

      Share.open(shareOptions)
      .then((res) => {
        if(res && res.app){
          console.log("Share.open#done: ", res)
        }
      })
      .catch((err) => {
        if(err && err.error){
          console.log("Share.open#error: ", res)
        }       
      });
    } else {
      console.log("file does not exist: ", shareableFilePath)
    }
  })
})
.catch(err => {
  console.log(err);
});

Console Output

RNFS.moveFile:  /storage/emulated/0/Android/data/app.myapp/files/recording_2019_10_28_19_10_48_855.mp4 /data/user/0/app.myapp/files/share.mp4
RNFS.stat:  /data/user/0/app.myapp/files/share.mp4
Share.open:  {url: "file:///data/user/0/app.myapp/files/share.mp4", type: "video/mp4"}
Share.open#done:  {app: "com.instagram.android/com.instagram.share.handleractivity.ShareHandlerActivity", message: "com.instagram.android/com.instagram.share.handleractivity.ShareHandlerActivity"}
@jgcmarins
Copy link
Member

jgcmarins commented Oct 28, 2019

Hello @JanOwiesniak do you have any reproducible repository?
What happens when sharing a video (without recording it)?
Does it happens on both platforms?

@JanOwiesniak
Copy link
Author

JanOwiesniak commented Oct 28, 2019

Only tested it on Android so far. Will test it on iOS tomorrow to confirm if this is a platform specific issue or not.

In my opinion it should not matter if the video was recorded before or if this is any other video file because I can open it with any regular video player so it should not be broken. But sure, i will test this as well to clear this up.

Do I need any specific permissions to use this library? Currently i‘m asking for external write and read permissions during runtime (probably not even required).

Another thing which was not clear to me was the file provider section at the end of the README. Do I need to implement this as well or is this purely optional?

Am I using the API correctly? Does the url parameter looks correct to you?

file://filePath

Could base64 solve the issue? I‘m afraid of running into memory issues here because the video files are pretty large.

@jgcmarins
Copy link
Member

Nice
All needed permissions are specified on README

File path seems right: https://github.com/react-native-community/react-native-share#url-format-when-sharing-a-file

@JanOwiesniak
Copy link
Author

@jgcmarins talking about the permissions, does this mean the optional step 5 (Optional) Follow this for implementing Provider in the in Android section is not optional but mandatory to share files local files?

If this is the case, this might be the issue here because i have not implemented it yet.

@JanOwiesniak
Copy link
Author

JanOwiesniak commented Oct 29, 2019

Next Steps

  • Test with other video

let shareableFilePath = RNFS.ExternalDirectoryPath + "/big_buck_bunny.mp4"; which will be resolved to file:///storage/emulated/0/Android/data/app.baff/files/big_buck_bunny.mp4 results in the same error message mentioned above.

  • Test with base64 encoded video file

Works with base64 (see comment below)

@MateusAndrade
Copy link
Collaborator

Sharing images to Instagram, Drive, etc results on the same error @JanOwiesniak ? Did you tried removing the type or even passing another video format?

@JanOwiesniak
Copy link
Author

JanOwiesniak commented Oct 30, 2019

I seems like the video file is not the issue here but the file:// url parameter because it works as soon as i encode the data into base64.

I successfully tested it with the video file.

let filePath = RNFS.DocumentDirectoryPath + "/share.mp4";

RNFS.readFile(filePath, 'base64')
  .then(base64 =>{

    let fileType = 'video/mp4'
    let base64Data = `data:${fileType};base64,` + base64; // this works as url parameter
    let fileUrl = "file://" + filePath; // using this as url does not work

    let shareOptions = {
      url: base64Data,
      type: fileType
    }

    // call Share.open with shareOptions works with base64Data but not with fileUrl

  });

And with an image file as well

let filePath = RNFS.ExternalDirectoryPath + "/test.jpg";

RNFS.readFile(filePath, 'base64')
  .then(base64 =>{

    let fileType = 'image/jpeg'
    let base64Data = `data:${fileType};base64,` + base64; // this works as url parameter
    let fileUrl = "file://" + filePath; // using this as url does not work

    let shareOptions = {
      url: base64Data
    }

    // call Share.open with shareOptions works with base64Data but not with fileUrl

  });

The approach is "good enough" for image files but encoding a video file into base64 is no option here because videos can be up to 30 seconds and encoding it into base64 before sharing it is extremely slow (works but takes several seconds to process on my Nokia 6 test device).

So let's go back to the file:// schema.

My current resolved fileUrl looks like this:

url: "file:///data/user/0/app.myapp/files/share.mp4"

Is anything wrong with it? Do i need to setup an optional file provider as mentioned in the README to use the file:// schema?

@JanOwiesniak
Copy link
Author

Hey @MateusAndrade and @jgcmarins thanks for your input so far!

Here is a side-by-side example including logcat where i use base64 and filePath as url.

base64 works like expected (file can be shared) where filePath returns with an error that file was not found.

Logs look same to me. I can see no errors. Maybe you can spot something?

base64 - Example

console.log("recordDone");

let originalFilePath = hander.data.fileUri;
let shareableFilePath = RNFS.DocumentDirectoryPath + "/share.mp4";

RNFS.moveFile(originalFilePath, shareableFilePath).then(result => {

  console.log('RNFS.moveFile: ', originalFilePath, shareableFilePath);

  RNFS.stat(shareableFilePath).then(result => {
    let filePath = result.path

    if(RNFS.exists(filePath)){

      console.log("RNFS.stat: ", filePath)
    
      RNFS.readFile(filePath, 'base64')
      .then(base64 =>{
        console.log("RNFS.readFile: ", base64)

        let type = 'video/mp4'
        let base64Data = `data:${type};base64,` + base64;
        let fileData = "file://" + filePath;

        console.log("base64Data: ", base64Data)
        console.log("fileData: ", fileData)

        let shareOptions = {
          url: base64Data, // NOTE: base64Data can be shared via Instagram and Co.
          type: 'video/mp4',
        }

        console.log("Share.open: ", shareOptions)

        Share.open(shareOptions)
        .then((res) => {
          if(res && res.app){

            console.log("Share.open#done: ", res)

            var params = { target_id: this.state.lastKnownTarget, via: res.app, current_screen: "ARScreen"};
            logEvent("share_video_success", params);
          }
        })
        .catch((err) => {
          if(err && err.error){

            console.log("Share.open#error: ", err)

            var params = { target_id: this.state.lastKnownTarget, error: err.error, current_screen: "ARScreen"};
            logEvent("share_video_error", params); 
          }       
        });
      });
    } else {
      console.log("file does not exist: ", shareableFilePath)
    }
  })
})
.catch(err => {
  console.log(err);
});

Logs

1. Record & open share dialog

2019-11-01 10:21:12.488 18395-18478/app.myapp I/ReactNativeJS: recordDone
2019-11-01 10:21:12.543 18395-18478/app.myapp I/ReactNativeJS: 'RNFS.moveFile: ', '/storage/emulated/0/Android/data/app.myapp/files/recording_2019_11_01_10_21_08_735.mp4', '/data/user/0/app.myapp/files/share.mp4'
2019-11-01 10:21:12.549 18395-18478/app.myapp I/ReactNativeJS: 'RNFS.stat: ', '/data/user/0/app.myapp/files/share.mp4'
2019-11-01 10:21:12.623 18395-18478/app.myapp I/ReactNativeJS: 'RNFS.readFile: ', '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
2019-11-01 10:21:12.676 18395-18478/app.myapp I/ReactNativeJS: 'base64Data: ', 'data:video/mp4;base64,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
2019-11-01 10:21:12.677 18395-18478/app.myapp I/ReactNativeJS: 'fileData: ', 'file:///data/user/0/app.myapp/files/share.mp4'
2019-11-01 10:21:12.705 18395-18478/app.myapp I/ReactNativeJS: 'Share.open: ', { url: 'data:video/mp4;base64,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
2019-11-01 10:21:12.871 18395-19314/app.myapp V/FA: Recording user engagement, ms: 67630
2019-11-01 10:21:12.874 18395-19314/app.myapp V/FA: Connecting to remote service
2019-11-01 10:21:12.884 18395-19314/app.myapp V/FA: Activity paused, time: 2624687
2019-11-01 10:21:12.896 18395-19314/app.myapp D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=67630, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=3787211961682570463}]
2019-11-01 10:21:12.928 18395-18405/app.myapp W/System: A resource failed to call close. 
2019-11-01 10:21:12.944 18395-18542/app.myapp I/Unity: Stop Vuforia Engine
    Vuforia.VuforiaARController:StopVuforia()
    Vuforia.VuforiaARController:OnApplicationPause(Boolean)
    System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
    System.Delegate:DynamicInvokeImpl(Object[])
    Vuforia.DelegateHelper:InvokeDelegate(Delegate, Object[])
    Vuforia.DelegateHelper:InvokeWithExceptionHandling(Action`1, T)
     
    (Filename: ./Runtime/Export/Debug.bindings.h Line: 45)
2019-11-01 10:21:12.951 18395-18478/app.myapp I/ReactNativeJS: IdleScreen#componentDidMount
2019-11-01 10:21:12.959 18395-19314/app.myapp V/FA: Connection attempt already in progress
2019-11-01 10:21:12.970 18395-19314/app.myapp D/FA: Logging event (FE): idle, Bundle[{current_screen=IdleScreen, firebase_event_origin(_o)=app, location=0}]
2019-11-01 10:21:12.974 18395-18478/app.myapp I/ReactNativeJS: NetworkDialog#componentWillReceiveProps: true
2019-11-01 10:21:13.011 18395-19314/app.myapp V/FA: Connection attempt already in progress
2019-11-01 10:21:13.036 18395-18478/app.myapp I/ReactNativeJS: NetworkDialog#componentWillReceiveProps: true
2019-11-01 10:21:13.208 18395-18395/app.myapp W/Binder:18395_4: type=1400 audit(0.0:3251): avc: denied { read } for name="u:object_r:vendor_camera_prop:s0" dev="tmpfs" ino=17788 scontext=u:r:untrusted_app:s0:c107,c259,c512,c768 tcontext=u:object_r:vendor_camera_prop:s0 tclass=file permissive=0
2019-11-01 10:21:13.217 18395-18536/app.myapp E/libc: Access denied finding property "vendor.camera.aux.packagelist"
2019-11-01 10:21:13.218 18395-18395/app.myapp W/Binder:18395_4: type=1400 audit(0.0:3252): avc: denied { read } for name="u:object_r:vendor_camera_prop:s0" dev="tmpfs" ino=17788 scontext=u:r:untrusted_app:s0:c107,c259,c512,c768 tcontext=u:object_r:vendor_camera_prop:s0 tclass=file permissive=0
2019-11-01 10:21:13.228 18395-18536/app.myapp E/libc: Access denied finding property "vendor.camera.aux.packagelist"
2019-11-01 10:21:13.235 18395-18542/app.myapp D/AR: RenderManager: Could not retrieve a valid GLSurfaceView in view hierarchy, therefore cannot set any render mode
2019-11-01 10:21:13.519 18395-18542/app.myapp I/AR: Vuforia paused.
2019-11-01 10:21:13.586 18395-19059/app.myapp D/AudioTrack: stop() called with 1640448 frames delivered
2019-11-01 10:21:13.677 18395-18454/app.myapp I/OpenGLRenderer: Davey! duration=798ms; Flags=0, IntendedVsync=2624696787873, Vsync=2625463454509, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=2625481193736, AnimationStart=2625481240455, PerformTraversalsStart=2625482399309, DrawStart=2625483038371, SyncQueued=2625487141705, SyncStart=2625487253632, IssueDrawCommandsStart=2625487586340, SwapBuffers=2625493727434, FrameCompleted=2625495078840, DequeueBufferDuration=477000, QueueBufferDuration=497000, 
2019-11-01 10:21:13.686 18395-19314/app.myapp D/FA: Connected to remote service
2019-11-01 10:21:13.690 18395-19314/app.myapp V/FA: Processing queued up service tasks: 3
2019-11-01 10:21:18.791 18395-19314/app.myapp V/FA: Inactivity, disconnecting from the service

2. Interacted with open share dialog by selecting Share via Instagram Feed

2019-11-01 10:22:47.254 18395-18478/app.myapp I/ReactNativeJS: 'Share.open#done: ', { app: 'com.instagram.android/com.instagram.share.handleractivity.ShareHandlerActivity',
      message: 'com.instagram.android/com.instagram.share.handleractivity.ShareHandlerActivity' }
2019-11-01 10:22:47.270 18395-19484/app.myapp W/FA: Param value can't be null: target_id
2019-11-01 10:22:47.271 18395-19484/app.myapp D/FA: Logging event (FE): share_video_success, Bundle[{current_screen=ARScreen, firebase_event_origin(_o)=app, via=com.instagram.android/com.instagram.share.handleractivity.ShareHandlerActivity}]
2019-11-01 10:22:47.428 18395-19484/app.myapp V/FA: Connecting to remote service
2019-11-01 10:22:47.439 18395-19484/app.myapp D/FA: Connected to remote service
2019-11-01 10:22:47.440 18395-19484/app.myapp V/FA: Processing queued up service tasks: 1

-> Instagram opens with the previously recorded video

filePath - Example

console.log("recordDone");

let originalFilePath = hander.data.fileUri;
let shareableFilePath = RNFS.DocumentDirectoryPath + "/share.mp4";

RNFS.moveFile(originalFilePath, shareableFilePath).then(result => {

  console.log('RNFS.moveFile: ', originalFilePath, shareableFilePath);

  RNFS.stat(shareableFilePath).then(result => {
    let filePath = result.path

    if(RNFS.exists(filePath)){

      console.log("RNFS.stat: ", filePath)
    
      RNFS.readFile(filePath, 'base64')
      .then(base64 =>{
        console.log("RNFS.readFile: ", base64)

        let type = 'video/mp4'
        let base64Data = `data:${type};base64,` + base64;
        let fileData = "file://" + filePath;

        console.log("base64Data: ", base64Data)
        console.log("fileData: ", fileData)

        let shareOptions = {
          url: fileData, // NOTE: fileData can NOT be shared via Instagram and Co.
          type: 'video/mp4',
        }

        console.log("Share.open: ", shareOptions)

        Share.open(shareOptions)
        .then((res) => {
          if(res && res.app){

            console.log("Share.open#done: ", res)

            var params = { target_id: this.state.lastKnownTarget, via: res.app, current_screen: "ARScreen"};
            logEvent("share_video_success", params);
          }
        })
        .catch((err) => {
          if(err && err.error){

            console.log("Share.open#error: ", err)

            var params = { target_id: this.state.lastKnownTarget, error: err.error, current_screen: "ARScreen"};
            logEvent("share_video_error", params); 
          }       
        });
      });
    } else {
      console.log("file does not exist: ", shareableFilePath)
    }
  })
})
.catch(err => {
  console.log(err);
});

Logs

1. Record & open share dialog

2019-11-01 10:27:19.949 20975-21060/app.myapp I/ReactNativeJS: recordDone
2019-11-01 10:27:19.969 20975-21060/app.myapp I/ReactNativeJS: 'RNFS.moveFile: ', '/storage/emulated/0/Android/data/app.myapp/files/recording_2019_11_01_10_27_18_319.mp4', '/data/user/0/app.myapp/files/share.mp4'
2019-11-01 10:27:19.990 20975-21060/app.myapp I/ReactNativeJS: 'RNFS.stat: ', '/data/user/0/app.myapp/files/share.mp4'
2019-11-01 10:27:20.009 20975-21060/app.myapp I/ReactNativeJS: 'RNFS.readFile: ', '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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2019-11-01 10:27:20.010 20975-21060/app.myapp I/ReactNativeJS: 'base64Data: ', 'data:video/mp4;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2019-11-01 10:27:20.010 20975-21060/app.myapp I/ReactNativeJS: 'fileData: ', 'file:///data/user/0/app.myapp/files/share.mp4'
2019-11-01 10:27:20.012 20975-21060/app.myapp I/ReactNativeJS: 'Share.open: ', { url: 'file:///data/user/0/app.myapp/files/share.mp4',
      type: 'video/mp4' }
2019-11-01 10:27:20.065 20975-21008/app.myapp V/FA: Recording user engagement, ms: 18728
2019-11-01 10:27:20.067 20975-21008/app.myapp V/FA: Connecting to remote service
2019-11-01 10:27:20.080 20975-21008/app.myapp V/FA: Activity paused, time: 2991880
2019-11-01 10:27:20.102 20975-21008/app.myapp D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=18728, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=-1009789768711454365}]
2019-11-01 10:27:20.132 20975-21060/app.myapp I/ReactNativeJS: IdleScreen#componentDidMount
2019-11-01 10:27:20.136 20975-21095/app.myapp I/Unity: Stop Vuforia Engine
    Vuforia.VuforiaARController:StopVuforia()
    Vuforia.VuforiaARController:OnApplicationPause(Boolean)
    System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
    System.Delegate:DynamicInvokeImpl(Object[])
    Vuforia.DelegateHelper:InvokeDelegate(Delegate, Object[])
    Vuforia.DelegateHelper:InvokeWithExceptionHandling(Action`1, T)
     
    (Filename: ./Runtime/Export/Debug.bindings.h Line: 45)
2019-11-01 10:27:20.161 20975-21008/app.myapp V/FA: Connection attempt already in progress
2019-11-01 10:27:20.170 20975-21060/app.myapp I/ReactNativeJS: NetworkDialog#componentWillReceiveProps: true
2019-11-01 10:27:20.180 20975-21008/app.myapp D/FA: Logging event (FE): idle, Bundle[{current_screen=IdleScreen, firebase_event_origin(_o)=app, location=0}]
2019-11-01 10:27:20.226 20975-21008/app.myapp V/FA: Connection attempt already in progress
2019-11-01 10:27:20.235 20975-21060/app.myapp I/ReactNativeJS: NetworkDialog#componentWillReceiveProps: true
2019-11-01 10:27:20.414 20975-21161/app.myapp E/libc: Access denied finding property "vendor.camera.aux.packagelist"
2019-11-01 10:27:20.408 20975-20975/app.myapp W/Binder:20975_5: type=1400 audit(0.0:3665): avc: denied { read } for name="u:object_r:vendor_camera_prop:s0" dev="tmpfs" ino=17788 scontext=u:r:untrusted_app:s0:c107,c259,c512,c768 tcontext=u:object_r:vendor_camera_prop:s0 tclass=file permissive=0
2019-11-01 10:27:20.418 20975-20975/app.myapp W/Binder:20975_5: type=1400 audit(0.0:3666): avc: denied { read } for name="u:object_r:vendor_camera_prop:s0" dev="tmpfs" ino=17788 scontext=u:r:untrusted_app:s0:c107,c259,c512,c768 tcontext=u:object_r:vendor_camera_prop:s0 tclass=file permissive=0
2019-11-01 10:27:20.424 20975-21161/app.myapp E/libc: Access denied finding property "vendor.camera.aux.packagelist"
2019-11-01 10:27:20.437 20975-21095/app.myapp D/AR: RenderManager: Could not retrieve a valid GLSurfaceView in view hierarchy, therefore cannot set any render mode
2019-11-01 10:27:20.496 20975-21095/app.myapp I/AR: Vuforia paused.
2019-11-01 10:27:20.540 20975-21132/app.myapp D/AudioTrack: stop() called with 348160 frames delivered
2019-11-01 10:27:20.637 20975-21008/app.myapp D/FA: Connected to remote service
2019-11-01 10:27:20.639 20975-21008/app.myapp V/FA: Processing queued up service tasks: 3
2019-11-01 10:27:25.701 20975-21008/app.myapp V/FA: Inactivity, disconnecting from the service

2. Interacted with open share dialog by selecting Share via Instagram Feed

2019-11-01 10:27:51.162 20975-21060/app.myapp I/ReactNativeJS: 'Share.open#done: ', { app: 'com.instagram.android/com.instagram.share.handleractivity.ShareHandlerActivity',
      message: 'com.instagram.android/com.instagram.share.handleractivity.ShareHandlerActivity' }
2019-11-01 10:27:51.185 20975-21008/app.myapp W/FA: Param value can't be null: target_id
2019-11-01 10:27:51.188 20975-21008/app.myapp D/FA: Logging event (FE): share_video_success, Bundle[{current_screen=ARScreen, firebase_event_origin(_o)=app, via=com.instagram.android/com.instagram.share.handleractivity.ShareHandlerActivity}]
2019-11-01 10:27:51.251 20975-21008/app.myapp V/FA: Connecting to remote service
2019-11-01 10:27:51.266 20975-21008/app.myapp D/FA: Connected to remote service
2019-11-01 10:27:51.268 20975-21008/app.myapp V/FA: Processing queued up service tasks: 1
2019-11-01 10:27:56.322 20975-21008/app.myapp V/FA: Inactivity, disconnecting from the service

-> Instagram opens with an error message saying "Video can not be found"


I will try the above mentioned "optional" provider approach in the README now and will let you know if this helps.

@JanOwiesniak
Copy link
Author

JanOwiesniak commented Nov 1, 2019

I implemented a FileProvider:

AndroidManifest.xml

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="app.myapp.provider"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

res/xml/filepaths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <files-path name="Download" path="Download/" />
</paths>

MainApplication.java

import cl.json.ShareApplication;

public class MainApplication extends Application implements ShareApplication, ReactApplication {
  ...
}

And added a static testfile share.mp4 into a folder called Download inside my app folder (copied it to top level as well because i'm not 100% sure if filepaths.xml looks at the app folder or at the the root level) to share it on Instagram:

let contentPath = "content://app.myapp.provider/Download/share.mp4";
let type = 'video/mp4'

let shareOptions = {
  url: contentPath,
  type: type,
}

Share.open(shareOptions).then((res) => {
  if(res && res.app){

    console.log("Share.open#done: ", res)

    var params = { target_id: this.state.lastKnownTarget, via: res.app, current_screen: "ARScreen"};
    logEvent("share_video_success", params);
  }
})

Running into the same issue:

-> Instagram opens with an error message saying "Video can not be found"

Could this be related to some kind of file permission issues? Running out of options on this ...

@JanOwiesniak
Copy link
Author

Found the issue. It is somehow important where the file is located.

Changing this line of code from:

let shareableFilePath = RNFS.DocumentDirectoryPath + "/share.mp4";

to

let shareableFilePath = RNFS.CachesDirectoryPath + "/share.mp4";

and thereby reading the file from the cache instead of the internal / external storage fixed the bug.

Is this a known constraint / issue? If yes this should be mentioned in the README because it costs me a couple of days to figure this out.

@jgcmarins
Copy link
Member

Is this a known constraint / issue? If yes this should be mentioned in the README because it costs me a couple of days to figure this out.

@JanOwiesniak we'd love if you could help us updating our README

@catodapice
Copy link

@JanOwiesniak I'm trying to use the same code but in this line RNFS.readFile(filePath, 'base64') the app freeze and close without error, do you know why or give me a full example, I'm suffering the same problem I trying to share a video on android from my gallery without luck

@stale
Copy link

stale bot commented Jan 28, 2020

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. You may also mark this issue as a "discussion" and i will leave this open.

@stale stale bot added the stale There has been a lack of activity on this issue and it may be closed soon. label Jan 28, 2020
@stale
Copy link

stale bot commented Feb 4, 2020

Closing this issue after a prolonged period of inactivity. Fell free to reopen this issue, if this still affecting you.

@stale stale bot closed this as completed Feb 4, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
os: android question stale There has been a lack of activity on this issue and it may be closed soon.
Projects
None yet
Development

No branches or pull requests

4 participants