share_api icon indicating copy to clipboard operation
share_api copied to clipboard

example can not work

Open lizhuoyuan opened this issue 7 years ago • 12 comments

Can you upload all the files? I don't know how to use it

lizhuoyuan avatar Dec 04 '18 07:12 lizhuoyuan

I guess the problem lies with the missing image files. The example folder contains the complete code, except for 2 files:

  • assets/image.jpg, and
  • assets/image.png

Add those files into the assets folder (create it first if it doesn't exist) directly under example directory.

If you want to use different name or folder, you can refer to this page on the Flutter docs: https://flutter.io/docs/development/ui/assets-and-images

I intend to replace both with a placeholder image and upload them in the example as well for the next version.

If you have any more problem I'll be happy to help.

albertalrisa avatar Dec 04 '18 09:12 albertalrisa

I used network image this is my code:

var response = await http.get(imgUrl);
        var composer = FacebookStoryComposer(
          backgroundAsset: response.bodyBytes,
          contentUrl: contentUrl,
        );
        ShareApi.viaFacebook.setAppId("0000000000000000");
        ShareApi.viaFacebook.shareToStory(composer).then((response) {
          print('Facebook $response');
        });

and this is error:

E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): Failed to handle method call
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:604)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:578)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:416)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at com.albertalrisa.flutter.plugins.shareapi.intents.Facebook.shareToStory(Facebook.kt:46)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at com.albertalrisa.flutter.plugins.shareapi.intents.Facebook.execute(Facebook.kt:18)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at com.albertalrisa.flutter.plugins.shareapi.ShareApiPlugin.onMethodCall(ShareApiPlugin.kt:87)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:200)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at android.os.Looper.loop(Looper.java:160)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at android.app.ActivityThread.main(ActivityThread.java:6863)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
E/MethodChannel#com.albertalrisa.flutter.plugins/share_api(26375): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I/flutter (26375): PlatformException(error, Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference, null)
I/flutter (26375): Facebook 3

lizhuoyuan avatar Dec 04 '18 09:12 lizhuoyuan

Ah I see. I haven't tried to use the body of an http response as the content. I'll look into this. Meanwhile, you might want to try this implementation. This is what I use myself with this plugin to share image obtained from the network. However, this implementation rely on flutter_cache_manager package.

final cacheManager = await CacheManager.getInstance();
var imageFile = await cacheManager.getFile(imageUrl);

var shareAble = imageFile.readAsBytesSync();
var shareResult = ShareResult.failed;

var story = FacebookStoryComposer(
    backgroundAsset: shareAble, backgroundMediaType: 'image/jpg');
shareResult = await ShareApi.viaFacebook.shareToStory(story);

albertalrisa avatar Dec 04 '18 09:12 albertalrisa

thank you~ I will try later

lizhuoyuan avatar Dec 04 '18 11:12 lizhuoyuan

I think I need your help . when I add

      <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.com.albertalrisa.share_api"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

image

then

java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs
	at com.android.builder.core.AndroidBuilder.mergeManifestsForApplication(AndroidBuilder.java:540)
	at com.android.build.gradle.tasks.MergeManifests.doFullTaskAction(MergeManifests.java:173)
	at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106)
	at sun.reflect.GeneratedMethodAccessor948.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
	at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
	at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
	at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
	at java.lang.Thread.run(Thread.java:745)


I used advanced_share too , it can share to whatsapp. It's manifest also has

And , I can't share Image and Text to Factbook? I can only share one Picture?

lizhuoyuan avatar Dec 05 '18 05:12 lizhuoyuan

I'm afraid this occurs because both plugins use FileProvider in the manifest. Can you share the full manifest file?

For Facebook, right now it is only capable of sharing to Facebook (and Instagram) Story, which does not support adding text. This is inline with their documentation, which can be found here: https://developers.facebook.com/docs/sharing/sharing-to-stories/.

albertalrisa avatar Dec 05 '18 06:12 albertalrisa

thank you I understand. If you can share facebook and share whatsapp, just fine~

lizhuoyuan avatar Dec 05 '18 14:12 lizhuoyuan

Well, can you tell me what is your use case for sharing to WhatsApp? Do you need it to share text or images? I've read the docs a bit on sharing to WhatsApp and I think I can whip something up by this weekend if you need it.

albertalrisa avatar Dec 05 '18 15:12 albertalrisa

oh , sounds good! for example , I share a commodity to somebody , I want to show picture name and url of the product~ or I want to share my app to other people

lizhuoyuan avatar Dec 05 '18 15:12 lizhuoyuan

for example , I share a commodity to somebody , I want to show picture name and url of the product~

Ok, so for this one you need to share both images and text at the same time through WhatsApp right?

or I want to share my app to other people

I don't really get this one. Do you need to share the URL to download the app or is it something else?

albertalrisa avatar Dec 05 '18 15:12 albertalrisa

maybe show url to google store , I think it is the same as text.

lizhuoyuan avatar Dec 05 '18 15:12 lizhuoyuan

Can't share the dynamic news? https://developers.facebook.com/docs/sharing/android I shared success on react-native

I've read the docs a bit on sharing to WhatsApp and I think I can whip something up by this weekend if you need it.

I hope to help you if you need it.

lizhuoyuan avatar Dec 07 '18 06:12 lizhuoyuan