手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:苹果相关

Things的同步无效了

在电脑中辛苦的加了一些计划,发现手机上没有同步回来。再看了一下,上次同步时间已经是很久前了。
于是检查再检查,同时google了一下。终于发现一个小问题

1、things 的同步服务器是用GAE的。于是:http://code.google.com/status/appengine,这里面不正常的时候,你肯定会不正常

2、GAE经常被墙,最近斯巴达 勇士们在战斗了。所以GAE又抽风了。所以,你懂的。

3、肿么办?还 好我自备铝合金梯子,翻过了小墙。嗯,我会小心的,不会象某大学同学那样,在翻墙的时候摔倒,被刺破了XX。当初看到那张图时,我就不禁蛋疼了一下。

Tags: things

还是APNS的一些问题

其实在做APNS发送信息的时候,总会有一些信息好象没有收到。所以我就在想是什么问题。

看到这一篇的时候,才感觉可能会是这种原因:

问题四:Push消息丢失

如果客户端偶尔能收到消息,但有丢失,那很有可能是服务器往苹果APNs服务器写入失败、或者写成功后苹果服务器未发送(批量往一堆token发送消息,如果第一个token发送失败,那么苹果不会再给后面同一批token推送消息)。失败原因可通过向苹果做Feekback查询。

---

这段文字来自:http://yangzl.net/tag/ios%E5%BC%80%E5%8F%91%EF%BC%8C%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81/

同时觉醒和我说,feekback在这里可以查询一下:http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html

里面是这么一句:Feedback Service

Sometimes APNs might attempt to deliver notifications for an application on a device, but the device may repeatedly refuse delivery because there is no target application. This often happens when the user has uninstalled the application. In these cases, APNs informs the provider through a feedback service that the provider connects with. The feedback service maintains a list of devices per application for which there were recent, repeated failed attempts to deliver notifications. The provider should obtain this list of devices and stop sending notifications to them. For more on this service, see “The Feedback Service.”

证明还是可以查的嘛 .准备下次慢慢查一下

转:Emoji表情符号兼容方案

Emoji,原来的项目中没有遇到,因为从未想过别人会从网页里发送表情(表情 信息是从iphone手机上发出来的),查了一下资料,果然很多人遇到了这个问题。不过也幸好有了解决方案了。。。

Emoji表情符号兼容方案

一 什么是Emoji   

      emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)
表情符号现已普遍应用于手机短信和网络聊天软件。
emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情。
手机上如何使用emoji:
1.iphone、ipad系统:安装emoji free,再设置-通用-键盘-国际键盘-添加新的键盘,然后把emoji添加在里面即可在发短信和一些输入文本的文本框中输入表情。
IOS 5用户可直接从通用中添加emoji 键盘,无需再安装emoji free
2.android系统:安装“GO输入法国际版”后,在输入法里面点选安装emoji插件可以使用。另外“百度输入法”也自带emoji表情
3.Windows Phone : 安装此 Emoji Keys,在其中输入之后复制粘贴到需要输入表情的地方即可

    <此段摘自百度百科 http://baike.baidu.com/view/2631589.htm>

大小: 568.34 K
尺寸: 494 x 376
浏览: 1489 次
点击打开新窗口浏览全图

