iOS/WAStickersThirdParty/Interoperability.swift (42 lines of code) (raw):

// // Copyright (c) WhatsApp Inc. and its affiliates. // All rights reserved. // // This source code is licensed under the BSD-style license found in the // LICENSE file in the root directory of this source tree. // import UIKit struct Interoperability { private static let DefaultBundleIdentifier: String = "WA.WAStickersThirdParty" private static let PasteboardExpirationSeconds: TimeInterval = 60 private static let PasteboardStickerPackDataType: String = "net.whatsapp.third-party.sticker-pack" private static let WhatsAppURL: URL = URL(string: "whatsapp://stickerPack")! static var iOSAppStoreLink: String? static var AndroidStoreLink: String? static func canSend() -> Bool { return UIApplication.shared.canOpenURL(URL(string: "whatsapp://")!) } static func send(json: [String: Any]) -> Bool { if Bundle.main.bundleIdentifier?.contains(DefaultBundleIdentifier) == true { fatalError("Your bundle identifier must not include the default one.") } let pasteboard = UIPasteboard.general var jsonWithAppStoreLink: [String: Any] = json jsonWithAppStoreLink["ios_app_store_link"] = iOSAppStoreLink jsonWithAppStoreLink["android_play_store_link"] = AndroidStoreLink guard let dataToSend = try? JSONSerialization.data(withJSONObject: jsonWithAppStoreLink, options: []) else { return false } if #available(iOS 10.0, *) { pasteboard.setItems([[PasteboardStickerPackDataType: dataToSend]], options: [UIPasteboard.OptionsKey.localOnly: true, UIPasteboard.OptionsKey.expirationDate: NSDate(timeIntervalSinceNow: PasteboardExpirationSeconds)]) } else { pasteboard.setData(dataToSend, forPasteboardType: PasteboardStickerPackDataType) } DispatchQueue.main.async { if canSend() { if #available(iOS 10.0, *) { UIApplication.shared.open(WhatsAppURL) } else { UIApplication.shared.openURL(WhatsAppURL) } } } return true } static func copyImageToPasteboard(image: UIImage) { UIPasteboard.general.image = image } }