Parley 3.0.1

Parley 3.0.1

Stefan JongejanAlex KokWebuildapps HQ维护。



 
依赖于
Alamofire~> 4.8.0
AlamofireImage~> 3.5.2
AlamofireObjectMapper~> 5.2.0
TrustKit~> 1.6.1
SwiftGifOrigin~> 1.7.0
ReachabilitySwift~> 4.3.1
MarkdownKit~> 1.5
 

Parley 3.0.1

  • Webuildapps

Parley Messaging iOS库

通过Parley Messaging iOS库轻松设置安全的聊天。Parley SDK允许您完全自定义聊天外观,并将其无缝集成到您自己的应用程序中,为用户提供出色的体验。

注意:使用此库需要appSecret。通过联系Parley可获取appSecret

要求

  • iOS 11.0+
  • Xcode 11+
  • Swift 5+

Firebase

对于远程通知,Parley依赖于Google Firebase。如果您尚未配置Firebase,请配置Firebase(使用安装指南)。

截图

对话
Parley Parley

安装

CocoaPods是一个用于Cocoa项目的依赖项管理器。有关使用和安装说明,请访问它们的网站。要将Parley集成到您的Xcode项目中,请在您的Podfile中指定它。

pod 'Parley', '~> 3.0.1'

快速开始

按照以下步骤获取库的基础设置。

步骤 1:将 ParleyView 添加到 ViewController

ParleyView 可以手动初始化,或者直接从 Storyboard 元素完成。

手动:

打开 ViewController 并添加以下导入。

import Parley

viewDidLoad 中创建 Parley 视图的实例(例如)。

override func viewDidLoad() {
  super.viewDidLoad()

  let parleyView = ParleyView()
  parleyView.frame = self.view.frame

  self.view.addSubview(parleyView)
}

Storyboard:

向 View Controller 添加一个视图,选择“显示标识检查器”选项卡,并将“自定义类”部分修改为:

Class: ParleyView
Module: Parley

步骤 2:配置 Parley

使用 Parley.configure(_ secret: String) 配置 Parley,其中包含你的 appSecret(例如在步骤 1 中的 ViewController 中)。

Parley.configure("appSecret")

appSecret 替换为你的 Parley appSecret。可以通过联系 Parley 来获取 appSecret

步骤 3:配置 Firebase

Parley 需要使用 FCM 标记来成功处理远程通知。

FCM Token

通过你的 Firebase 实例检索到 FCM 标记后,将其传递给 Parley 实例以支持远程通知,这可以通过使用 Parley.setFcmToken(_ fcmToken: String) 完成。

Parley.setFcmToken("fcmToken")

处理远程通知

打开你的 AppDelegate 并在 didReceiveRemoteNotification 方法中添加 Parley.handle(_ userInfo: [AnyHashable: Any]) 以处理远程通知。

extension AppDelegate : UNUserNotificationCenterDelegate {

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        _ = Parley.handle(userInfo)
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        if UIApplication.shared.applicationState == .active {
            completionHandler([]) // Do not show notifications when app is in foreground
        } else {
            completionHandler([.alert, .sound])
        }
    }
}

第4步:相机使用说明

将相机和相册使用说明添加到Info.plist文件中。

<key>NSCameraUsageDescription</key>
<string>We need access to the camera to take photos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to the photo library to select photos.</string>

高级

Parley支持使用高级配置,例如指定网络、指定用户信息或启用离线消息。在所有用例中,建议在使用Parley.configure(_ secret: String)配置聊天之前应用高级配置。

网络

可以通过将ParleyNetwork设置到Parley.setNetwork(_ network: ParleyNetwork)方法中来设置网络配置。

let network = ParleyNetwork(
    url: "https://api.parley.nu/",
    path: "clientApi/v1.2/",
    pin1: "/Ukz3F1LSE8d9rpOQ29KhCO/TwsUXcjbOI09tO+D2dI=",
    pin2: "RkhWTcfJAQN/YxOR12VkPo+PhmIoSfWd/JVkg44einY="
)

Parley.setNetwork(network)

有关公共密钥固定的更多信息,请参阅OWASP网站。

自定义头信息

可以通过在ParleyNetwork中使用可选的headers参数来设置自定义头信息。该参数接受一个[String: String]字典。

注意,Parley自身使用的头信息无法被覆盖。

let headers: [String: String] = [
    "X-Custom-Header": "Custom header value"
]

