Open lizhuoyuan opened 5 years ago
I guess the problem lies with the missing image files. The example folder contains the complete code, except for 2 files:
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.
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
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);
thank you~ I will try later
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>
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?
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/.
thank you I understand. If you can share facebook and share whatsapp, just fine~
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.
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
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?
maybe show url to google store , I think it is the same as text.
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.
Can you upload all the files? I don't know how to use it