利用剪切板,添加表情到whatsapp

來源: 簡書
作者:Jason_風(fēng)箏
時間:2020-12-14
18207
本文我們來討論討論怎么添加表情到whatsapp,也可以看whatsapp的Guide。

YjE5N2I5Ny5qcGVn.jpg

寫在前面

雖然在國內(nèi)用whatsapp的人不多,但在香港等地方大部分還是用whatsapp,這一章我們來討論討論怎么添加表情到whatsapp,也可以看whatsapp的Guide

它里面主要介紹的是利用它的lib來集成,有現(xiàn)成的案例,這里就不多說了。

我們主要談?wù)撓略趺蠢眉羟邪鍋硖砑樱簿褪堑诙N方法。當(dāng)然這添加的表情也是來自本地的,如果需要從server獲取也可以,但相對來說會麻煩一點,但確實是可以的。

·圖片的格式、大小等,請看guide,本文只討論發(fā)送到whatsapp

開始

·在Info.plist中添加,

<key>LSApplicationQueriesSchemes</key>

    <array>

        <string>whatsapp</string>

    </array>

我們都知道LSApplicationQueriesSchemes的作用是為了雙方測試。加這個可以判斷你的手機(jī)是否安裝了whatsapp。

判斷安裝,如果沒有安裝whatsapp return false;

func canSend() -> Bool {

        return UIApplication.shared.canOpenURL(URL(string: "whatsapp://")!)

}

使用下面描述的結(jié)構(gòu)將貼紙數(shù)據(jù)格式化為JSON對象,

{

  "ios_app_store_link" : "String",

  "android_play_store_link" : "String",

  "identifier" : "String",

  "name" : "String",

  "publisher" : "String",

  "tray_image" : "String", (Base64 representation of the PNG, not WebP, data of the tray image)

  "stickers" : [

    {

      "image_data" : "String", (Base64 representation of the WebP, not PNG, data of the sticker image)

      "emojis" : ["String", "String"] (Array of emoji strings. Maximum of 3 emoji)

    }

  ]

}

·重要

tray_image使用PNG,而image_data使用WebP,再轉(zhuǎn)成data string的形式

一次只能發(fā)送一個貼紙包

·步驟

我們需要先將數(shù)據(jù)復(fù)制到Pasteboard

然后再打開whatsapp://stickerPack,它會跳到whatsapp,之后whatsapp會自己從Pasteboard中獲取sticker

代碼

import UIKit


struct Interoperability {

    // whatsapp guide 中說不要包含這個Id.

    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 = "https://itunes.apple.com....";

    static var AndroidStoreLink: String = "https://play.google.com/....";


    static func canSend() -> Bool {

        return UIApplication.shared.canOpenURL(URL(string: "whatsapp://")!)

    }

    

    // 這個json 的格式就是上面的格式, 有一點值得說的是:tray_image / image_data 需要轉(zhuǎn)成data string 來存儲 

    // 就是要把你的image 轉(zhuǎn)化成data,再轉(zhuǎn)換成String.

    static func send(json: [String: Any]) -> Bool {

        // 判斷id 是否合法

        if let bundleIdentifier = Bundle.main.bundleIdentifier {

            if bundleIdentifier.contains(DefaultBundleIdentifier) {

                fatalError("Your bundle identifier must not include the default one.");

            }

        }


        let pasteboard: UIPasteboard = 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

        }

        // 從iOS 10 開始Pasteboard,有新的api

        if #available(iOS 10.0, *) {

            pasteboard.setItems([[PasteboardStickerPackDataType: dataToSend]], options: [UIPasteboardOption.localOnly: true, UIPasteboardOption.expirationDate: NSDate(timeIntervalSinceNow: PasteboardExpirationSeconds)])

        } else {

            pasteboard.setData(dataToSend, forPasteboardType: PasteboardStickerPackDataType)

        }

        DispatchQueue.main.async {

            if canSend() {

                if #available(iOS 10.0, *) {

                    UIApplication.shared.open(WhatsAppURL, options: [:], completionHandler: nil)

                } else {

                    UIApplication.shared.openURL(WhatsAppURL)

                }

            }

        }

        return true

    }


}

從server來

·如果表情是根據(jù)api get獲得。一般表情包很小的,可以讓server把表情包轉(zhuǎn)換成data string,再派過來。以類似上面send方法中的json格式,然后也可以,這樣的話server要做的事就會多一點。

·如果server不想轉(zhuǎn)成data string,那可以讓server先將表情包zip,call api get到后,再unzip.unzip后自己再轉(zhuǎn)換成data string,這樣也可以。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于簡書,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多