-
-
Notifications
You must be signed in to change notification settings - Fork 693
Advanced topics
- ProGuard
- How to use self-signed certificates
- Retrying failed uploads
- Uploading only when a connection is available
- Custom HTTP stack implementation
Add this to your ProGuard configuration:
-keep class net.gotev.uploadservice.** { *; }
This keeps all the classes of the library. If you want to fine tune it, you have to discover which parts of the library are you using. Open a terminal, navigate to your src
folder and execute:
grep -roh . -e 'net.gotev.uploadservice.*' | sort | uniq
This will print out something like this:
net.gotev.uploadservice.BinaryUploadRequest;
net.gotev.uploadservice.Logger;
net.gotev.uploadservice.MultipartUploadRequest;
net.gotev.uploadservice.ServerResponse;
net.gotev.uploadservice.UploadInfo;
net.gotev.uploadservice.UploadNotificationAction;
net.gotev.uploadservice.UploadNotificationConfig;
net.gotev.uploadservice.UploadService;
net.gotev.uploadservice.UploadServiceBroadcastReceiver;
net.gotev.uploadservice.UploadStatusDelegate;
net.gotev.uploadservice.ftp.FTPUploadRequest;
net.gotev.uploadservice.ftp.UnixPermissions;
net.gotev.uploadservice.okhttp.OkHttpStack;
And those are the classes you are importing. Refer to this excellent article by Jeroen Mols to discover how to improve your ProGuard configuration file based on the output you got. Beware it's a trial and error process, so you may spend some time to find the proper configuration for your case.
If in 2019+ you are still reading this, consider Let's encrypt. For security reasons, the library doesn't accept self-signed certificates by default when using HTTPS connections, but you can enable them if you need it. Read this as a last resort.
Android Upload Service tries its best to upload files. You can in fact set the maximum number of automatic upload retries before notifying an error, by calling the setMaxRetries
on the upload request. Since network on mobile devices is unreliable and it may also happen that your server is not reachable when you try to upload something, it may happen that your files are not uploaded even after 100 automatic retries (which is a bad practice btw 😄). So, what I suggest you to do is to keep a reference to the uploadID and the upload request object somewhere in your code, so you can trigger upload again by calling the startUpload
method on the request object when certain conditions (e.g. server is reachable again) are met. How to properly implement that behaviour for your specific scenario is up to you. If you can't figure it out how to do it and you need some further help, you're welcome, but that's called consulting 😃 .
If you want to start uploads or retry them based on the remote server's reachability status, ReactiveNetwork may be useful to you in combination with this library.
By default, the library uses the HttpURLConnection
stack to perform uploads. However, starting from release 2.1+, you can use also OkHttp
(check Setup wiki page) or provide your own implementation! To provide a new stack implementation, you should implement the following interfaces in three classes:
- HttpStack
- HttpStackConnection
- BodyWriter
Check interfaces source codes and default implementation. You can also see how to create a completely new project which provides a custom HTTP stack by looking at how the uploadservice-okhttp
module is made.