版权声明:本文为原创文章,转载请声明

很久没有写新博客了,前段时间有些忙,这几天趟了几个微信分享的坑,写下来和大家分享下

接过微信分享的人,不论是直接接的微信自己的sdk还是使用了第三方插件,比如友盟、Mob之类的,估计都被微信官方恶心过。因为微信官方的文档真的是除了给了sdk,其余的等于什么都没说。

先说说接分享的流程吧:

首先,需要去微信开放平台申请账号,并注册一个应用,然后等待审核,这个过程我就不细说了,百度上到出都有。

审核通过后,就可以到管理中心查看自己的应用,点击查看进入应用详情界面

unity探索者之微信分享所有流程,非第三方插件

新注册的应用默认就有微信分享的权限,但是其他包括支付的功能则需要另外申请。在界面下方就是应用的开发信息了。

unity探索者之微信分享所有流程,非第三方插件

这里的应用签名和包名相当重要,因为对应的unity工程所使用的签名文件和包名必须和这里的一模一样,包名没什么好说的按照【com.公司名.项目名】的结构定义就好,主要说说签名,因为博主就在这个问题上栽了跟头。

这里的应用签名并非是简单的名字,也不可以随便定义,而是需要和项目的签名文件的md5相同,先说签名文件的生成,unity有比较简单的方法

unity探索者之微信分享所有流程,非第三方插件

在unity的PlayerSettings中的Publishing Settings页中,勾选Create a new key,然后点击下方的Browse Keystore按钮,在弹出的窗口中填写好签名文件的名字,然后保存

接下来,注意,点击保存后并不会立即就生成签名文件,而是需要先在下方的两个输入框中填写签名文件的密码,填写完毕后,再选择下方的Alias下拉框

 unity探索者之微信分享所有流程,非第三方插件

这时候会出现一个新的选项,Create a new key

unity探索者之微信分享所有流程,非第三方插件

填写好相应信息,点击Create Key,然后你会发现,你刚才选择的那个路径出现一个新的keystore文件

然后接下来就可以使用这个签名文件了,不过还没完。

接下来就是第二个很重要的地方了,签名文件的md5码

网上很多人给的方法是使用eclipse创建签名文件的apk,然后使用微信提供的生成md5的工具来获取MD5,不过博主觉得很麻烦,所以选择使用命令行

 unity探索者之微信分享所有流程,非第三方插件

把刚才生成的签名文件拷贝到你的jdk文件夹下的bin目录中,然后使用命令行

keytool -list -v -keystore xyms.keystore 

unity探索者之微信分享所有流程,非第三方插件

 

输入密码后,下方的MD5就是我们要的东西了,把这串MD5码的冒号去掉,然后大写改为小写,复制到微信分享平台中应用签名一栏就ok了

网上有人说应用签名和包名一个月只能改一次,不过博主一天改了三回貌似也没啥问题。。。

 OK,签名和包名的问题解决了,接下来就是干货了,首先是核心java代码

 1 public class ShareUtils {
 2 
 3     public static IWXAPI api = null;
 4 
 5     public static void RegisterToWechat (Context context, String appId) {
 6         api = WXAPIFactory.createWXAPI(context, appId, true);
 7         api.registerApp(appId);
 8     }
 9 
10     public static boolean IsWechatInstalled () {
11         return api.isWXAppInstalled();
12     }
13 
14     public static boolean IsWechatAppSupportAPI() {
15         return api.isWXAppSupportAPI();
16     }
17 
18     public static void ShareImage(int scene, byte[] imgData, byte[] thumbData) {
19         WXImageObject imgObj = new WXImageObject(imgData);
20         WXMediaMessage msg = new WXMediaMessage();
21         msg.mediaObject = imgObj;
22         msg.thumbData = thumbData;
23 
24         SendMessageToWX.Req req = new SendMessageToWX.Req();
25         req.transaction = BuildTransaction("img");
26         req.message = msg;
27         req.scene = scene;
28         api.sendReq(req);
29     }
30 
31     public static void ShareText(int shareType, String text) {
32         WXTextObject textObj = new WXTextObject();
33         textObj.text = text;
34 
35         WXMediaMessage msg = new WXMediaMessage();
36         msg.mediaObject = textObj;
37         msg.description = text;
38 
39         SendMessageToWX.Req req = new SendMessageToWX.Req();
40 
41         req.transaction = BuildTransaction("text");
42         req.message = msg;
43 
44         req.scene = shareType;
45         api.sendReq(req);
46     }
47 
48     public static void ShareWebPage(int shareType, String url, String title, String content, byte[] thumb) {
49         WXWebpageObject webpage = new WXWebpageObject();
50         webpage.webpageUrl = url;
51         WXMediaMessage msg = new WXMediaMessage(webpage);
52         msg.title = title;
53         msg.description = content;
54         msg.thumbData = thumb;
55 
56         SendMessageToWX.Req req = new SendMessageToWX.Req();
57         req.transaction = BuildTransaction("webpage");
58         req.message = msg;
59         req.scene = shareType;
60         api.sendReq(req);
61     }
62 
63 
64     static String BuildTransaction(final String type) {
65         return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
66     }
67 }
View Code

相关文章:

  • 2021-11-17
  • 2021-08-24
  • 2021-05-11
  • 2021-12-24
  • 2021-05-11
  • 2021-06-26
  • 2021-06-27
  • 2021-09-10
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-10
  • 2022-12-23
相关资源
相似解决方案