[035] 微信公眾帳號開發教程第11篇-符號表情的發送(上)(轉)


題外話(能夠略過)

相信這篇文章已經讓大家等的太久了,不是我故弄玄虛、吊大家胃口,而是寫一篇文章真的須要花太多的時間。或許一篇文章,你們花3-5分鍾就看完了、就學會掌握了,而我卻要花2-3個小時的時間來完成,或許唯獨用心寫過文章的人才干體會,希望大家能夠相互體諒!

 

也以前有人對我說,我寫的東西太0基礎,都是入門級的東西。好吧,我承認眾口難調,非常難滿足全部的讀者,再加上我自己也僅僅是個新手,一個4月前才聽說微信公眾平台這個詞的剛開始學習的人,謝謝你們以不同方式對我的激勵,我會更加努力的!

 

第9篇文章介紹了QQ表情的發送與接收。在此之后,非常多朋友問我怎樣發emoji表情(微信上叫符號表情),也就讓我有了寫這篇文章的決心。在此之前,我在網上進行了大量的搜索,發現根本沒有介紹這方面的文章,而且在微信公眾帳號開發官方交流群里提問,也少有人知道該怎樣發送emoji表情。今天,就讓我們一起來揭開它的神奇面紗!

 

文章概要

本文重點介紹怎樣在微信公眾帳號開發模式下,通過程序代碼向用戶發送符號表情。至於怎樣識別用戶發送的是符號表情,就不在此解說了,留給大家一點學習思考的空間。我僅僅是給大家一個提示:用戶向公眾帳號發送符號表情,事實上也是一條文本消息,這與QQ表現是一樣的,即然是文本消息,將接收的符號表情內容打印到日志,不就知道每一個表情相應的文本了嗎?呵呵,當然也沒有這么簡單,並非像其它文本消息,這里須要對接收到符號表情消息先做編碼的轉換。好了,就提示這么多。

 

認識符號表情

在公眾帳號的主交互界面,窗體底部的輸入框旁邊有一個笑臉的圖片button,點擊它將會彈出表情選擇界面,可選擇的表情依次為“QQ表情”、“符號表情”和“動畫表情”,我們選擇“符號表情”,將會看到例如以下圖所看到的界面:

能夠持看出,相比QQ表情,符號表情要更加有用。為什么這么說呢?由於QQ表情大都是臉部表情,而符號表情除了臉部表情外,還有非常多與生活息息相關的表情,比如:動物、花朵、樹木、電視、電話、電腦、吉它、球類、交通工具等等。假設能在消息中使用符號表情,會不會顯得更加生動、有趣呢?

再來看看小q機器人中使用符號表情的效果,先上兩張圖:

  

左邊截圖是小q機器人的主菜單,在Q友圈文字旁邊的那個表情就是符號表情,是一女一男兩人小朋友,示意着在Q友圈里能夠結識到許多其他的朋友,不要想歪了,^_^。右邊截圖是人臉識別功能的使用指南,里面的“相機”、“鬼臉”也是符號表情,這樣看上去是不是更加有趣味性呢?假設是純文本,一定會顯得太單調、太枯燥了。

 

Emoji表情的分類

Emoji表情有非常多種版本號,包含Unified、DoCoMo、KDDI、Softbank和Google,而且不同版本號的表情代碼也不一樣,更可惡的是:不同的手機操作系統、甚至是同一操作系統的不同版本號所支持的emoji表情又不一樣。所以,完美主義者能夠止步了,由於眼下emoji表情並不能保證在全部終端上都能正常使用。

慶幸的是,我已經在超過10余部終端上測試過emoji表情的使用,這當中包含iPhone 4S、iPhone 5、Android 2.2、Android 4.0+、Win8、iPad2,唯獨極個別終端上顯示不出來或顯示為一個小方格,所以並沒有什么太大的影響,也就能夠放心使用了!

 

Emoji表情代碼表之Unified版本號

上面介紹的幾種版本號的emoji表情,都是通過unicode編碼來表示的。換言之,不同版本號的emoji表情相應的unicode編碼值也不一樣。本篇文章,我先給出Unified版本號emoji表情的代碼表,例如以下圖所看到的:

 

公眾帳號怎樣向用戶發送emoji表情

