在WebView加载之前,如何同时获得设备ID和设备令牌



在Xcode 8上运行Swift 3

下面是我的ViewController.swift

class ViewController: UIViewController {
    @IBOutlet weak var TestWebview: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let deviceid = UIDevice.current.identifierForVendor!.uuidString
        //I want to pass device id and device token to this testURL
        let testURL = URL(string: "http://www.test.com/user.html?device=ios&deviceid=" + deviceid + "&devicetoken=")

        let testURLRequest = URLRequest(url: testURL!)
        TestWebview(testURLRequest)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

下面是我的appdelegate.swift文件

import UIKit
import UserNotifications
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge], completionHandler: { granted, error in
            if granted {
                print("Yes。")
            }
            else {
                print("No!")
            }
        })
        application.registerForRemoteNotifications()
        return true
    }

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
        print("===== deviceTokenString =====")
        print(deviceTokenString)
    }
}

现在,我可以在ViewController中获取设备ID,还可以在AppDelegate文件中获取设备令牌。

但是,如何将设备令牌传递到viewController中的testurl,或者如何将设备ID和设备令牌传递给testurl?

使 deviceTokenString成为 AppDelegate类中的属性。

class AppDelegate: UIResponder, UIApplicationDelegate {
    ...
    var deviceTokenString: String?
    ...
    ...
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        // feed your property
        deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
        print("===== deviceTokenString =====")
        print(deviceTokenString)
    }
}

现在,从任何控制器中,您都可以得到deviceTokenString,例如:

override func viewDidLoad() {
    super.viewDidLoad()
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
        return 
    } 
    guard let deviceTokenString = appDelegate.deviceTokenString else {
        // deviceTokenString isn't available
        return
    }
    // deviceTokenString is available here
    let deviceid = UIDevice.current.identifierForVendor!.uuidString
    // I want to pass device id and device token to this testURL
    // Concat various types into string like below
    let testURL = URL(string: "http://www.test.com/user.html?device=ios&deviceid=(deviceid)&devicetoken=(deviceTokenString)")

    let testURLRequest = URLRequest(url: testURL!)
    TestWebview(testURLRequest)
}

最新更新