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