友盟 SDK 分享到 Messenger 無法發送消息

友盟 Messenger 無法發送消息
umeng Messenger 無法發送消息
umeng Facebook Messenger 無法發送消息


由於項目的登錄和分享基於友盟進行的設計,接入 Facebook Messenger 分享,發出去的消息總是提示【無法發送消息 輕觸瞭解詳情】

可能的原因有2點:

  1. Messenger 平臺從 2019 年 6 月 10 日開始,新應用將不再支持將應用中的鏈接和媒體分享至 Messenger 的功能,詳見 官方公告
  2. 友盟分享 SDK 處理 Messenger 的相關代碼比較老舊,新應用使用的話不再被官方接受了,也就不能發送成功。

既然官方都發公告說不支持將應用中的鏈接和媒體分享至 Messenger 的功能了,那就真的沒辦法了嗎? 經過測試,雖然有些限制,但還是可以直接將應用中的鏈接分享至 Messenger 的,至於媒體,沒有進行單獨測試,理論上可行。

解決方案

簡單點來說就是調用 Facebook 官方最新 SDK 裏的方法進行分享
代碼如下:

import com.facebook.share.model.ShareLinkContent;
import com.facebook.share.widget.MessageDialog;


ShareLinkContent content = new ShareLinkContent.Builder()
                        .setContentUrl(Uri.parse("https://xxx.xxx/xxx"))
                        .build();
//不需要回調
MessageDialog.show(context, content);

//需要回調
MessageDialog messageDialog = new MessageDialog(context);
messageDialog.registerCallback(CallbackManager.Factory.create(), new com.facebook.FacebookCallback<com.facebook.share.Sharer.Result>() {
    @Override
    public void onSuccess(com.facebook.share.Sharer.Result result) {
    
    }
    @Override
    public void onCancel() {

    }
    @Override
    public void onError(com.facebook.FacebookException error) {

    }
});
messageDialog.show(content);

那麼問題來了,怎麼和友盟的 SDK 進行結合呢?畢竟如果項目的整個分享模塊都是基於友盟來設計的話,必須要在它這個體系內才行。

另外,通過粗略的閱讀友盟分享 SDK 的相關邏輯,好像並沒有提供自定義分享渠道的邏輯,分享渠道的處理類 UMxxHandler (xx 指分享渠道,比如 UMLineHandler 是 Line 分享渠道的處理類) 又很多是寫死在源碼裏的,是否能調用到 onActivityResult 也是預先寫死的,這就很難受了。

我這裏提供一個簡單的思路:重寫某個用不到的分享渠道的 UMxxHandler 來實現。

如果也需要調用到 onActivityResult 來進行分享結果的回調處理,那需要把所有的分享渠道的代碼看一下,看看哪些有覆寫了 getRequestCode()onActivityResult()方法,即有分享結果回調處理邏輯,挑一個用不到的分享渠道,然後去覆寫它的 share() 方法來進行具體的分享操作。

博主選了 UMFlickrHandler 進行了重寫,它沒有處理回調的情況。Messenger 本身分享出去也是無法區分成功和取消,博主便選了這個,選個不需要處理回調,也不需要再額外處理code,唯一不太好的就是一旦點擊分享,就直接回調成功了。

總結

友盟的 SDK 吧,一言難盡,鑑於項目過於依賴它(登錄、分享、Push模塊),我也只能選擇繼續用着。這裏趁機也提示一下,它的 Line 分享功能也是有 Bug 的。

今天五一了,祝大家代碼日日精進。

如果有什麼建議或者問題可以隨時聯繫我,共同探討學習:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章