IDPush 1.1.0

IDPush 1.1.0

Omid Golparvar维护。



IDPush 1.1.0

  • Omid Golparvar

Swift的OneSignal助手

OneSignal对我们实施了禁令,使得无法连接以获取PlayerID。因此,我们必须独自实现设备注册到OneSignal以及其他操作的管理。


☝️之前

OneSignal的常规流程是这样的(现在也是):

  • OneSignal向手机发出请求,要求使用APNs,并给我提供设备的标识符(即Device Token)。
  • 设备向用户展示合适的消息,并获得他们的授权。然后告诉苹果,请为该设备注册并给我一个标识符。最终,当它获取到标识符后,将其交付给OneSignal客户端。
  • OneSignal客户端在收到设备标识符后,将它及其他一些信息发送到OneSignal服务器(当然,还包括一些其他信息),在本地数据库中为该设备注册一个条目,并为该设备生成一个唯一的标识符。请注意,新标识符是特定于OneSignal的,不会在其他地方使用。
  • 设备注册完成后,OneSignal服务器将其创建的OneSignal设备标识符以响应形式发送给客户端。
  • 现在OneSignal客户端知道它的标识符在OneSignal服务器中是什么。当然,它会将这些信息提供给您,以便您可以进行操作。

👇现在

现在,由于OneSignal向我们实施了禁令,伊朗的OneSignal客户端和服务器之间的通信无法建立。因此,OneSignal服务器无法知道设备的存在,从而无法为设备生成标识符。因此,我们无法使用OneSignal发送通知给用户;既不能发送普通通知,也不能发送私人通知。

那我们现在怎么办?🤔

我们必须填补OneSignal客户端和服务器之间的空白。这就是在它们之间建立一个框架,接收客户端的请求,并将其传递给OneSignal服务器。这日子是怎么过的呀?!...😕


使用说明

ardiyoosh 上创建项目并获取项目ID

开始使用本库的第一步是,在 ardiyoosh 系统上创建项目并获取 projectID

⚠️目前您还不能创建项目!但是几天后系统将对所有用户开放。


安装并将其添加到项目中

您可以使用 CocoaPod 很容易地将此库添加到您的项目中。

pod 'IDPush'

之后在您的代码中,为了使用它,请按如下方式进行 import

import IDPush

配置

为了进行配置,您首先需要在我们的网站上注册,创建一个项目并添加所需的信息。之后系统会为您提供一个 projectID。现在您可以在 iOS 应用程序中使用这个 projectID 来配置库。

IDPush.Setup(projectID: "abcdefghijklmnopqrstuvwxyz")

执行任务

执行任务的通用方法如下

IDPush.Perform(action: IDPushAction, then callback: (IDPushActionError?, Any?) -> Void)
  • 参数 action 类型为 IDPushAction,实际上它是该 enum 中的某个选项
public enum IDPushAction {
    case addDevice(token: String)
    case subscribe
    case unsubscribe
    case setTags(tags: [String: Any])
    case editDevice(parameters: [String: Any])
}
  • 参数 callback 类型为 (IDPushActionError?, Any?) -> Void,实际上它是一个返回操作结果的 Closure。它有两个参数。第一个指定可能的错误,第二个指定可能的数据。可能的错误包括以下几种
public enum IDPushActionError: Error, CustomStringConvertible {
    case missingDeviceToken
    case missingPlayerID
    case isNotConfigured
    case invalidResponse
    case custom(message: String)
}

获取设备万里信号标识

如果一切正常且没有问题,并且设备通过服务器顺利注册到万里信号,您可以使用以下代码获取相应的万里信号 PlayerID

let playerID = IDPush.GetPlayerID()

⚠️请注意,此方法返回的是类型为 String? 的值;如果出现问题,或者设备未能正确注册,则此变量的值将为 nil



补充说明

总体来说,Apple Push Notification 的实施过程如下。

在项目中需要的设置

在 Xcode 中,在项目整体设置部分,我们进入 Capabilities,然后选择 Push Notifications,Background Mode,并从 Background Mode 的子选项中选择 Remote Notifications。


配置库以供使用

首先,导入库。

import IDPush

然后,在您的项目中,使用以下代码配置库和您的 projectID

IDPush.Setup(projectID: "abcd...")

使用 iOS 系统 API 配置软件

在应用程序中,您需要告诉系统应用程序需要使用 Push Notification 功能,并执行相关的操作。

通常,这一过程在 AppDelegate 文件中完成,以便在应用程序打开时执行所需的工作。

下面的代码块包含用于注册设备以获取用于APNS的唯一标识符的代码,以及用于向用户展示通知的软件注册代码。为此,系统首先请求用户展示通知的权限,然后根据用户的权限展示或隐藏通知。

application.registerForRemoteNotifications()
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (_, _) in
    print("Permission granted: \(granted)")
}

上述代码适用于iOS 10及以上版本。从iOS 10开始,引入并添加了一个新的框架,必须使用它。所以不要忘记这一点。

import UserNotifications

⚠️请注意⚠️

如果您的应用程序针对iOS 10以下的版本,代码会有所不同。您可以通过互联网进行简单搜索来找到适用于旧版iOS的所需代码。


获取设备标识符并使用它

UIApplicationDelegate 中有一个用于此目的的总方法并可使用

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let tokenChars = (deviceToken as NSData).bytes.bindMemory(to: CChar.self, capacity: deviceToken.count)
    var tokenString = ""
    for i in 0..<deviceToken.count {
        tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
    }
    print("APNs Token:", tokenString)

    IDPush.Perform(action: .addDevice(token: tokenString)) { (error, data) in
        if let error = error {
            print("IDPush.AddDevice: Error: \(error.description)")
            return
        }

        guard let playerID = IDPush.GetPlayerID() else { return }
        print("IDPush.AddDevice: Done: \(playerID)")
    }
}

在这段代码中,我们使用 IDPushaddDevice(token: String) 动作注册通过该方法获得的标识符。如果 Closure 继续执行没有发生错误,那么可以使用 guard let ... else { ... } 来检查和接收该设备的 playerID 和单点加密信号。


完成

😎