集成推送平台 PushSDK 设计文档 此文档在于向开发者介绍魅族统一推送平台 PushSDK 如何对各个厂家的 PushSDK 进行整合以及我们在统一接口设计中遵循的规则, 由于各个厂家的 API 接口功能差异巨大我们只对各个厂商共用的接口进行统一封装, 当然你也可以直接使用厂商提供的接口 Ups

Similar documents
自然辩证法索引

2

* * 2

Panaboard Overlayer help

Microsoft Word - Atmel-45136A-Pick-Best-Microcontroller-Strom-Eiland-Flodell_Article_CS

Applied Biosystems StepOne™ Real-Time PCR System Quick Reference Card for Installation

1. 請 先 檢 查 包 裝 內 容 物 AC750 多 模 式 無 線 分 享 器 安 裝 指 南 安 裝 指 南 CD 光 碟 BR-6208AC 電 源 供 應 器 網 路 線 2. 將 設 備 接 上 電 源, 即 可 使 用 智 慧 型 無 線 裝 置 進 行 設 定 A. 接 上 電 源

L360/L363

Epson Perfection V39

CA Agile Vision Agile Vision 集成指南

XP-225 Series

SA2RGA Chinese user manual

Microsoft Word - Xinhua Far East_Methodology_gb_2003.doc

2

魅族推送平台接入文档 (Push-Demo)

2

关 于 瓶 装 水, 你 不 得 不 知 的 8 件 事 情 关 于 瓶 装 水, 你 不 得 不 知 的 8 件 事 情 1 水 质 : 瓶 装 的, 不 一 定 就 是 更 好 的 2 生 产 : 监 管 缺 位, 消 费 者 暴 露 于 风 险 之 中 人 们 往 往 假 定 瓶 装 水 是

集成推送平台 JAVA 版本 SDK JavaPushSdk 发布说明 ( 请使用最新版本 ) 中央仓库获取 MVN Repository 或者 Central Repository 直接下载获取 Java Server SDK 更新日志 [ ]V

此文章将会根据不同厂商的 SDK 的接入方式逐步分析, 进而梳理出最为精简的接入方式, 同时说明各个接入配置的细节问题 一接入准备工作 关于组件的基本配置将会全部打包到 aar 中的 AndroidManifest 中, 用户只需要手动配置一些与包名相关的权限配置 1.1 小米 混淆配置 基于 aa

魅族推送平台接入文档 (JAVA-SDK)

发行说明, 版

:5-6

Chn 116 Neh.d.01.nis

本文档旨在说明如果快速的接入集成推送 SDK, 快速实现小米, 华为, 魅族的推送接入, 有关详细的设计文档参考集成推送设计说明文档 准备工作 编译本项目, 配置完 android sdk 后执行以下命令, 或者你可以将本工程导入到 android studio 中./gradlew clean a

Applied Biosystems StepOne™ Real-Time PCR System User Bulletin: StepOne™ System Updates (PN A / SN 117UB20-01)

魅族开放平台 PUSH 系统 JAVA 版本 SDK JavaPushSdk 发布说明 ( 请使用最新版本 ) 中央仓库获取 MVN Repository 或者 Central Repository 直接下载获取 Java Server SDK 更新日志 [ ]V

流離所愛(完結篇)

EPSON Easy Interactive Tools Ver.4.2 Operation Guide

* * 2

XP Series

2

Microsoft Word - A_Daily

Microsoft Word - A_Daily

EMC® VNX® Series VNX8000™ Block 安装指南

XP Series

NOISE CANCELLING HEADPHONES 700

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

Microsoft Word - A_Daily

在设备联网情况下, 到达率可达到 99.9% 三 基本架构 四 组件说明 Push Service:Flyme OS 上的一个常驻系统服务, 在网络可达的情况下时刻保持与推送服务器的长连接 Push SDK: 用于接收 Push Service 透传过来的消息并回调给应用, 它包括 Android

推送平台开放接口