二 Emoji表情符号问题
   1 问题:
     IOS版本之间发送的Emoji表情符号不兼容,只看到方块
     不同IOS版本在数据库存数据时,有时会发生系统错误
   2 现象:
     IOS 4 输入Emoji表情符,在IOS5.01 显示正常,在IOS5.1中(大陆版)显现为方块, 但IOS5.01/5.1输入的表情符号,显示正      常
     IOS5.01/5.1 输入表情符,在IOS5.01/5.1中显示正常,但在IOS4.X显示为方块
     输入Emoji入帖子正文, 可正常存储。 但用户昵称在IOS4.X 输入Emoji,系统正常, 而IOS5.01/5.1则提示系统错误。
   3 本质:
     iOS 5 and OS X 10.7 (Lion) use the Unicode 6.0 standard ‘unified’ code points for emoji.
     iOS 5 Emoji  采用Unicode 6 标准来统一code points 

     iOS 4 on SoftBank iPhones used a set of unofficial code points in the Unicode Private Use Area, and so aren't      compatible with any other systems
     iOS 4 采用SoftBank Unicode, 一种非官方的, 采用私有Unicode 区域。
   4 举例:
     one emoji symbol "tiger", it is "\U0001f42f" in iOS5, but "\ue050" in earlier iOS version
    虎脸Emoji符号在iOS5 为Unicode:\U0001f42f;而在IOS4.x 为:\ue050 (SoftBank 编码)
    另外: 按理讲, 从iOS5 应该兼容以前版本的emoji, 但现在出现5.01版本完美兼容(无论大陆版,美版,还是港版), 而5.1     大陆版出现了不兼容现象(腾讯微信也出现了同样的问题)。
三 问题分析
   1 系统存储错误问题(如昵称,帖子内容)
    原因:
    由于IOS5.X 采用新的Unicode, 其UTF8 编码大多为4个字节, 而由于昵称/帖子内容column并没设成utf8mb4,因此存储会    发生错误。
    解决方法:
    将昵称/帖子内容设成utf8mb4
   2 不同iOS 之间Emoji 不兼容的问题。 
   原因:
   iOS 5 到4 不兼容的问题,很简单,unicode6 和softbank编码的不同
   iOS 4 到 5,按理说应该兼容,也就是说,iOS应该自动判断如果是softbank编码,自动转成unicode6。但现在看来, iOS5.1(大陆版)好像只支持unicode6, 而不支持softbank. 
   解决方法: 
   客户端发送emoji-encoding: Softbank或unicode6, 由服务端分别给出相应的编码表。
四 解决方案
   1 数据存储(MySQL varchar  数据类型对UTF8 支持问题)
    MYSQL 5.5 之前, UTF8 编码只支持1-3个字节, 从MYSQL5.5开始,可支持4个字节UTF编码,但要特殊标记。例如我们的帖子内容项,我们加上了这个支持。服务端mysql统一存储为ios5.x也就是Unicode编码。
   对应alter语句:

XML/HTML代码
  1. ALTER TABLE topic MODIFY COLUMN content varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内容';  

    2 编码转换:
    iphone手机方案
    客户端输入内容时候,统一存储为unicode编码(这里需要从softbank编码转换为unicode编码)。客户端请求内容的时候,需要根据不同的客户端给出不同的编码,ios4采用softbank编码做替换,ios5采用unicode编码直接支持。
    android或wp其他手机方案:
    如果没有emoji表情库,将无法输入。针对输入问题,将统一采用unicode编码存储。客户端请求内容的时候,将统一用softbank编码,客户端需要把emoji表情符号内置到客户端,做对应的编码和img替换。
    web解决方案:
    参考android或wp其他手机方案
五 部分代码
   1 sql代码

