Я пытаюсь получить доступ к токену, возвращенному функцией Firebase twilioToken
с помощью Swift, как я это делал с Redux JS.Я прикрепил свой код, который использовал для JS, чтобы я мог имитировать его с помощью Swift, но не уверен, как получить доступ к result.token
из вызова функции firebase.Я что-то здесь упускаю?Нужно ли получать значение из запроса https по-другому или я близок к своему текущему коду?Дайте мне знать, если мне нужно уточнить, спасибо!
Текущая ошибка на output.token
равна Value of tuple type 'Void' has no member 'token'
.
Попытка Swift код:
import UIKit
import MBProgressHUD
import FirebaseFunctions
class CallRoomVC: UIViewController {
private var appDelegate: AppDelegate!
private var userSession: UserSession = FirebaseUserSession.shared
lazy var functions = Functions.functions()
override func viewDidLoad() {
super.viewDidLoad()
appDelegate = UIApplication.shared.delegate as? AppDelegate
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard let user = userSession.user else {
fatalError("User instance must be created")
}
var output = functions.httpsCallable("twilioToken").call(["uid": user.id]) { (result, error) in
if let error = error as NSError? {
if error.domain == FunctionsErrorDomain {
let code = FunctionsErrorCode(rawValue: error.code)
let message = error.localizedDescription
let details = error.userInfo[FunctionsErrorDetailsKey]
}
// ...
// or
// print("Result: \(result.token)")
}
}
if (output != nil) {
print("Result: \(output.token)")
}
}
}
Функция Firebase:
"use strict";
const functions = require("firebase-functions");
const admin = require("firebase-admin");
// eslint-disable-next-line import/no-extraneous-dependencies
const google_cloud_logging = require("@google-cloud/logging");
const twilio = require("twilio");
const cors = require("cors")({
origin: true
});
// eslint-disable-next-line import/no-extraneous-dependencies
admin.initializeApp(functions.config().firebase);
exports.twilioToken = functions.https.onRequest((req, res) => {
return cors(req, res, () => {
const token = new twilio.jwt.AccessToken(
"xxxxxxxxxxxxxx", // Account ID
"xxxxxxxxxxxxxx", // API Key SID
"xxxxxxxxxxxxxx" // API Key Secret
);
token.identity = req.query.uid;
token.addGrant(new twilio.jwt.AccessToken.VideoGrant());
console.log("Sending token: ", token);
res.status(200).send({ token: token.toJwt() });
});
});
Код JS Redux:
function* getTokenSaga(action) {
const token = yield call(
rsf.functions.call,
"twilioToken",
{
uid: action.uid
},
{
method: "GET"
}
);
yield put(retrievedToken(token.token));
}
export function* twilioRootSaga() {
yield all([takeEvery(types.TOKEN.GET, getTokenSaga)]);
}