BreinApi 0.1.3

BreinApi 0.1.3

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后更新2016年8月
SPM支持 SPM

Marco Recchioni 维护。



 
依赖项
Alamofire~> 3.4
IDZSwiftCommonCrypto= 0.7.3
 

BreinApi 0.1.3

  • 作者
  • Marco

BreinApi

Breinify API Java Library

Breinify 的 DigitalDNA API 让您直接触手可及基于动态行为的人和驱动数据。

分步介绍

Breinify 的 DigitalDNA 是什么

Breinify 的 DigitalDNA API 让您直接触手可及基于动态行为的人和驱动数据。我们相信,在许多情况下,个性化是一个优秀用户体验的关键组件。鉴于互联网上可获得的所有数据,应该可以轻松地为每位访问者提供独特的体验,但是,有时您可能会发现这非常困难。

得益于 Breinify 的 DigitalDNA,现在您能够根据访问者的需求调整您的在线存在,并 提供独特的体验。让我们一步一步地通过一个简单的例子。

要运行示例项目,首先克隆仓库,并在示例目录中运行 pod install

要求

  • iOS 8.0+
  • Xcode 7.3+
  • AppCode 2016

依赖项

BreinApi 包括以下两个库

  • Alamofire
  • IDZSwiftCommonCrypto

许可

BreinApi 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。

使用

步骤 1:请求 API 密钥

要使用此库,您需要一个有效的 API 密钥,您可以在 https://www.breinify.com 免费获取。在这个例子中,我们假设您有以下 API 密钥

772A-47D7-93A3-4EA9-9D73-85B9-479B-16C6

步骤 2:包含 BreinApi 模块

import BreinApi

步骤 3:配置库

需要配置Breinify类,其中包含一个有效的API密钥、Breinify 后端和Rest引擎的URL,当前仅支持Alamofire。

这将是这样的

// this has to be a valid api-key
let validApiKey = "772A-47D7-93A3-4EA9-9D73-85B9-479B-16C6"

// this is the URL of the Breinify service
let baseUrl = "https://api.breinify.com"

// create the configuration object
let breinConfig = try BreinConfig(apiKey: validApiKey,
              baseUrl: baseUrl, 
      breinEngineType: .ALAMOFIRE)

// set configuration
Breinify.setConfig(breinConfig)

第3步:开始使用库

放置活动触发器

驱动DigitalDNA API的引擎提供了两个端点。第一个端点用于通知引擎你的网站访客所执行的活动。这些活动用于理解用户的当前兴趣并推断其意图。随着收集更多活动,它在不同用户和行业中的准确性越来越高。应该注意的是,在引擎中不存储任何个人信息,因此每个个体的隐私得到很好的保护。引擎可以理解用户执行的多项不同活动,例如,着陆、登录、搜索、项目选择或注销。

通过执行Breinify.activity(…)来通知引擎活动。

// create a user you are interested in with his email (mandatory field)
let breinUser = BreinUser(email: "[email protected]")

typealias apiSuccess = (result:BreinResult?) -> Void
typealias apiFailure = (error:NSDictionary?) -> Void

// callback in case of success
let successBlock: apiSuccess = {(result: BreinResult?) -> Void in
    print ("Api Success : result is:\n \(result!)")
}

// callback in case of a failure
let failureBlock: apiFailure = {(error: NSDictionary?) -> Void in
    print ("Api Failure: error is:\n \(error)")

}

// set additional user information (optional)
breinUser.setFirstName("Fred")
breinUser.setLastName("Firestone")

// invoke activity call
do {
   try Breinify.activity(breinUser,
          activityType: .LOGIN,
              category: .HOME,
           description: "Login-Description",
                  sign: false,
               success: successBlock,
               failure: failureBlock)
} catch {
   print("Error is: \(error)")
}

这就是全部了!调用将在后台异步运行,并且根据结果将调用successBlock或failureBlock回调。

放置查找触发器

查找用于获取特定用户的信息。此代码片段假定上位型和上述对象来自同一作用域。

// define an array of subjects of interest
let dimensions: [String] = ["firstname", "gender", 
            "age", "agegroup", "digitalfootprint", "images"]

// wrap this array into BreinDimension object
let breinDimension = BreinDimension(dimensionFields: dimensions)