T stg -40 to 125 C V cc 3.8V V dc RH 0 to 100 %RH T a -40 to +125 C -0.3 to 3.6V V -0.3 to VDD+0.3 V -10 to +10 ma = 25 = 3V) VDD

封面及首頁.doc

上述字符串的 MD5 值即为签名的值 (32 位小写 ) 将签名值放在请求的参数中例如 sign=md5_sign 服务端 SDK 调用 API 的应用的私钥 Secret Key 为 appsecret /** parammap 请求参数 secret 密钥 *

L365

Microsoft Word - Functional_Notes_3.90_CN.doc

封面.PDF

推送平台开放接口

StorageTek Virtual Storage Manager GUI - 安全指南

Xear 3D USB CH-IN-2 SPKs 2 6 :

Adobe® InDesign® CS5 篩選器讀我檔案

chap-1_NEW.PDF

L210/L350

LH_Series_Rev2014.pdf

2014 年 前 言 房 地 产 投 资 信 托 基 金 (Real Estate Investment Trusts,REITs) 在 海 外 早 已 发 展 成 熟, 而 香 港 政 府 去 年 也 进 一 步 准 备 放 宽 房 托 限 制, 相 比 之 下, 中 国 已 经 改 革 开 放

ebook70-14

甲 状 腺 眼 病 您 的 医 生 认 为 您 患 有 甲 状 腺 眼 病 这 是 自 身 免 疫 性 疾 病, 您 体 内 的 免 疫 系 统 产 生 某 些 因 子 刺 激 眼 球 运 动 的 肌 肉 增 生, 导 致 眼 球 突 出 眼 睑 退 缩 复 视 视 力 下 降 和 眼 部 刺 激

Microsoft PowerPoint - IAS 21 - IFRS宣導會.pptx

WF-2630 Series

精 神 與 自 然 : 楊 慈 湖 心 學 研 究 趙 燦 鵬 哲 學 博 士 嶺 南 大 學 二 零 零 五 年


經濟部智慧財產局

(Microsoft PowerPoint A UPEC IR ppt \(cn\) \(NDR\)4.8 [\317\340\310\335\304\243\312\275])

有没有免费的交友喂喂助理不是滴滴叫鸡,不是滴滴约炮,不是滴滴约妹、约

¬¬

% 6.% 9.6% % 7.% 1.8% % 68.7% 14.5% : 15.8% 57.9% 4.7%

<453A5CCEC4B5B55C C41CBAAB2F5D4C6BDD3BFDACAB9D3C3CBB5C3F756312E305F E646F63>

HKG_ICSS_FTO_sogobrilingual_100_19Feb2016_31837_tnc

1 目 的 为 维 护 国 内 政 企 市 场 良 好 的 市 场 秩 序, 加 强 对 窜 货 等 重 大 违 规 行 为 的 管 理, 特 在 2016 年 中 兴 通 讯 国 内 政 企 市 场 窜 货 管 理 办 法 基 础 上 制 定 本 管 理 办 法 本 管 理 办 法 适 用 于 中

QQGQ2.E Power Supplies, Information Technology Equipment Including Ele... 1/10

1005 错误, 请参考 API 文档 1006 签名认证失败 不合法 appkey 不合法 不能为空 应用被加入黑名单 应用推送速率过快 透传超过限制 接口签名规范 请求分别是 k1 k2 k3, 它们的值分别是

WF-6593

公平交易法損害賠償制度之功能與詮釋

<4D F736F F D20B6BCB0EE5FB1B8B0B85F5B DB8BD A1AA BAC52DB5D8CCFABDA8D6FEB9A4B3CCD2BBC7D0CFD5B8BDBCD3CFD5CCF5BFEE2E646F63>

专 业 为 本 客 户 为 先 北 京 康 信 知 识 产 权 代 理 有 限 责 任 公 司 是 一 家 经 相 关 主 管 部 门 批 准, 具 有 国 内 外 专 利 商 标 代 理 资 格, 能 够 提 供 全 方 位 知 识 产 权 代 理 服 务 的 法 律 服 务 机 构 公 司 成

這 是 醫 生 在 小 兒 的 初 步 診 斷 的 判 語 這 樣 的 一 段 話, 令 我 望 子 成 龍 的 美 夢 碎 了 醣 豆 豆 大 夢 想 十 一 年 前 的 資 訊 沒 有 今 天 的 發 達, 互 聯 網 還 是 一 個 很 奢 侈 的 東 西, 加 上 黏 多 醣 症 這 個 罕

浙江师范大学2014年度毕业生就业质量报告

目 录 监 管 资 讯 2016 年 全 国 保 险 监 管 工 作 会 议 召 开...3 协 会 动 态 赤 峰 保 险 行 业 协 会 召 开 数 据 统 计 和 信 息 宣 传 总 结 表 彰 会 议...5 赤 峰 市 保 险 行 业 协 会 秘 书 处 召 开 2015 年 度 述 职

同 时, 采 取 提 供 新 闻 线 索 和 素 材 安 排 专 访 等 方 式 主 动 为 新 闻 媒 体 服 务, 为 采 访 报 道 活 动 创 造 便 利 条 件 建 设 网 络 信 息 发 布 平 台 2013 年 9 月 开 通 中 央 纪 委 监 察 部 网 站,2015 年 1 月

公務員服務法第13條相關解釋彙整表

大陸教育部等6個部門公佈「現代職業教育體系建設規劃 ( 年)」規劃到2015年初步形成現代職業教育體系框架,到2020年基本建成「中國」特色現代職業教育體系

B1

時間軸上的竹蓮記憶 學務主任 黃雅彙 我不是竹蓮國小的畢業校友 但對於身為新竹人的我來 說 仔細回想起來 似乎和竹蓮有著一種特別的緣分 對竹蓮國小最初的印象是在小學的時候 猶記得年幼的 我經過一段時日的啦啦隊舞蹈訓練後 老師便帶著我們從學 校步行到竹蓮國小來參加比賽 一踏入竹蓮校門 映入眼簾 的是黑

B1

Microsoft Word - 临政办发6.doc

资 讯 速 递 台 基 于 大 数 据 的 学 校 督 导 评 估 系 统 建 设 上 海 市 闵 行 区 人 民 政 府 教 育 督 导 室 ( 摘 要 ) 闵 行 教 育 在 深 化 教 育 改 革 探 索 管 办 评 分 离 的 背 景 下, 把 教 育 督 导 评 估 系 统 建 设 作 为

% 29.9%.7% % 2% 2.1% % 45.2% 4.9% % 42.5% 14.8% % 41.5% 23.4%... 2

¬¬

Microsoft Word - CVersion doc

图 书 在 版 编 目 (CIP) 数 据 临 床 肿 瘤 学 : 全 2 册 /( 美 ) 尼 德 胡 贝 尔 (Niederhuber,J.E.) 等 原 著 ; 孙 燕 译. -- 北 京 : 人 民 军 医 出 版 社, ISBN Ⅰ.1 临

Two analytical 2d line intersection in OpenCASCADE Abstract. OpenCASCADE geometric tools provide algorithms to calculate the intersectio

1.5招募说明书(草案)

中共绍兴市委办公室 (通 知)

COVER.cdr

<5C5C E E332E CB6ADCAC2BBE1B0ECB9ABCAD25C31302DB6A8C6DAB1A8B8E65C C4EAB5DAD2BBBCBEB6C8B1A85C C4EAB5DAD2BBBCBEB6C8B1A8B

Layout 1

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

The presentation is prepared by BH Global Corporation Limited. (the Company ) and is intended solely for your personal reference and is strictly confi

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本

ebook 86-15

Transcription:

集成推送平台 PushSDK 设计文档 此文档在于向开发者介绍魅族统一推送平台 PushSDK 如何对各个厂家的 PushSDK 进行整合以及我们在统一接口设计中遵循的规则, 由于各个厂家的 API 接口功能差异巨大我们只对各个厂商共用的接口进行统一封装, 当然你也可以直接使用厂商提供的接口 UpsPushSDK 设计初衷不仅仅是在帮助开发者接入魅族的统一推送平台, 也希望我们能够尽量简化接口的同时, 能够将厂商所有的个性化接口全部提供给开发者, 即使开发者不使用魅族统一推送平台也能通过各个厂商提供推送服务平台快速接入 背景 目前各个主流厂商为了优化手机耗电情况, 实行静默后台策略, 导致很多应用无法常驻后台, 导致基于长连接的推送应用也无法常驻后台, 进而影响推送消息的到达率, 因此各个主流厂商 ( 小米, 华为, 魅族 ) 都提供基于系统推送服务的方案, 应用需要接入各个厂商的 PushSDK 才能在各个平台的手机上接收推送消息 此项目为了屏蔽不同厂商 PushSDK 的接入流程, 为开发这提供统一的接口, 方便开发者一次集成, 即可完成不同厂商的 PushSDK 的接入 一. 接入说明 快速接入文档详见统一推送平台的规则说明 二. 接口说明 为了统一接入方式,ups-meizu-pushsdk 沿用魅族 pushsdk 的接口的定义方式, 其主要包括 UpsPushManager 功能入口类和接收消息回调的广播回调类 UpsPushReceiver 2.1 UpsPushManager 接入类

接口名称 register(context,string appid,string appkey) unregister(context ) setalias(context,string alias) unsetalias(context,string alias) 接口说明 订阅接口 反订阅接口 订阅别名 取消别名 使用建议 建议 Application oncreate 调用 取消所有推送时使用, 慎用, 如果取消, 将有可能停止所有推送 无 无 是已经废弃 对应 UpsPushReceiver 回调方法 onupscommandresult(context, UpsCommandMessage upscommandmessage) onupscommandresult(context, UpsCommandMessage upscommandmessage) onupscommandresult(context, UpsCommandMessage upscommandmessage) onupscommandresult(context, UpsCommandMessage upscommandmessage) 2.2 UpsPushMessageReceiver 广播接收器 UpsPushMessageReceiver 是一个抽象的 BroadcastReceiver 类, 为了统一各个厂商的回调, 必须定义通用的方法, 在包装数据格式时只是原样返回, 不做任何修饰, 里面定义了五个方法, 分别为 onthroughmessage,onnotificationclicked,onnotificationarrived,onnotifi cationdeleted,onupscommandresult 接口名称接口说明使用建议 onthroughmessage(context,upspushmessage upspushmessage) onnotificationclicked(context, UpsPushMessage upspushmessage) 是已经废弃 透传消息回调无 通知栏点击回调无

接口名称接口说明使用建议 onnotificationarrived(context, UpsPushMessage upspushmessage) onnotificationdeleted(context, UpsPushMessage upspushmessage) onupscommandresult(context, UpsCommandMessage upscommandmessage) 通知栏展示回调 通知栏删除回调 小米, 魅族尽在应用进程在时回调, 华为不回调 仅仅 Flyme 基于 android6.0 以下版本会回调, 小米华为均不支持 无 是已经废弃 三. UPSManager API 详细说明 3.0 public static void enabledirectmode(context, boolean enable) 是启用直连模式, 启用该模式可以直接进行相应厂商接口调试, 在发起订阅, 别名相关操作时不再与魅族推送平台进行交互,UpsPushReceiver 直接返回相关平台信息 NOTE: 正式发布时请关闭此模式, 默认该模式关闭 3.1 public static void register(context,string appid,string appkey) 注册统一推送服务, 建议在应用启动时调用 Android 平台上 app 的上下文, 建议传入当前 app 的 application appid appkey 应用在统一集成平台申请的 appid 应用在统一集成平台申请的 appkey

3.2 public static void unregister(context ) 反订阅推送服务, 关闭推送时使用 Android 平台上 app 的上下文, 建议传入当前 app 的 application 3.3 public static void setalias(context,string alias) Android 平台上 app 的上下文, 建议传入当前 app 的 application alias 应用别名 3.4 public static void unsetalias(context,string alias) Android 平台上 app 的上下文, 建议传入当前 app 的 application alias 应用别名 四. UpsPushMessageReceiver 回调方法详细说明 4.1 public void onthroughmessage(context,upspushmessage upspushmessage) 接收透传消息回调 NOTE: Android 平台上 app 的上下文, 建议传入当前 app 的 application

upspushmessage 服务端返回的结果全部封装在 upspushmessage 对象中, 可以从对象中和获取例如 content title extra pushtype NOTE: UpsPushMessage 在设计 UpsPushMessage 时我们尽量保证将厂商提供的参数信息回调给用户, 方便开发者能够使用各个厂商的个性化功能 参数名 title content pushtyp e extra 消息的标题, 如果时通知栏消息, 则为通知栏标题 消息内容, 如果时通知栏则为消息通知栏内容, 如果为透传消息, 则为透传消息体 消息类型,0 代表通知栏消息,1 代表透传消息 厂商类型包括 : UpsPushMessage.MEIZU,UpsPushMessage.HUAWEI,UpsPushMessage.XI AOMI 代表各个平台的传递的对象, 魅族代表 selfdefinecontentstring, 小米代表 MiPushMessage, 华为代表 bundle, 需要通过判断 进行对象类型转化, 如下 : if(==upspushmessage.meizu){ string extra = extra; } else if(==upspushmessage.xiaomi){ MiPushMessage mipushmssage = (MiPushMessage)extra; } else if(==upspushmessage.huawei){ Bundle bundle = (Bundle)extra; } 4.2 public void onnotificationclicked(context, UpsPushMessage upspushmessage) 接收通知栏消息点击回调 Android 平台上 app 的上下文, 建议传入当前 app 的 application

upspushmessage 服务端返回的结果全部封装在 upspushmessage 对象中, 可以从对象中和获取例如 content title extra pushtype NOTE: UpsPushMessage 在设计 UpsPushMessage 时我们尽量保证将厂商提供的参数信息回调给用户, 方便开发者能够使用各个厂商的个性化功能 参数名 title content pushtyp e notifyi d extra 消息的标题, 如果时通知栏消息, 则为通知栏标题 消息内容, 如果时通知栏则为消息通知栏内容, 如果为透传消息, 则为透传消息体 消息类型,0 代表通知栏消息,1 代表透传消息 通知栏消息 Id 厂商类型包括 : UpsPushMessage.MEIZU,UpsPushMessage.HUAWEI,UpsPushMessage.XI AOMI 代表各个平台的传递的对象, 魅族代表 selfdefinecontentstring, 小米代表 MiPushMessage, 华为代表 bundle, 需要通过判断 进行对象类型转化, 如下 : if(==upspushmessage.meizu){ string extra = extra; } else if(==upspushmessage.xiaomi){ MiPushMessage mipushmssage = (MiPushMessage)extra; } else if(==upspushmessage.huawei){ Bundle bundle = (Bundle)extra; } 4.3 public void onnotificationarrived(context, UpsPushMessage upspushmessage) 接收通知栏消息到达回调 Android 平台上 app 的上下文, 建议传入当前 app 的 application

upspushmessage 服务端返回的结果全部封装在 upspushmessage 对象中, 可以从对象中和获取例如 content title extra pushtype NOTE: UpsPushMessage 在设计 UpsPushMessage 时我们尽量保证将厂商提供的参数信息回调给用户, 方便开发者能够使用各个厂商的个性化功能 参数名 title content pushtyp e notifyi d extra 消息的标题, 如果时通知栏消息, 则为通知栏标题 消息内容, 如果时通知栏则为消息通知栏内容, 如果为透传消息, 则为透传消息体 消息类型,0 代表通知栏消息,1 代表透传消息 通知栏消息 Id 厂商类型包括 : UpsPushMessage.MEIZU,UpsPushMessage.HUAWEI,UpsPushMessage.XI AOMI 代表各个平台的传递的对象, 魅族代表 selfdefinecontentstring, 小米代表 MiPushMessage, 华为代表 bundle, 需要通过判断 进行对象类型转化, 如下 : if(==upspushmessage.meizu){ string extra = extra; } else if(==upspushmessage.xiaomi){ MiPushMessage mipushmssage = (MiPushMessage)extra; } else if(==upspushmessage.huawei){ Bundle bundle = (Bundle)extra; } 4.4 public void onnotificationdeleted(context, UpsPushMessage upspushmessage) 接收通知栏消息删除回调 Android 平台上 app 的上下文, 建议传入当前 app 的 application

upspushmessage 服务端返回的结果全部封装在 upspushmessage 对象中, 可以从对象中和获取例如 content title extra pushtype NOTE: UpsPushMessage 在设计 UpsPushMessage 时我们尽量保证将厂商提供的参数信息回调给用户, 方便开发者能够使用各个厂商的个性化功能 参数名 title content pushtyp e notifyi d extra 消息的标题, 如果时通知栏消息, 则为通知栏标题 消息内容, 如果时通知栏则为消息通知栏内容, 如果为透传消息, 则为透传消息体 消息类型,0 代表通知栏消息,1 代表透传消息 通知栏消息 Id 厂商类型包括 : UpsPushMessage.MEIZU,UpsPushMessage.HUAWEI,UpsPushMessage.XI AOMI 代表各个平台的传递的对象, 魅族代表 selfdefinecontentstring, 小米代表 MiPushMessage, 华为代表 bundle, 需要通过判断 进行对象类型转化, 如下 : if(==upspushmessage.meizu){ string extra = extra; } else if(==upspushmessage.xiaomi){ MiPushMessage mipushmssage = (MiPushMessage)extra; } else if(==upspushmessage.huawei){ Bundle bundle = (Bundle)extra; } 4.5 public void onupscommandresult(context, UpsCommandMessage upscommandmessage) 接收订阅, 反订阅, 别名订阅, 取消别名订阅回调 Android 平台上 app 的上下文, 建议传入当前 app 的 application

upscommandmessage 服务端返回的结果全部封装在 upscommandmessage 对象中, 可以从对象中和获取例如 code,message,commandtype,commandresult NOTE: UpsCommandMessage 具体 参数名 code message commandty pe commandre sult extra 表示订阅, 反订阅的返回码, 如果成功, 即返回 UPS.SUCCESS==200, 则返回错误状态码 表示执行请求返回的成功与错误信息 表示请求服务类型, 目前包括四种 UpsManager.REGISTER,UpsManager.UNREGISTER,UpsManager.SUBAL IAS,UpsManager.UNSUBALIAS 表示执行成功后, 服务端返回的结果参数, 例如订阅成功后, 返回的 pushid. 厂商类型包括 : UpsPushMessage.MEIZU,UpsPushMessage.HUAWEI,UpsPushMessage. XIAOMI 代表各个平台传递对象, 魅族为空, 小米为 MiPushCommandMessage, 华为为 Bundle, 需要通过 进行类型转换如下代码 : if(==upspushmessage.meizu){ string extra = extra; } else if(==upspushmessage.xiaomi){ MiPushCommandMessage mipushcommandmessage = (MiPushCommandMessage)extra; } else if(==upspushmessage.huawei){ Bundle bundle = (Bundle)extra; } 五技术实现 5.1 UpsManager 接口代理 UpsManager 调用的定义的 API 最终会调用各个厂商提供的 API, 我们展示屏蔽了具体进行厂商判断的细节, 以及对接魅族统一推送平台的接口 以下为订阅逻辑的逻辑图 :

具体步骤基本和厂商 sdk 的逻辑一致, 只是增加了上报魅族统一推送平台订阅状态的逻辑, 该逻辑我们可以考虑是支持上报, 即使此步骤执行不成功, UpsReceiver 也会回调各个厂商的状态, 完全不必担心此逻辑会影响厂商的具体的订阅发起与回调逻辑 NOTE: 以上步骤值讨论了订阅的逻辑, 其他如别名订阅与此大致一致 License /* * MIT License * * Copyright (c) [2017] [Meizu.inc] * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */