如何通过Swift的api从我的应用程序共享自定义贴纸到telegram应用程序?



我正在寻找一种干净的方式来分享我的自定义贴纸从我的应用程序使用电报api。我一直在寻找电报文件关于如何发送自定义贴纸与适当的方式通过电报阅读。我在这里找到了如何创建贴纸集->https://core.telegram.org/bots/api stickerset,这里是如何自己制作贴纸->https://core.telegram.org/bots/api stickerset

这是我准备粘贴集和贴纸的代码

func handleStickersForTelegram(completionHandler: @escaping (Bool) -> Void) {

StickerPackManager.queue.async {
var json: [String: Any] = [:]


json["name"] = self.name
json["title"] = self.publisher
json["contains_masks"] = false
if self.animated == true {
json["is_animated"] = true
}
var stickersArray: [[String: Any]] = []


for sticker in 1...self.stickers.count {

var stickerDict: [String: Any] = [:]
print("stickerTest", self.stickers.count )
stickerDict["file_id"] = "(StickerBaseURL)/(self.identifier)/(sticker).webp"
stickerDict["set_name"] = self.name
stickerDict["file_unique_id"] = "(self.identifier)/(sticker).webp"
stickerDict["width"] = 96
stickerDict["height"] = 96

if self.animated == true {
stickerDict["is_animated"] = true

}
stickersArray.append(stickerDict)
}

json["stickers"] = stickersArray

let result = Interoperability.sendToTelegram(json: json)
DispatchQueue.main.async {
completionHandler(result)
}
}
}

在调用Interoperability.sendToTelegram(json:json)之后,我试图使该功能像我分享自定义贴纸到Whatsapp一样,但没有找到适当的信息来做到这一点,这是我的Whatsapp共享功能。

struct Interoperability {
private static let DefaultBundleIdentifier: String = "MyBundleIdentifier"
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 func send(json: [String: Any]) -> Bool {
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
}
if #available(iOS 10.0, *) {
pasteboard.setItems([[PasteboardStickerPackDataType: dataToSend]], options: [UIPasteboard.OptionsKey.localOnly: true, UIPasteboard.OptionsKey.expirationDate: NSDate(timeIntervalSinceNow: PasteboardExpirationSeconds)])
} else {
pasteboard.addItems([[PasteboardStickerPackDataType: dataToSend]])
}

DispatchQueue.main.async {
if UIApplication.shared.canOpenURL(URL(string: "whatsapp://")!) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(WhatsAppURL, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(WhatsAppURL)
}
}
}
return true
}
}

这是我为电报制作相同的方法,但没有成功!我在

上面添加了一个结构体
struct Interoperability {
private static let stickerSetDataType: String = "stickers.createStickerSet"
private static let testTelegram: URL = URL(string: "tg://StickerSet")!

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

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
guard let dataToSend = try? JSONSerialization.data(withJSONObject: json, options: []) else {
return false
}

pasteboard.addItems([[stickerSetDataType: dataToSend]])

DispatchQueue.main.async {
if UIApplication.shared.canOpenURL(URL(string: "tg://")!) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(testTelegramURL, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(testTelegramURL)
}
}
}

return true
}
}

它打开电报,但什么也没发生没有贴纸,没有迹象表明电报读我的贴纸。我不知道我是否用错误的方式保存了UIPasteboard中的贴图数据,或者这些信息是错误的。

private static let stickerSetDataType: String = "stickers.createStickerSet"
private static let testTelegram: URL = URL(string: "tg://StickerSet")!

Telegram应用程序不像whatsapp一样工作。您需要通过以下链接在电报上添加您的贴纸包

https://www.makeuseof.com/tag/how-to-make-telegram-stickers/

一旦你在电报上添加了你的包,那么你可以使用你的包名在电报上添加贴纸包,使用以下代码

if let url = URL(string: "https://telegram.me/addstickers/ClassicAlice") {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url)
} else {
UIApplication.shared.openURL(url)
}     
}

最新更新