About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Mar

    18

    很简单的一行 AS3 代码:

    txt.text = String(parseFloat("9.2.1"));

    使用 Flash CS3 编译输出错误结果:92.1,既便是在高版本的 FlashPlayer 17 以上的版本中运行,也是一样错误的结果 92.1

    使用 Flash CS4 或 CC 输出正确结果:9.2,但如果将它运行在 Flash9 和 10.0 版本中,同样会变成错误的结果:92.1。如果运行在 10.1 以上的版本则输出正确结果 9.2 。

    PS:如果设置成 AS2 输出错误结果:9.21。

    突然对这个 API 感觉很不靠谱……

    Feb

    25

    苹果开发者续费时失败提示:“你的支付授权失败。请核实你的信息后重试,或试试其他付款方式” 。使用的是工商银行环球旅行信用卡 VISA 单标卡,多次银行核实了信息,没有任何错误,也多次向苹果公司客服和技术专家进行了联系,确认了帐号并没有任何异常。

    终于在 cocoachina.com 找到一个贴子,关于 VISA 单标卡续费失败的案例。虽然信息是广大银行公布的关于境内VISA单标信用卡停止境内跨行受理的通知,但 VISA 公司的政策同样适用于国内其它银行。

    因为工行环球旅行信用卡是套卡 1+1 的形式, VISA 信用卡和银联的信用卡是分开的,所以没有办法。在交通银行申请了带有 ”VISA + 银联“ 两个标志的信用卡后续费成功。

    Feb

    23

    很多时候我们需要用到设备的唯一识别码。安卓系统获取设备唯一识别码的资料网上比较多,但它们也并不通用,因为现在市场上的很多安卓机实际上它们的系统都是经过设备厂商修改过的,比如小米的系统,阿里云OS手机系统等等,所以实际上并不存在一个真正通用的方法。以下这个方法仅适用于 iPhone / iPad 设备或桌面设备,并不适用于 Android 系统(原因在后面)。

    苹果设备的 “IDFA、IDFV、UDID、OpenUDID 等等”这些标识区别可以在百度上找到,这些标识除了真正的 UDID 和 MAC 物理地址之外,其它的标识在很多情况下是会发生变化的:最常见的情况就是还原出厂设置后,会生成一个新的标识符。网络上一些第三方能够获得 UDID 的 SDK,实际上都是 OpenUDID,并不是真正的 UDID。

    苹果公司政策规定开发者是不能够获取用户设备的物理信息的(在 iOS 4.x 时代是获取 UDID 和 MAC 物理地址的,后来的新系统中都开始禁止了访问这些信息)。如果利用核客技术访问私有 API 被审核人员发现,那么一定会遭到苹果公司拒审;既便上架了被发现也会被下架。

    重要的事情说三边

    1、苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!

    2、利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!

    3、利用任何标识符统计用户数据必须接受苹果公司审核!利用任何标识符统计用户数据必须接受苹果公司审核!利用任何标识符统计用户数据必须接受苹果公司审核!

    4、开发者不要仅研究技术,也要知晓各平台的政策!开发者不要仅研究技术,也要知晓各平台的政策!开发者不要仅研究技术,也要知晓各平台的政策!

    技巧

    同一时间是指精确到毫秒级的时间!目录与创建时间!!硬件磁盘根目录即文件目录!!!

    从理论上来说,我们可以在同一时间创建两个目录,但那仅仅是理论上的,所以标题中“唯一”两个字加了引号。两块闪存盘同时间被格式化完成?这个概率可能比两个目录的创建时间完全相同的机率还要低。

    代码

    import flash.filesystem.File;
    import flash.globalization.DateTimeFormatter;

    trace("硬件信息:");

    var rootDirArr:Array = File.getRootDirectories();

    for (var i:uint = 0; i < rootDirArr.length; i++) 
    {
        var file:File = rootDirArr[i];

        var date:Date = file.creationDate;

        var dtf:DateTimeFormatter = new DateTimeFormatter(LocaleID.DEFAULT);
            dtf.setDateTimePattern("yyyy/MM/dd HH:mm:ss");

        var creationTime:String = dtf.format(date);

        //看到最后的这个 milliseconds 值了吗
        trace(file.nativePath + ":" + creationTime + "," + date.milliseconds);
    }

    如果是在我的 Windows 7 中调试运行,它会显示(它并不需要系统管理员的权限就能读取):

    硬件信息:
    C:\:2009/07/14 10:38:56,526
    D:\:2010/08/23 23:59:31,18
    E:\:2010/08/23 23:59:46,99

    如果是在我的 iOS 9.2 (iPhone6 Plus)中运行,它会显示(不需要越狱):

    硬件信息:
    /:2015/06/25 17:47:25,10

    使用这个方法最大好处就是不需要 ANE 文件。既便用户在系统设置中还原位置与隐私、还原广告标示符、抹掉所有内容与设置、升级系统等,磁盘的创建时间都不会发生变化,既便用户完全重置系统,还原所有设置到出厂状态,磁盘的创建时间都不会发生变化。经过测试,只有在使用线刷 / 强制刷机的情况下,磁盘才会被重新创建并且格式化,磁盘的创建时间才会发生变化 

    额外的话题:关于 Android 系统

    然后,以上这个方法并不适用于 Android 系统,在 Adobe 官方的 API  手册中 getRootDirectories() 方法下面已经有说明:“在根不可读的文件系统上,例如 Android 文件系统,返回的 File 对象的属性并不总是反映真实值。例如,在 Android 上,spaceAvailable 属性报告 0。” 安卓系统可以使用原生的方式获取设备id,制作成 ANE 文件给 AS3 调用。但正如前面第一段所述的,既便是 Google 提供的 getDeviceId() 这个 API 并不通用,因为国内很多手机厂商对安卓系统进行了修改,很多权限都发生了改变。

    比如,在不使用 ANE 的情况下,在未经修改的安卓系统中,可以用如下方法读取 MAC 网卡地址。我在 HTC 手机中进行了测试,-app.xml 中的权限:

    <!--删除 android.permission.INTERNET 权限将导致无法调试设备上的应用程序-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--应同时切换 ACCESS_NETWORK_STATE 和 ACCESS_WIFI_STATE 权限,才能使用 AIR 的 NetworkInfo API-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    AS3:

    var netWorkVec:Vector.<NetworkInterface > = NetworkInfo.networkInfo.findInterfaces();

    for (var i:* in netWorkVec)
    {
        if(netWorkVec[i].hardwareAddress)
            trace("MAC 物理地址:",netWorkVec[i].hardwareAddress);
    }

    结果输出了:

    MAC 物理地址: D8:B3:77:7F:00:47

    但是,同样的代码,在国内厂商经过修改后的系统里,它并不能正常输出 MAC 网卡地址,比如使用阿里云OS的联想手机经过测试就不能。所以如果 AS3 的安卓开发者们想要一个通用的获取设备硬件信息的方法,几乎是不可能。

    Feb

    21

    Adobe AIR Gaming SDK ANE 64位版本

    • 1 Comments
    • Flash Platform

    官方博客里下载到的是 32 位的版本。在官方的论坛里找到了 64 位版本。里面的链接是指向 dropbox.com 域名的,国内用户需要链接 VPN 才能下载,不知道什么原因 Adobe 的工作人员为什么要把文件放在 dropbox 网站去~

    没有 VPN 的话也可以在这里下载:Adobe Gaming SDK 64bit ANE.zip

    在 Adobe 开发者中心还找到了另一个个人升级过的版本,但当点击他的 Game Center Demo 中点击 Score 按钮时闪退了,替换为 dropbox 上下载的 ANE 文件并不会闪退,估计有 Bug……

    Feb

    20

    全局函数 navigateToURL() 功能很强大,仔细看它在 API 手册中的介绍,可以打开很多协议方案,可以用它启动拔号程序,短信程序等,也可以用它来打开 APP Store 程序。

    打开某个 APP 对应的中国市场页面:

    navigateToURL(new URLRequest("itms-apps://itunes.apple.com/cn/app/ANY_APP/idXXXXXXXXXX?mt=8"));

    用下面这种,可以自动识别多语言:

    navigateToURL(new URLRequest("itms-apps://itunes.apple.com/app/idXXXXXXXXXX"));

    跳转到用户评论页面,一般用的最多的估计就是这个:

    navigateToURL(new URLRequest("itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=XXXXXXXXXX"));

    Feb

    20

    强大的JSFL,开发Flash拓展插件

    • 0 Comments
    • Flash Platform

    1、Creating Flash Extensions — Pt. 1: Introduction

    介绍jsfl,如何从history中查看jsfl,对jsfl有基础的认识。

    2、Creating Flash Extensions — Pt. 2: The DOM

    dom结构,就是fla在jsfl语言中结构:

    fl.documents[0].timelines[0].layers[0].frames[0].elements[0];

    3、Creating Flash Extensions — Pt. 3: Manipulating the Library

    如何操作资源库,作者通过对不同类型的资源进行文件夹管理,很实用.

    创建一些交互界面,alert弹窗,确认弹窗等。 

    5、Creating Flash Extensions — Pt. 5: SWF Panels :

    用swf发布来做自定义面板,是不是很库呢?作者也推荐了几款相应的swf面板组件。 

    6、Creating Flash Extensions — Pt. 6: Custom Tools 

    自定义工具,这里可以让你自己做个画图工具了。 

     

    7、Creating Flash Extensions — Pt. 7: Distributing to Others :

    打包你开发的拓展,可以发给设计人员,也可以分享给其他人了。

     

    原文地址链接

    http://blog.fireyang.com/2011/03/29/2011-03-29-%E5%BC%BA%E5%A4%A7%E7%9A%84jsfl/

    其它相关链接

    http://kevincao.com/tag/jsfl/

    http://kevincao.com/2011/03/introduce-kafecomponent-part-2/

    Feb

    19

    第一个(在桌面上正常,在移动设备上有破音的 Bug):

    http://blog.andre-michelle.com/upload/mp3pitch/MP3Pitch.as

    第二个(这个无论是在桌面上还是移动设备上都正常,而且还有倒着播放音乐的功能):

    https://gist.githubusercontent.com/soyyo5159/4424117/raw/4765f856133538e29fec2729b03b577ef58d37ca/FrequencyChangeSound.as

    More...

    Jan

    28

    二次元世界吐槽不断:《十万个冷笑话》

    • 0 Comments
    • Movies, TV and Celebrities

     

    Jan

    24

    桌面  AIR 开发使用 openWithDefaultApplication 报以下错误:

    Error: Error #3000: Illegal path name.

    1、确认路径是否正确。

    2、-app.xml 文件添加配置

    <supportedProfiles>extendedDesktop</supportedProfiles>

    如果不是 extendedDesktop 项目,仅仅只是在 supportedProfiles 填写了 desktop ,在 debug 模式下同样会报错,正式发布后就好了。或者同时将两个都写上:

    <supportedProfiles>extendedDesktop desktop</supportedProfiles>

    extendedDesktop 要放在前面,desktop 放在后面,这样在调试模式下也不会报错。

    Jan

    21

    在一个简单的 Alert 警告框后,如果想将程序化的设置某个文本输入框的焦点,可以在 Alert 的 CloseEvent 事件侦听器里设置,但那样会多写不少代码。一个小技巧是直接在 Alert 之前对想要设置的文本框调用 setFocus() 方法,就可以在关闭 Alert 后显示聚焦了(不要写在 Alert.show 的后面)。

    someTextInput.setFocus();//一定记得写在Alert前面
    Alert.show("someTextInput 不能为空。");
    //someTextInput.setFocus();//不要写在Alert后面