$ npm install react-native-whatsapp-stickers --save
or
$ yarn add react-native-whatsapp-stickers
- Either choose
Mostly automatic installation
orManual installation
- Follow the
Integration
guide
$ react-native link react-native-whatsapp-stickers
- In XCode, in the project navigator, right click
Libraries
βAdd Files to [your project's name]
- Go to
node_modules
βreact-native-whatsapp-stickers
and addRNWhatsAppStickers.xcodeproj
- In XCode, in the project navigator, select your project. Add
libRNWhatsAppStickers.a
to your project'sBuild Phases
βLink Binary With Libraries
- Run your project (
Cmd+R
)
- Open up
android/app/src/main/java/[...]/MainActivity.java
- Add
import com.jobeso.RNWhatsAppStickers.RNWhatsAppStickersPackage;
to the imports at the top of the file - Add
new RNWhatsAppStickersPackage()
to the list returned by thegetPackages()
method
- Append the following lines to
android/settings.gradle
:include ':react-native-whatsapp-stickers' project(':react-native-whatsapp-stickers').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-whatsapp-stickers/android')
- Insert the following lines inside the dependencies block in
android/app/build.gradle
:compile project(':react-native-whatsapp-stickers')
Important Please make sure you follow the requirements for sticker packs from WhatsApp. You can find them here for iOS and here for Android.
- Under
Build Settings
sectionBuild Options
setAlways Embed Swift Started Libraries
totrue
- Make sure you have the following under
library search paths
$(inherited)
$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)
Add the following frameworks under General -> Linked Frameworks and Libraries
UIKit
CoreFoundation
QuartzCore
AssetsLibrary
ImageIO
Accelerate
MobileCoreServices
libz.tbd
- click on the + to add a new framework to
General -> Linked Frameworks and Libraries
- click on
Add other...
- navigate to
your-project/node_modules/react-native-whatsapp-stickers/iOS/Frameworks/
- select
WebP.framework
and clickOpen
- add
"$(SRCROOT)/../node_modules/react-native-whatsapp-stickers/ios"
withrecursive
inBuild Settings -> Framework Search Paths
- Add the following to your
Info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>whatsapp</string>
</array>
- make sure they follow the guidelines from WhatsApp
- Put the images somewhere in your project directory
- drag and drop them into your XCode Project (recommended to a new folder)
- check
Copy Items If Needed
in the dialogue that pops up and clickFinish
Done π
- Create a
contents.json
file inyourproject -> android -> app -> src -> main -> assets
following the following scheme. Improtant! Including dots in the identifier is causing troubles.
{
"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": "[email protected]",
"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": ["π"]
}
]
}
]
}
- 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 yourassets
folder has the following structure:
assets
+-- contents.json
+-- identifier
| +-- 01_sticker.webp
| +-- 02_sticker.webp
| +-- 03_sticker.webp
- Add
noCompress
to your appbuild.gradle
inyourproject -> android -> app
android {
...
aaptOptions {
noCompress "webp"
}
...
Done π
Check if WhatsApp is available
RNWhatsAppStickers.isWhatsAppAvailable()
.then(isWhatsAppAvailable => console.log('available:', isWhatsAppAvailable))
.catch(e => console.log(e))
- Create a sticker pack
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))
- Add sticker
RNWhatsAppStickers.addSticker('stickername.png', ['π'])
.then(() => console.log('success'))
.catch(e => console.log(e))
- Send to WhatsApp
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.
- Send to WhatsApp where
name
andidentifier
represent the values you defined incontents.json
RNWhatsAppStickers.send('identifier', 'name')
.then(() => console.log('success'))
.catch(e => console.log(e))
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))
export const stickerConfig = {
identifier: 'myprojectstickers',
name: 'MyProject Stickers',
publisher: 'John Doe',
trayImageFileName: 'tray_icon.png',
publisherEmail: '[email protected]',
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: ['π']
}
]
}
ld: warning: Could not find auto-linked library 'swiftFoundation'
- 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
- Native implementation of method to check if WhatsApp is installed
- Consistend react-native api