github.com/cozy/cozy-stack@v0.0.0-20240327093429-939e4a21320e/docs/accept-from-flagship.md (about) 1 [Table of contents](README.md#table-of-contents) 2 3 # Accept from Flagship 4 5 Flagship app is a mobile app that allows users to access all their Cozy from their phone (see [here](https://github.com/cozy/cozy-flagship-app) for more details). 6 7 When the Flagship app is installed on the user's phone, then they can share a document with the app to upload it in their Cozy. 8 9 When doing so, the user will have to chose which cozy-app should receive the shared document from a list of elligible cozy-apps (i.e. cozy-drive, mespapiers, etc) 10 11 To be elligible, a cozy-app has to declare what it can receive. This is done in its `manifest.webapp` file. 12 13 ## The manifest 14 15 The `manifest.webapp` file is used to declare the cozy-app's ability to receive files 16 17 ### `accept_from_flagship` field 18 19 First field to declare is `accept_from_flagship`. It should be set to `true` to make the cozy-app visible in the list of elligible cozy-apps 20 21 Example: 22 ```json 23 { 24 "name": "Drive", 25 "name_prefix": "Cozy", 26 "slug": "drive", 27 //... 28 "accept_from_flagship": true, 29 //... 30 } 31 ``` 32 33 ### `accept_documents_from_flagship` field 34 35 Declaring `accept_from_flagship: true` is not enough to be able to receive files from the Flagship app. The app should also declare which kind of files it can handle. 36 37 The field `accept_documents_from_flagship` is an object containing all criteria that a file or a list of files should meet to be sharable with the cozy-app. 38 39 #### `accepted_mime_types` criteria 40 41 `accepted_mime_types` is used to declare each file type that can be handled by the cozy-app. 42 43 This field should contain a list of all mime types that are supported by the cozy-app. 44 45 Example of a cozy-app accepting PDF, and pictures: 46 ```json 47 { 48 //... 49 "accept_from_flagship": true, 50 "accept_documents_from_flagship": { 51 "accepted_mime_types": ["application/pdf", "image/jpeg", "image/png"], 52 } 53 } 54 ``` 55 56 In order to accept all files types, it is possible to use `'*/*'` mime type 57 58 Example of a cozy-app accepting all types of documents: 59 ```json 60 { 61 //... 62 "accept_from_flagship": true, 63 "accept_documents_from_flagship": { 64 "accepted_mime_types": ["*/*"], 65 } 66 } 67 ``` 68 69 #### `max_number_of_files` criteria 70 71 `max_number_of_files` is used to declare the maximum number of files that can be shared simultaneously with the cozy-app. 72 73 Example of a cozy-app accepting only 1 document at a time: 74 ```json 75 { 76 //... 77 "accept_from_flagship": true, 78 "accept_documents_from_flagship": { 79 "max_number_of_files": 10, 80 } 81 } 82 ``` 83 84 Example of a cozy-app accepting up to 10 documents at a time: 85 ```json 86 { 87 //... 88 "accept_from_flagship": true, 89 "accept_documents_from_flagship": { 90 "max_number_of_files": 10, 91 } 92 } 93 ``` 94 95 Setting a limit is mandatory. The Flagship app doesn't support unlimited file number. 96 97 #### `max_size_per_file_in_MB` criteria 98 99 `max_size_per_file_in_MB` is used to declare the maximum size of files that can be handled by the cozy-app. 100 101 The size limit is declared in MB. 102 103 The size limit is per file. If multiple files are shared with the cozy-app, then each file size should be under that limit. 104 105 Example of a cozy-app accepting documents up to 10MB: 106 ```json 107 { 108 //... 109 "accept_from_flagship": true, 110 "accept_documents_from_flagship": { 111 "max_size_per_file_in_MB": 10, 112 } 113 } 114 ``` 115 116 Setting a limit is mandatory. The Flagship app doesn't support unlimited file size. 117 118 #### `route_to_upload` criteria 119 120 `route_to_upload` is used to declare the cozy-app's route that should be used by the Flagship app when sharing files with the cozy-app. 121 122 The app should then implement a page on that route that will be responsible to handle those documents (i.e. ask the user where to save the document, analyse the document etc) 123 124 Example: 125 ```json 126 { 127 //... 128 "accept_from_flagship": true, 129 "accept_documents_from_flagship": { 130 "route_to_upload": "/#/upload?fromFlagshipUpload=true", 131 } 132 } 133 ``` 134 135 #### The complete manifest 136 137 Here is an example of a `manifest.webapp` file for an app accepting only up to 10 picture files, with a maximum of 10MB: 138 ```json 139 { 140 "name": "Drive", 141 "name_prefix": "Cozy", 142 "slug": "drive", 143 //... 144 "accept_from_flagship": true, 145 "accept_documents_from_flagship": { 146 "accepted_mime_types": ["image/jpeg", "image/png"], 147 "max_number_of_files": 10, 148 "max_size_per_file_in_MB": 10, 149 "route_to_upload": "/#/upload?fromFlagshipUpload=true" 150 } 151 //... 152 } 153 ``` 154 155 Note that `accept_from_flagship` may seems to be redundant if `accept_documents_from_flagship` exists. This field is an optimization to allow cozy-client queries to filter only cozy-apps that accept sharings. 156 157 ## The API 158 159 When a cozy-app is selected by the user to receive a shared file, this cozy-app is opened using the `route_to_upload` route. 160 161 Then the cozy-app can use the Flagship OsReceive API to handle shared files. 162 163 This API is documented [here](https://github.com/cozy/cozy-flagship-app/tree/master/src/app/domain/osReceive/os-receive-api.md)