上面已經給出了emoji表情的unified unicode代碼對比表,那么這些代碼要怎樣使用,才干發送出相應的emoji表情呢?假設你僅僅是簡單的像使用QQ表情代碼那樣,直接在文本消息的Content里寫emoji表情代碼,一定是會原樣顯示的。

這里須要用到一個Java方法做轉換處理,方法的代碼例如以下:

[java]  view plain copy
 
  1. /** 
  2.  * emoji表情轉換(hex -> utf-16) 
  3.  *  
  4.  * @param hexEmoji 
  5.  * @return 
  6.  */  
  7. public static String emoji(int hexEmoji) {  
  8.     return String.valueOf(Character.toChars(hexEmoji));  
  9. }  

方法說明:比如,“自行車”的unicode編碼值為U+1F6B2,假設我們要在程序代碼中使用“自行車”這個emoji表情,須要這樣使用:

[java]  view plain copy
 
  1. String bike = String.valueOf(Character.toChars(0x1F6B2));  

事實上前面那個emoji()方法就是對上面這行代碼做了個簡單的封裝而以。如今知道怎樣使用emoji表情代碼了吧,事實上就是將代碼表中的U+替換為0x,再調用emoji方法進行轉換,將轉換后的結果放在文本消息的Content中,返回給用戶就會顯示emoji表情了。

以下,我給出一個使用emoji表情的完整演示例子,例如以下:

[java]  view plain copy
 
  1. package org.liufeng.course.service;  
  2.   
  3. import java.util.Date;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7.   
  8. import org.liufeng.course.message.resp.TextMessage;  
  9. import org.liufeng.course.util.MessageUtil;  
  10.   
  11. /** 
  12.  * 核心服務類 
  13.  *  
  14.  * @author liufeng 
  15.  * @date 2013-05-20 
  16.  */  
  17. public class CoreService {  
  18.     /** 
  19.      * 處理微信發來的請求 
  20.      *  
  21.      * @param request 
  22.      * @return 
  23.      */  
  24.     public static String processRequest(HttpServletRequest request) {  
  25.         String respMessage = null;  
  26.         try {  
  27.             // xml請求解析  
  28.             Map<String, String> requestMap = MessageUtil.parseXml(request);  
  29.   
  30.             // 發送方帳號(open_id)  
  31.             String fromUserName = requestMap.get("FromUserName");  
  32.             // 公眾帳號  
  33.             String toUserName = requestMap.get("ToUserName");  
  34.   
  35.             // 回復文本消息  
  36.             TextMessage textMessage = new TextMessage();  
  37.             textMessage.setToUserName(fromUserName);  
  38.             textMessage.setFromUserName(toUserName);  
  39.             textMessage.setCreateTime(new Date().getTime());  
  40.             textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);  
  41.             textMessage.setFuncFlag(0);  
  42.             textMessage.setContent("自行車" + emoji(0x1F6B2) + " 男性" + emoji(0x1F6B9) + " 錢袋" + emoji(0x1F4B0));  
  43.             respMessage = MessageUtil.textMessageToXml(textMessage);  
  44.         } catch (Exception e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.   
  48.         return respMessage;  
  49.     }  
  50.   
  51.     /** 
  52.      * emoji表情轉換(hex -> utf-16) 
  53.      *  
  54.      * @param hexEmoji 
  55.      * @return 
  56.      */  
  57.     public static String emoji(int hexEmoji) {  
  58.         return String.valueOf(Character.toChars(hexEmoji));  
  59.     }  
  60. }  

上面代碼的作用是:無論用戶發送什么類型的消息,都返回包含三個emoji表情的文本消息。假設不明確CoreService類怎么回事,請查看本系列教程的第5篇,或者你僅僅須要認真看第42行代碼,就知道怎么樣把emoji表情代碼放在文本消息的Content中了。最后再來看下執行效果截圖:

本篇文章要講的內容就至此結束了,但關於emoji表情的解說還沒有結束,為什么這么說呢?請細致看本篇文章的第二張截圖,也就是小q機器人的文本菜單,里面用到的emoji表情在本文給出的emoji代碼表里根本找不到(微信上的emoji表情與代碼表中全然一致),那這個emoji表情又是怎樣發送的呢,請聽下回分解!

 

假設認為文章對你有所幫助,請通過留言或關注微信公眾帳號xiaoqrobot來支持柳峰哦!

轉帖請注明本文出自柳峰的博客(http://blog.csdn.net/lyq8479),請尊重他人的辛勤勞動成果,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM