Получить значение и установить действие из Branch.io Response (Swift) - PullRequest
0 голосов
/ 04 марта 2019

Я недавно хотел, чтобы мои приложения были интегрированы с Deep Link, и я обнаружил, что Branch.io - лучшая платформа для этого.Я успешно прочитал URL-адрес моей ссылки.И вот мой код для чтения, который я вставил в didFinishLaunchingWithOptions.

let branch: Branch = Branch.getInstance()
branch.initSession(launchOptions: launchOptions, andRegisterDeepLinkHandler: {params, error in
    if error == nil {
        print("params: %@", params as? [String: AnyObject] ?? {})
        //Read Deep Link
        let sessionParams = Branch.getInstance().getLatestReferringParams()
        let installParams = Branch.getInstance().getFirstReferringParams()
        guard let data = params as? [String: AnyObject] else { return }
        guard let options = data["promo_code"] as? String else { return }
        switch options {
        case "testing": self.window?.rootViewController?.present( ArticleViewController(), animated: true, completion: nil)
            print("Berhasil DeepLink")
        default: break
        }
    }
})

И вот ответ, который я получил:

["$marketing_title": Paket Tour, 
"+is_first_session": 0, 
"$canonical_url": http://www.invisee.com, 
"~referring_link": https://invisee.app.link/promo?al_applink_da
ta=%7B%22target_url%22%3A%22https%3A%5C%2F%5C%2Fitunes.apple.com%5C%2FWe
bObjects%5C%2FMZStore.woa%5C%2Fwa%5C%2FredirectToContent%3Fid%3D1401179128%22%2
C%22extras%22%3A%7B%22deeplink_context%22%3A%22%7B%5C%22promo_code%5C%22%3A%5C%2
2testing%5C%22%7D%22%7D%2C%22referer_app_link%22%3A%7B%22url%22%3A%22fb%3A%5C%2F
%5C%2F%5C%2F%22%2C%22app_name%22%3A%22Facebook%22%7D%7D, 
"+clicked_branch_link": 1, 
"$og_title": INVISEE | Investment is easy, 
"al_applink_data": 
    {"target_url":"https:\/\/itunes.apple.com\/WebObjects\/MZStore.woa\/wa\/redirectToContent?id=1401179128",
        "extras":
            {"deeplink_context":"{\"promo_code\":\"testing\"}"},
        "referer_app_link":{"url":"fb:\/\/\/","app_name":"Facebook"}}, 
"$one_time_use": 0, "+match_guaranteed": 1, "$og_description": , 
"~id": 631024823602657926, 
"~creation_source": 1, 
"+click_timestamp": 1551695392, 
"~marketing": 1, 
"~campaign": reksadana, 
"~feature": ads, 
"~channel": facebook]

Мой вопрос, я хочупарсит промо-код и его значение.Как это сделать?И, как вы можете видеть в моем коде, есть сценарий переключения, который, я надеюсь, может поставить событие там.Кто-нибудь знает, как это решить?Большое вам спасибо!

1 Ответ

0 голосов
/ 05 марта 2019
if let data =  al_appLink2.data(using: .utf8) {
do {
    let appLinkObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any]
            let extras = appLinkObject?["extras"] as? [String : Any]
            let promoCodeString = extras?["deeplink_context"] as? String
            if let promoString = promoCodeString, let data =  promoString.data(using: .utf8) {
                let promoCodeObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: String]
                let promoCode = promoCodeObject?["promo_code"]
                print(promoCode ?? "No Promo Code")
            }

        }
        catch(let error) {
            print(error.localizedDescription)
        }
    }
}}

Попробуйте приведенный выше код.Сначала вы должны получить «al_applink_data» в качестве словаря.Тогда получите "дополнительные" от этого.Тогда значение "deeplink_context".В качестве значения «deeplink_context» указывается строка, представляющая строковое представление JSON.Затем вы должны получить объект JSON через сериализацию JSON и получить значение promo_code.Я сделал некоторые правки для нулевых значений. Но убедитесь, что вы проверяете это правильно.Спасибо

...