使用shareSDK實現微信多圖分享到朋友圈&Url分享到朋友圈&URL分享到好友 問題記錄

問題概述

其實第三方分享很早就有了,這個按理說這個應該沒什麼難度,爲啥記錄一下呢,因爲項目中同時出現了 朋友圈多圖分享(多張URL集合),朋友圈URL分享,羣和個人URL,圖片分享。基本上涵蓋了大部分需求,這其中出現了一些問題,在此記錄一下。

基本操作流程:

操作流程項目過程:http://wiki.mob.com/android-sharesdk%E5%AE%8C%E6%95%B4%E7%9A%84%E9%9B%86%E6%88%90%E6%96%87%E6%A1%A3/

大致流程就是
1. 註冊ShareSDK賬戶,獲取app key,app screct。
2. 註冊你需要分享的所有平臺信息,像QQ,微信,微博等等你必須的
3. 在自己項目中添加應用信息
1. 【優先級最高】使用ShareSDK後臺直接配置
2. 【優先級中】使用代碼配置”setPlatformDevInfo(String,HashMap

多圖分享效果

如果是IOS,直接多圖分享到微信客戶端是不支持的,而Android客戶端也是需要通過不驗證的方式才能通過的,你在官方文檔上可以查看說明:官網說明
這裏寫圖片描述

如果你也想設置多圖分享,那麼需要如下代碼:

 /**
     * 圖片列表分享到微信朋友圈
     * @param desc
     * @param imageList
     * @param listener
     */
    public static void shareWeChatImageListComments(String desc, String[] imageList , PlatformActionListener listener) {
        HashMap<String,Object> optionMap = new HashMap<>();
        optionMap.put("Id","5");
        optionMap.put("SortId","5");
        optionMap.put("AppId","your app id");
        optionMap.put("AppSecret","your app secret");
        optionMap.put("BypassApproval",true);
        optionMap.put("Enable",true);
        ShareSDK.setPlatformDevInfo(WechatMoments.NAME,optionMap);

        Platform platform = ShareSDK.getPlatform(WechatMoments.NAME);
        Platform.ShareParams shareParams = new  Platform.ShareParams();
        shareParams.setText(desc);
        shareParams.setImageArray(imageList);
        shareParams.setShareType(Platform.SHARE_IMAGE);
        platform.setPlatformActionListener(listener);
        platform.share(shareParams);
    }

最主要的就是這個代碼:

optionMap.put("BypassApproval",true);

它的意思是微信和朋友圈繞過審覈的方式支持多圖分享,ImageArray是String類型的數組,可傳入手機本地圖片路徑和圖片鏈接。
大致結果如下:
這裏寫圖片描述

分享URL到朋友圈

如果你的app中同時存在多圖朋友圈分享和URL朋友圈分享,那麼此時URL分享時,BypassApproval屬性需要設置成false(即必須通過審覈才能分享),基本代碼如下:

    /**
     * URL分享到微信朋友圈
     * @param url 跳轉的URL
     * @param imageUrl 圖片上展示的URL
     * @param title 分享簡介的title
     * @param content 分享簡介上內容
     * @param mListener 分享監聽器
     */
    public static void shareWeChatMomments(String url, String imageUrl, String title, String content,  PlatformActionListener mListener) {
        HashMap<String,Object> optionMap = new HashMap<>();
        optionMap.put("Id","5");
        optionMap.put("SortId","5");
        optionMap.put("AppId","your app id");
        optionMap.put("AppSecret","your app secret");
        optionMap.put("BypassApproval",false);
        optionMap.put("Enable",true);
        ShareSDK.setPlatformDevInfo(WechatMoments.NAME,optionMap);

        Platform platform = ShareSDK.getPlatform(WechatMoments.NAME);
        Platform.ShareParams shareParams = new Platform.ShareParams();

        shareParams.setShareType(Platform.SHARE_WEBPAGE);
        shareParams.setTitle(title);
        shareParams.setTitleUrl(url);
        shareParams.setText(content);
        shareParams.setUrl(url);

        shareParams.setImageUrl(imageUrl);

        platform.setPlatformActionListener(mListener);
        platform.share(shareParams);
    }

如果你將BypassApproval還是設置爲true,那麼就會產生如下異常,程序將崩潰:
這裏寫圖片描述

URL分享到給朋友

這個原本是最簡單的分享格式,但是由於我們最初爲了做多圖分享,在shareSDK.xml文檔中對微信設置了繞開審覈,即

optionMap.put("BypassApproval",true);

如下圖:
這裏寫圖片描述
然後我的分享代碼是這樣的:

Platform platform = ShareSDK.getPlatform(Wechat.NAME);
Platform.ShareParams shareParams = new  Platform.ShareParams();
shareParams.setTitle("share title");
shareParams.setText("share content");
shareParams.setImageUrl("http://dev.e-shigong.com/ic_launcher.png");
shareParams.setUrl(share url);

shareParams.setShareType(Platform.SHARE_WEBPAGE);
platform.setPlatformActionListener(mListener);
platform.share(shareParams);

然後分享出來的結果是:

配置錯誤的分享 配置正確的分享
這裏寫圖片描述 這裏寫圖片描述

我一直認爲是我們的appId和AppSecret配置得有問題,後來在諮詢mob相關人員之後,只需要把
optionMap.put("BypassApproval",true);該爲optionMap.put("BypassApproval",false); 即可。
詳細代碼如下:

 public static void shareWebpager(String title ,String shareUrl,String shareIcon, String content ,PlatformActionListener mListener){
        HashMap<String,Object> optionMap = new HashMap<>();
        optionMap.put("Id","5");
        optionMap.put("SortId","5");
        optionMap.put("AppId","your app id ");
        optionMap.put("AppSecret","your app secret");
        optionMap.put("BypassApproval",false);
        optionMap.put("Enable",true);
        ShareSDK.setPlatformDevInfo(Wechat.NAME,optionMap);


        Platform platform = ShareSDK.getPlatform(Wechat.NAME);
        Platform.ShareParams shareParams = new  Platform.ShareParams();
        shareParams.setTitle(title);
        shareParams.setText(content);
        shareParams.setImageUrl(shareIcon);
        shareParams.setUrl(shareUrl);

        shareParams.setShareType(Platform.SHARE_WEBPAGE);
        platform.setPlatformActionListener(mListener);
        platform.share(shareParams);
    }

後記

微信在做分享的時候,有幾個地方比較坑,這裏記錄一下:
1. 分享的類型不同,對參數的要求也不一樣,一定要嚴格對比,否則不能調用微信客戶端;
2. 你使用測試版本時,需要用到微信註冊時的簽名(keystore)去打包,然後分享出錯;
3. 如果測試時,第一次分享使用了錯誤的簽名,那麼接下來微信都會使用錯誤的簽名,除非你清理微信緩存和重裝微信。爲此,個人的建議是你測試使用模擬器測試分享,即使錯誤了,直接重裝微信再次測試。

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