Cordova iOS应用在设备上第二次启动后崩溃

3
经过大量调查,我仍然不知道问题可能是什么。 我有一个使用cordova开发并使用Firebase(cordova-plugin-firebase)进行通知的iOS应用程序。
当我第一次使用Xcode在我的设备上运行应用程序时,一切正常,通知到达,应用程序工作良好。 问题开始于我停止Xcode上的应用程序并尝试在不使用Xcode的情况下打开它的设备上,应用程序会在启动画面上崩溃。 如果我发送任何通知,它都能收到,但当我打开一个通知时,应用程序就会再次在启动画面上崩溃。
我在我的苹果开发者帐户上创建了所有证书和开发、生产和 ad-hoc 供应配置文件,创建了APNs密钥以存储在我的Firebase帐户上,在我的资源文件夹中(platforms/ios/AppName/Resources&platforms/ios/AppName/Resources/Resources)中有GoogleService-Info.plist文件。
我日志中唯一可以看到的错误是:
"Unable to connect to FCM. Error Domain=com.google.fcm Code=2001 "FIRMessaging is already connected""

"The object does not respond to -messaging:didReceiveRegistrationToken:, nor -messaging:didRefreshRegistrationToken:. Please implement -messaging:didReceiveRegistrationToken: to be provided with an FCM token."
当我接受通知权限气泡时,会显示这些错误。
以下是我用于处理通知的JS代码:
function firebasePUSH() {
if (device.platform === "iOS") {
    window.FirebasePlugin.hasPermission(function (data) {
        if (!data.isEnabled) {
            window.FirebasePlugin.grantPermission();
        }
    });
}
window.FirebasePlugin.onNotificationOpen(function (notification) {
    console.log("tipo de notificacion " + notification.tipo);
    console.log(notification);
    if (notification.tipo === "alerta") {
        var parametros = {
            id: notification.numero,
            categoria: "rescato"
        };
        myApp.request.post("http://190.98.210.41/comuna/app/contactos.php", parametros, function (data) {
            var json = JSON.parse(data);
            console.log(json);
            if (json.error === false) {
                mostrarSOS(json.alerta);
            }
        });

    } else if (notification.tipo === "chat" || notification.tipo === "salud" || notification.tipo === "seguridad" || notification.tipo === "contacto" || notification.tipo === "oficina") {
        aceptarLlamada();
    } else if (notification.tipo === "publicidad") {
        mostrarPublicidad(notification.numero);
    } else if (notification.tipo === "sondeo") {
        mostrarSondeo(notification.numero);
    }
}, function (error) {
    console.error("onResume>>" + error);
});

window.FirebasePlugin.getToken(function (token) {
    try {
        var jsonToken = JSON.parse(token);
        token = jsonToken.token;
        console.warn("venia json: " + jsonToken.token);
    }
    catch (err) {
        console.warn("viene json limpio: " + token);
    }

    console.log("getToken js: " + token);
    localStorage.setItem('registrationId', token);
    /*PEGRUNTA SI YA ESTA LOGEADO*/
    if (localStorage.getItem("correo") !== null && localStorage.getItem("clave") !== null) {
        //pasa a la pantalla principal
        var parametros = {
            "id": localStorage.getItem("id"),
            "token": localStorage.getItem('registrationId'),
            "categoria": "token",
            format: "json",
            callback: function () {
                return true;
            }
        };
        myApp.request.json("http://190.98.210.41/comuna/app/usuario_get.php", parametros, function (data) {
            console.log(data);
        }, function (error) {
            console.log(error);
        });
    }

}, function (error) {
    console.error("getToken error: " + error);
});

window.FirebasePlugin.onTokenRefresh(function (token) {
    try {
        var jsonToken = JSON.parse(token);
        token = jsonToken.token;
        console.warn("token json: " + jsonToken.token);
    }
    catch (err) {
        console.warn("token limpio: " + token);
    }

    console.log("onTokenRefresh js: " + token);
    localStorage.setItem('registrationId', token);
    /*PEGRUNTA SI YA ESTA LOGEADO*/
    if (localStorage.getItem("correo") != null && localStorage.getItem("clave") != null) {
        //pasa a la pantalla principal
        var parametros = {
            "id": localStorage.getItem("id"),
            "token": localStorage.getItem('registrationId'),
            "categoria": "token",
            format: "json",
            callback: function () {
                return true;
            }
        };
        myApp.request.json("http://190.98.210.41/comuna/app/usuario_get.php", parametros, function (data) {
            console.log(data);
        }, function (error) {
            console.log(error);
        });

    }
}, function (error) {
    console.error(error);
});

我需要帮助解决这个问题,因为我已经折腾了几周,感到非常沮丧。非常感谢大家。

编辑:

当我启动应用程序时,我发现了第三个错误。

[Firebase/Messaging][I-FCM002023] 对象未响应 -messaging:didReceiveRegistrationToken: 或 -messaging:didRefreshRegistrationToken:。请实现 -messaging:didReceiveRegistrationToken: 以获取 FCM 令牌。

1个回答

0

我遇到了一个非常相似的问题...

后来我发现,当我第二次调用window.FirebasePlugin.grantPermission()时,出现了问题。

建议进行一次测试,不要多次请求权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接