XML/HTML代码
  1. CREATE TABLE `ios_emoji` (  
  2.   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',  
  3.   `unicode` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Unicode编码',  
  4.   `utf8` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'UTF8编码',  
  5.   `utf16` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'UTF16编码',  
  6.   `sbunicode` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SBUnicode编码',  
  7.   `filename` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件名',  
  8.   `filebyte` longblob COMMENT '文件内容字节',  
  9.   PRIMARY KEY (`id`)  
  10. ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='ios表情编码表';  

   2 java代码

Java代码
  1. import java.io.UnsupportedEncodingException;  
  2. import org.apache.commons.lang.StringUtils;  
  3.   
  4.   
  5. public class IOSEmojiUtil {  
  6.       
  7.     public static String[] ios5emoji ;  
  8.     public static String[] ios4emoji ;  
  9.     public static String[] androidnullemoji ;  
  10.     public static String[] adsbuniemoji;  
  11.       
  12.     public static void initios5emoji(String[] i5emj,String[] i4emj,String[] adnullemoji,String[] adsbemoji){  
  13.         ios5emoji = i5emj;  
  14.         ios4emoji = i4emj;  
  15.         androidnullemoji = adnullemoji;  
  16.         adsbuniemoji = adsbemoji;  
  17.     }  
  18.       
  19.     //在ios上将ios5转换为ios4编码  
  20.     public static String transToIOS4emoji(String src) {  
  21.         return StringUtils.replaceEach(src, ios5emoji, ios4emoji);  
  22.     }  
  23.     //在ios上将ios4转换为ios5编码  
  24.     public static String transToIOS5emoji(String src) {  
  25.         return StringUtils.replaceEach(src, ios4emoji, ios5emoji);  
  26.     }  
  27.     //在android上将ios5的表情符替换为空  
  28.     public static String transToAndroidemojiNull(String src) {  
  29.         return StringUtils.replaceEach(src, ios5emoji, androidnullemoji);  
  30.     }  
  31.       
  32.     //在android上将ios5的表情符替换为SBUNICODE  
  33.     public static String transToAndroidemojiSB(String src) {  
  34.         return StringUtils.replaceEach(src, ios5emoji, adsbuniemoji);  
  35.     }  
  36.       
  37.     //在android上将SBUNICODE的表情符替换为ios5  
  38.     public static String transSBToIOS5emoji(String src) {  
  39.         return StringUtils.replaceEach(src, adsbuniemoji, ios5emoji);  
  40.     }  
  41.       
  42.     //eg. param: 0xF0 0x9F 0x8F 0x80  
  43.     public static String hexstr2String(String hexstr) throws UnsupportedEncodingException{  
  44.         byte[] b = hexstr2bytes(hexstr);  
  45.         return new String(b, "UTF-8");  
  46.     }  
  47.       
  48.     //eg. param: E018  
  49.     public static String sbunicode2utfString(String sbhexstr) throws UnsupportedEncodingException{  
  50.         byte[] b = sbunicode2utfbytes(sbhexstr);  
  51.         return new String(b, "UTF-8");  
  52.     }  
  53.       
  54.     //eg. param: 0xF0 0x9F 0x8F 0x80  
  55.     public static byte[] hexstr2bytes(String hexstr){  
  56.         String[] hexstrs = hexstr.split(" ");  
  57.         byte[] b = new byte[hexstrs.length];  
  58.           
  59.         for(int i=0;i<hexstrs.length;i++){  
  60.             b[i] = hexStringToByte(hexstrs[i].substring(2))[0];  
  61.         }  
  62.         return b;  
  63.     }  
  64.       
  65.     //eg. param: E018  
  66.     public static byte[] sbunicode2utfbytes(String sbhexstr) throws UnsupportedEncodingException{  
  67.         int inthex = Integer.parseInt(sbhexstr, 16);  
  68.         char[] schar = {(char)inthex};  
  69.         byte[] b = (new String(schar)).getBytes("UTF-8");  
  70.         return b;  
  71.     }  
  72.       
  73.     public static byte[] hexStringToByte(String hex) {  
  74.         int len = (hex.length() / 2);  
  75.         byte[] result = new byte[len];  
  76.         char[] achar = hex.toCharArray();  
  77.         for (int i = 0; i < len; i++) {  
  78.             int pos = i * 2;  
  79.             result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));  
  80.         }  
  81.         return result;  
  82.     }  
  83.   
  84.   
  85.     private static byte toByte(char c) {  
  86.         byte b = (byte"0123456789ABCDEF".indexOf(c);  
  87.         return b;  
  88.     }  
  89.       
  90.     public static void main(String[] args) throws UnsupportedEncodingException {  
  91.         // TODO Auto-generated method stub  
  92.         byte[] b1 = {-30,-102,-67}; //ios5 //0xE2 0x9A 0xBD       
  93.         byte[] b2 = {-18,-128,-104}; //ios4 //"E018"  
  94.           
  95.         //-------------------------------------  
  96.           
  97.         byte[] b3 = {-16,-97,-113,-128};    //0xF0 0x9F 0x8F 0x80         
  98.         byte[] b4 = {-18,-112,-86};         //E42A    
  99.           
  100.           
  101.         ios5emoji = new String[]{new String(b1,"utf-8"),new String(b3,"utf-8")};  
  102.         ios4emoji = new String[]{new String(b2,"utf-8"),new String(b4,"utf-8")};      
  103.           
  104.           
  105.         //测试字符串  
  106.         byte[] testbytes = {105,111,115,-30,-102,-67,32,36,-18,-128,-104,32,36,-16,-97,-113,-128,32,36,-18,-112,-86};  
  107.         String tmpstr = new String(testbytes,"utf-8");  
  108.         System.out.println(tmpstr);  
  109.           
  110.           
  111.         //转成ios4的表情  
  112.         String ios4str = transToIOS5emoji(tmpstr);  
  113.         byte[] tmp = ios4str.getBytes();  
  114.         //System.out.print(new String(tmp,"utf-8"));          
  115.         for(byte b:tmp){  
  116.             System.out.print(b);  
  117.             System.out.print(" ");  
  118.         }  
  119.     }  
  120.       
  121. }  

 