// invoke the lookup
let successBlock: apiSuccess = {(result: BreinResult?) -> Void in
     print ("Api Success!")

     if let dataFirstname = result!.get("firstname") {
        print ("Firstname is: \(dataFirstname)")
     }

     if let dataGender = result!.get("gender") {
        print ("Gender is: \(dataGender)")
     }

     if let dataAge = result!.get("age") {
        print ("Age is: \(dataAge)")
     }

     if let dataAgeGroup = result!.get("agegroup") {
        print ("AgeGroup is: \(dataAgeGroup)")
     }

     if let dataDigitalFootprinting = result!.get("digitalfootprinting") {
        print ("DigitalFootprinting is: \(dataDigitalFootprinting)")
      }

     if let dataImages = result!.get("images") {
        print ("DataImages is: \(dataImages)")
     }          
}

let failureBlock: apiFailure = {(error: NSDictionary?) -> Void in
     print ("Api Failure : error is:\n \(error)")
}

do {
   try Breinify.lookup(breinUser,
        dimension: breinDimension,
             sign: false,
          success: successBlock,
          failure: failureBlock)
} catch {
   print("Error is: \(error)")
}

完整工作示例

让我们回到Xcode并进入IDE中的ViewController.swift。代码应如下所示

import UIKit
import CoreLocation
import BreinApi

class ViewController: UIViewController {

    typealias apiSuccess = (result:BreinResult?) -> Void
    typealias apiFailure = (error:NSDictionary?) -> Void

    let baseUrl = "https://api.breinify.com"

    let validApiKey = "772A-47D7-93A3-4EA9-9D73-85B9-479B-16C6"
    let breinCategory: BreinCategoryType = .HOME
    let breinUser = BreinUser(email: "[email protected]")

    var breinConfig: BreinConfig?
    var manager: BreinLocationManager?
    var output = ""

    @IBOutlet weak var resultView: UITextView!

    @IBAction func lookUpInvoked(sender: AnyObject) {

        doLookup()
    }

    @IBAction func activityInvoked(sender: AnyObject) {

        doActivity()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        do {

            breinConfig = try BreinConfig(apiKey: validApiKey, 
                  baseUrl: baseUrl, 
                  breinEngineType: .ALAMOFIRE)

            // set configuration
            Breinify.setConfig(breinConfig)

        } catch {
            print("Error")
        }

    }


    func doLookup() {

        let dimensions: [String] = ["firstname", "gender", 
        "age", "agegroup", "digitalfootprint", "images"]

        let breinDimension = BreinDimension(dimensionFields: dimensions)

        let successBlock: apiSuccess = {(result: BreinResult?) -> Void in
            print ("Api Success!")


            if let dataFirstname = result!.get("firstname") {
                print ("Firstname is: \(dataFirstname)")
                self.output = self.output + "Firstname is: \(dataFirstname)"
            }

            if let dataGender = result!.get("gender") {
                print ("Gender is: \(dataGender)")
                self.output = self.output + "Gender is: \(dataGender)"            }

            if let dataAge = result!.get("age") {
                print ("Age is: \(dataAge)")
                self.output = self.output + "Age is: \(dataAge)"
            }

            if let dataAgeGroup = result!.get("agegroup") {
                print ("AgeGroup is: \(dataAgeGroup)")
                self.output = self.output + "AgeGroup is: \(dataAgeGroup)"
            }

            if let dataDigitalFootprinting = result!.get("digitalfootprinting") {
                print ("DigitalFootprinting is: \(dataDigitalFootprinting)")
                self.output = self.output + "DigitalFootprinting is: \(dataDigitalFootprinting)"
            }

            if let dataImages = result!.get("images") {
                print ("DataImages is: \(dataImages)")
                self.output = self.output + "DataImages is: \(dataImages)"
            }

            print("output is: \(self.output)")
            self.resultView.text = self.output
        }

        let failureBlock: apiFailure = {(error: NSDictionary?) -> Void in
            print ("Api Failure : error is:\n \(error)")
        }

        do {
            try Breinify.lookup(breinUser,
                    dimension: breinDimension,
                    sign: false,
                    success: successBlock,
                    failure: failureBlock)
        } catch {
            print("Error is: \(error)")
        }

    }


    func doActivity() {

        let successBlock: apiSuccess = {(result: BreinResult?) -> Void in
            print ("Api Success : result is:\n \(result!)")
            self.resultView.text = "Succes!"

        }
        let failureBlock: apiFailure = {(error: NSDictionary?) -> Void in
            print ("Api Failure : error is:\n \(error)")
            self.resultView.text = "Failure: \(error)"
        }

        // set additional user information
        breinUser.setFirstName("Fred")
        breinUser.setLastName("Firestone")

        // invoke activity call
        do {
            try Breinify.activity(breinUser,
                activityType: .LOGIN,
                    category: .HOME,
                 description: "Login-Description",
                        sign: false,
                     success: successBlock,
                     failure: failureBlock)
        } catch {
            print("Error is: \(error)")
        }

    }
}