albertalrisa / share_api

Flutter Share API. Flutter Plugin for sharing contents to social media.
MIT License
18 stars 21 forks source link

example can not work #2

Open lizhuoyuan opened 5 years ago

lizhuoyuan commented 5 years ago

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

albertalrisa commented 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.

lizhuoyuan commented 5 years ago

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
albertalrisa commented 5 years ago

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);
lizhuoyuan commented 5 years ago

thank you~ I will try later

lizhuoyuan commented 5 years ago

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?

albertalrisa commented 5 years ago

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/.

lizhuoyuan commented 5 years ago

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

albertalrisa commented 5 years ago

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.

lizhuoyuan commented 5 years ago

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

albertalrisa commented 5 years ago

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?

lizhuoyuan commented 5 years ago

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

lizhuoyuan commented 5 years ago

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.