【问题标题】:Ionic shareViaFacebook Firebase Storage ImageIonic shareViaFacebook Firebase Storage Image
【发布时间】:2023-03-08 14:45:01
【问题描述】:

您好,我正在尝试使用 Ionic Native 社交分享功能:

shareViaFacebook(消息、图片、网址)

我有一些图像存储在 Firebase 存储中。

我将 firebase 中的 image.downloadURL 传递给 image 参数和 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。

我可以通过将图像的 url 传递给图像参数来分享其他照片,例如任何随机的谷歌图像照片。

【问题讨论】:

    标签: firebase ionic-framework firebase-realtime-database ionic3


    【解决方案1】:

    将图片转成base64字符串发送到shareViaFacebook()

    工作代码sn-p

    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()时的一些重要观察

    Android 和 iOS 平台的successCallback() 和errorCallback() 完全不同

    Android

    1. 如果未安装 fb 应用 - 在 [error = Array(all_apps)] 处调用 errorCallback(error)

    2. 如果安装了 fb 应用

      • 用户未登录 - 在 [result = "OK"] 处调用了 successCallback(result)
      • 用户登录 - successCallback(result) 在 [result = "OK"] 处被调用

    这不会等待成功分享图片,只要facebook应用打开就返回

    1. 取消(由用户) - 什么都不做

    iOS

    1. 如果未安装 fb 应用 - 在 [error = "cancelled"]

    2. 处调用 errorCallback(error)
    3. 如果安装了 fb 应用

      • 用户未登录 - 在 [error = "cancelled"] 处调用 errorCallback(error)
      • 用户登录 - successCallback(result) 在 [result = true] 处被调用

    等待成功分享图片,完成分享动作后返回

    1. 取消(由用户) - 在 [error = "cancelled"] 的地方调用 errorCallback(error)

    【讨论】:

      猜你喜欢
      • 2018-08-25
      • 2019-07-25
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多