1. 程式人生 > >使用shareSDK實現微信多圖分享到朋友圈&Url分享到朋友圈&URL分享到好友 問題記錄

使用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. 如果測試時,第一次分享使用了錯誤的簽名,那麼接下來微信都會使用錯誤的簽名,除非你清理微信快取和重灌微信。為此,個人的建議是你測試使用模擬器測試分享,即使錯誤了,直接重灌微信再次測試。