六 参考资料
1 Emoji 全编码表:(我参考的这个)
  http://punchdrunker.github.com/iOSEmoji/table_html/flower.html
2 Emoji全编码表
  http://code.iamcal.com/php/emoji/

3 iOS5/4 Emoji  兼容性:
  http://stackoverflow.com/questions/7856775/how-to-convert-the-old-emoji-encoding-to-the-latest-encoding-in-ios5
4 MySQL emoji问题
  http://dropblood.com/archives/ios-mysql-emoji
5 Emoji 中文对应表
  http://www.iapps.im/wp-content/uploads/2012/02/emoji-pinyin.png?r=010

七 下载资源 

emoji图片和编码表 http://download.csdn.net/detail/qdkfriend/4309051

  包括emoji文件表,emoji数据编码表(Unicode编码,UTF8编码,UTF16编码,SBUnicode编码)

参考:禁用 UIWebView 里面的链接长按弹出效果

张宴在他的博客里说到:苹果一直拒绝 UIWebView 内嵌 HTML5 页面的 iPhone、iPad APP应用上架到 App Store,建议这样的APP去做成Safari的Web应用
但是,他用另外的办法解决了这个小问题,即不让别人感觉到HTML5页面可以被touch:

XML/HTML代码
  1. 1、URL不让直接通过浏览器访问(UIWebView的请求Header头中加点东西,在服务器端将APP内嵌的访问和通过直接浏览器访问区分开来),或者通过浏览器访问时,返回JSON、XML信息,输出“Interface Error”,忽悠苹果审核人员说这是HTTP协议的接口,不是网页。  
  2.   
  3.   2、禁用、禁止 UIWebView 里面的链接长按弹出效果。加入一行 CSS 代码,禁用类似下图的链接长按弹出效果:  
  4. html,body{-webkit-touch-callout: none;}  

以前没有注意过这些,以前只是注意到连续的数字会被当成电话可以被Call。所以只是加了一个telphone=no。黑黑。。
反正先了解一下总是好的。

转:智能APP的Banner

这是最近的一个小热点,即在网页的meta里加入一行代码:<meta name="apple-itunes-app" content="app-id=1234567890"/> ,红色区域就是你的APP的ID
不知道,有两个APP的情况下,即加入两条的时候会怎么样?
不过,目前该功能只支持Safari,而且是IOS上的Safari,看来IOS6中,对safari加了好多功能啊。

记录下这个,也是做个笔记。

Tags: ios