let network = ParleyNetwork(
    url: "https://api.parley.nu/",
    path: "clientApi/v1.2/",
    pin1: "/Ukz3F1LSE8d9rpOQ29KhCO/TwsUXcjbOI09tO+D2dI=",
    pin2: "RkhWTcfJAQN/YxOR12VkPo+PhmIoSfWd/JVkg44einY=",
    headers: headers
)

Parley.setNetwork(network)

用户信息

可以通过应用授权令牌到Parley.setUserInformation(_ authorization: String)方法来识别和加密聊天。可以按照授权头文档轻松生成此令牌。

let authorization = "ZGFhbnw5ZTA5ZjQ2NWMyMGNjYThiYjMxNzZiYjBhOTZmZDNhNWY0YzVlZjYzMGVhNGZmMWUwMjFjZmE0NTEyYjlmMDQwYTJkMTJmNTQwYTE1YmUwYWU2YTZjNTc4NjNjN2IxMmRjODNhNmU1ODNhODhkMmQwNzY2MGYxZTEzZDVhNDk1Mnw1ZDcwZjM5ZTFlZWE5MTM2YmM3MmIwMzk4ZDcyZjEwNDJkNzUwOTBmZmJjNDM3OTg5ZWU1MzE5MzdlZDlkYmFmNTU1YTcyNTUyZWEyNjllYmI5Yzg5ZDgyZGQ3MDYwYTRjZGYxMzE3NWJkNTUwOGRhZDRmMDA1MTEzNjlkYjkxNQ"

Parley.setUserInformation(authorization)

附加信息

此外,您还可以使用Parley.setUserInformation()方法中的additionalInformation参数设置用户的附加信息。该参数接受一个[String: String]字典。

let authorization = "ZGFhbnw5ZTA5ZjQ2NWMyMGNjYThiYjMxNzZiYjBhOTZmZDNhNWY0YzVlZjYzMGVhNGZmMWUwMjFjZmE0NTEyYjlmMDQwYTJkMTJmNTQwYTE1YmUwYWU2YTZjNTc4NjNjN2IxMmRjODNhNmU1ODNhODhkMmQwNzY2MGYxZTEzZDVhNDk1Mnw1ZDcwZjM5ZTFlZWE5MTM2YmM3MmIwMzk4ZDcyZjEwNDJkNzUwOTBmZmJjNDM3OTg5ZWU1MzE5MzdlZDlkYmFmNTU1YTcyNTUyZWEyNjllYmI5Yzg5ZDgyZGQ3MDYwYTRjZGYxMzE3NWJkNTUwOGRhZDRmMDA1MTEzNjlkYjkxNQ"

let additionalInformation = [
    kParleyAdditionalValueName: "John Doe",
    kParleyAdditionalValueEmail: "[email protected]",
    kParleyAdditionalValueAddress: "Randstad 21 30, 1314, Nederland"
]

Parley.setUserInformation(authorization, additionalInformation: additionalInformation)

清除用户信息

Parley.clearUserInformation()

离线消息

可以通过 Parley.enableOfflineMessage(_ dataSource: ParleyDataSource) 方法启用离线消息。 ParleyDataSource 是一个协议,可以用来创建自己的(安全)数据源。此外,Parley 还提供了一个名为 ParleyEncryptedDataSource 的加密数据源,它使用 AES128 加密。

if let key = "1234567890123456".data(using: .utf8), let dataSource = try? ParleyEncryptedDataSource(key: key) {
    Parley.enableOfflineMessaging(dataSource)
}

禁用离线消息

Parley.disableOfflineMessaging()

自定义

回调

Parley 提供了一个 ParleyViewDelegate,可以在 ParleyView 上设置以接收回调。

self.parleyView.delegate = self
extension ChatViewController: ParleyViewDelegate {

    func didSentMessage() {
        debugPrint("ChatViewController.didSentMessage")
    }
}

外观

图片

默认情况下启用图片上传。

self.parleyView.imagesEnabled = false

外观

Parley 提供了一个 ParleyViewAppearance,可以在 ParleyView 上设置来自定义聊天外观。 ParleyViewAppearance 可以使用常规、斜体和粗体字体初始化,这些都可以自定义。请参考 ChatViewController.swift 以了解如何使用 ParleyViewAppearance 的示例。

let appearance = ParleyViewAppearance(fontRegularName: "Montserrat-Regular", fontItalicName: "Montserrat-Italic", fontBoldName: "Montserrat-Bold")

self.parleyView.appearance = appearance

示例

现代 WhatsApp
Parley Parley

授权

Parley 采用 MIT 授权。有关更多信息,请参阅 LICENSE 文件。