@nico-iaco/react-native-whatsapp-stickers
Version:
create sticker packs for whatsapp with your react-native app
236 lines (193 loc) • 6.16 kB
Markdown
`$ npm install react-native-whatsapp-stickers --save`
or
`$ yarn add react-native-whatsapp-stickers`
For React Native versions < 0.60 use version 1.+ of this library and checkout the corresponding README file.
Please make sure you follow the requirements for sticker packs from WhatsApp. You can find them [here for iOS](https://github.com/WhatsApp/stickers/tree/master/iOS#sticker-art-and-app-requirements) and [here for Android](https://github.com/WhatsApp/stickers/tree/master/Android#sticker-art-and-app-requirements).
1. Under `Build Settings` section `Build Options` set `Always Embed Swift Started Libraries` to `true`
2. Make sure you have the following under `library search paths`
```
$(inherited)
$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)
```
- Add the following to your `Info.plist`
```
<key>LSApplicationQueriesSchemes</key>
<array>
<string>whatsapp</string>
</array>
```
1. make sure they follow the guidelines from WhatsApp
2. Put the images somewhere in your project directory
3. drag and drop them into your XCode Project (recommended to a new folder)
4. check `Copy Items If Needed` in the dialogue that pops up and click `Finish`
**Done 🎉**
### Android
1. Create a `contents.json` file in `yourproject -> android -> app -> src -> main -> assets` following the following scheme.
**Improtant! Including dots in the identifier is causing troubles.**
```json
{
"android_play_store_link": "https://play.google.com/store/apps/details?id=com.myapp",
"ios_app_store_link": "https://itunes.apple.com/app/myapp/id123456",
"sticker_packs": [
{
"identifier": "myprojectstickers",
"name": "MyProject Stickers",
"publisher": "John Doe",
"tray_image_file": "tray_icon.png",
"publisher_email": "contact@myproject.com",
"publisher_website": "https://myproject.com",
"privacy_policy_website": "https://myproject.com/legal",
"license_agreement_website": "https://myproject.com/license",
"stickers": [
{
"image_file": "01_sticker.webp",
"emojis": ["✌️"]
},
{
"image_file": "02_sticker.webp",
"emojis": ["😍","😻"]
},
{
"image_file": "03_sticker.webp",
"emojis": ["😎"]
}
]
}
]
}
```
2. Place the WebP images in a folder with **with the same name** that you defined as `identifier` in the object above under the same directory. So your `assets` folder has the following structure:
```
assets
+-- contents.json
+-- identifier
| +-- 01_sticker.webp
| +-- 02_sticker.webp
| +-- 03_sticker.webp
```
3. Add `noCompress` to your app `build.gradle` in `yourproject -> android -> app`
```gradle
android {
...
aaptOptions {
noCompress "webp"
}
...
```
**Done 🎉**
Check if WhatsApp is available
```javascript
RNWhatsAppStickers.isWhatsAppAvailable()
.then(isWhatsAppAvailable => console.log('available:', isWhatsAppAvailable))
.catch(e => console.log(e))
```
1. Create a sticker pack
```javascript
import RNWhatsAppStickers from "react-native-whatsapp-stickers"
const config = {
identifier: '',
name: '',
publisher: '',
trayImageFileName: '',
publisherEmail: '',
publisherWebsite: '',
privacyPolicyWebsite: '',
licenseAgreementWebsite: '',
}
RNWhatsAppStickers.createStickerPack(config)
.then(() => console.log('success'))
.catch(e => console.log(e))
```
2. Add sticker
```javascript
RNWhatsAppStickers.addSticker('stickername.png', ['😎'])
.then(() => console.log('success'))
.catch(e => console.log(e))
```
3. Send to WhatsApp
```javascript
RNWhatsAppStickers.send()
.then(() => console.log('success'))
.catch(e => console.log(e))
```
You are already good to go with the sticker pack creation if you followed the `Integration` part.
1. Send to WhatsApp where `name` and `identifier` represent the values you defined in `contents.json`
```javascript
RNWhatsAppStickers.send('identifier', 'name')
.then(() => console.log('success'))
.catch(e => console.log(e))
```
```javascript
import { Platform } from "react-native";
import RNWhatsAppStickers from "react-native-whatsapp-stickers"
import { stickerConfig } from "./stickerConfig"
const { stickers, ...packConfig } = stickerConfig
RNWhatsAppStickers.isWhatsAppAvailable()
.then(isWhatsAppAvailable => {
if (isWhatsAppAvailable) {
if (Platform.OS === 'ios') {
return RNWhatsAppStickers.createStickerPack(packConfig)
.then(() => {
const promises = stickers.map(item =>
RNWhatsAppStickers.addSticker(item.fileName, item.emojis)
)
Promise.all(promises).then(() => RNWhatsAppStickers.send())
})
.catch(e => console.log(e))
}
return RNWhatsAppStickers.send('myprojectstickers', 'MyProject Stickers')
}
return undefined
})
.catch(e => console.log(e))
```
```javascript
export const stickerConfig = {
identifier: 'myprojectstickers',
name: 'MyProject Stickers',
publisher: 'John Doe',
trayImageFileName: 'tray_icon.png',
publisherEmail: 'contact@myproject.com',
publisherWebsite: 'https://myproject.com',
privacyPolicyWebsite: 'https://myproject.com/legal',
licenseAgreementWebsite: 'https://myproject.com/license',
stickers: [
{
fileName: '01_sticker.png',
emojis: ['✌️'],
},
{
fileName: '02_sticker.png',
emojis: ['😍', '😻'],
},
{
fileName: '03_sticker.png',
emojis: ['😎']
}
]
}
```
<details>
<summary>ld: warning: Could not find auto-linked library 'swiftFoundation'</summary>
- Create an empty swift file in your project
`xCode -> Click File -> new File -> empty.swift`
**Important** Click yes when it asks for creating bridge-headers
</details>
- Native implementation of method to check if WhatsApp is installed
- Consistend react-native api