Ионный ресурс через образ хранилища Facebook Firebase

Привет, я пытаюсь использовать функцию Ionic Native Social Sharing:

shareViaFacebook (сообщение, изображение, URL)

У меня есть изображения, хранящиеся в хранилище firebase.

Я передаю image.downloadURL из firebase в аргумент изображения и аргумент url, и ни один из них не работает.

URL, который я передаю, - это // "Public" unguessable URL, accessible by anyone with the link // This is secured because that token is *very* hard for someone to guess https://firebasestorage.googleapis.com/v0/bucket/object?alt=media&token=<token>

Я попытался использовать encodeURL и encodeURLComponent, но не могу заставить приложение ionic поделиться сохраненным изображением firebase в facebook.

Я могу поделиться другими фотографиями, такими как любая случайная фотография изображения Google, передав URL-адрес изображения в аргумент изображения.

Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
1
0
471
1

Ответы 1

Convert the image into base64 string and then send it to shareViaFacebook()

Фрагмент рабочего кода

function shareImage(image) {
    getImage(image)
        .then(function(base64) {

            // check for the required dependencies to avoid runtime JS errors
            $window.plugins.socialsharing.shareViaFacebook(
                'Add a message here..', // this message would auto-populate as caption
                base64, // image to be shared in base64 format
                null,
                function(result) {
                    // This is successCallback()
                },
                function(error) {
                    // This is errorCallback()
                }
            );
        });
}

function getImage(image) {
    var deferred = $q.defer();

    getBase64(URI,
        function(image) {
            deferred.resolve(image);
        }
    );

    return deferred.promise;
}

// There are many ways to get base64 from URI. 
// I followed Approach 2 from https://stackoverflow.com/a/20285053/2458543
function getBase64(src, callback, outputFormat) {
    var img = new Image();
    img.crossOrigin = 'Anonymous';

    img.onload = function() {
        var canvas = document.createElement('CANVAS');
        var ctx = canvas.getContext('2d');
        var dataURL;

        canvas.height = this.naturalHeight;
        canvas.width = this.naturalWidth;
        ctx.drawImage(this, 0, 0);
        dataURL = canvas.toDataURL(outputFormat);

        callback(dataURL);
    };

    img.src = src;

    // observation - if below code is removed, then image does not load correctly
    if (img.complete || img.complete === undefined) {
        img.src = src;
    }
}

Некоторые из моих важных наблюдений при внедрении shareViafacebook()

successCallback() and errorCallback() for Android and iOS platforms are quite different

Android

  1. Если приложение fb НЕ установлено - errorCallback (ошибка) вызывается, где [error = Array (all_apps)]

  2. Если установлено приложение fb

    • Пользователь не вошел в систему - вызывается successCallback (result), где [result = "OK"]
    • Пользователь вошел в систему - вызывается successCallback (result), где [result = "OK"]

Это не дожидается успешного обмена изображением и возвращается, как только откроется приложение facebook.

  1. Отменено (пользователем) - ничего не делать

iOS

  1. Если приложение fb НЕ установлено - errorCallback (ошибка) вызывается, где [error = "cancelled"]

  2. Если установлено приложение fb

    • Пользователь не вошел в систему - вызывается errorCallback (ошибка), где [error = "cancelled"]
    • Пользователь вошел в систему - вызывается successCallback (result), где [result = true]

Это ожидает успешного обмена изображением и возвращается после завершения действия совместного использования.

  1. Отменено (пользователем) - errorCallback (ошибка) вызывается, где [error = "cancelled"]

Другие вопросы по теме