移动互联网(一)短信和彩信界面开发包

参与这个项目,短信和彩信功能。它被认为是该项目的一个重要组成部分,如何开发这个功能以前认为。例如,有很多订单我们永和系统,怎样让用户及时知道自己卡里的消费情况?怎样让用户心中存在安全感,试想想在你的银行卡每次消费或者转入、转出每一笔款的时候都有短信提示,你是不是无意中添加了一份安全感呢?

大家在想想眼下的各类门户站点,以及我们经常使用的CSDN等论坛都提供有短信登录、以及短信验证码、短信注冊等等同短信沾边的业务内容,全部的这些都是一个思想提高系统灵活性、易用性、安全性,方便用户替用户考虑。全心全意为人民服务嘛。假如在项目中嵌入短信功能无疑添加了系统的信用等级,也是给我们的系统添加用户。学着处处替别人考虑才会使得自己受益,俗话说“利己者生,利人者恒”。意思是说做每件事情假设仅仅是想到自己,对自己有利,那么你能够生活,但利别人会让自己长久受益。

開始说正文:我负责的这部分是封装第三方的接口,把这些接口须要的各种配置以及别的工具类等都写成jar文件,在我们项目中哪一部分用到了发送短信彩信等功能仅仅须要引入我这个jar包就能够实现这些功能变的非常方便。

反过来想想我们这个高校平台里面也是能够增加短信功能。学生信息中都有学生手机号,等考试的成绩出来了给学生发个信息即可了。这样岂不是变的非常easy了,当然短信费须要让学生自己扣、这么多学生发信息也发不少。

项目经理给了我一个短信服务商给提供了一个短信API文档,里面是底层的各种方法从站点找了找这些文档从网上是能够搜到的,这块作者到是不难。重点放在了逻辑以及没有没什么bug上,由于是底层的东西须要非常慎重。这些写好之后都是提供给项目中其它人使用和调用的不容出现一点问题。在写的时候我也是格外注意加了非常多推断和空指针等处理。

设计思路;本着可靠、灵活为、别人使用方便为目的。

调用方式

WebService

server以及跨平台、跨语言的调用。

Https

这个项目中使用的是这样的方式利用urlconnection对象实现两个server之间通信,感兴趣的能够查一查。

再说一下设计底层接口时候的经验以及注意事项:

1.短信serverserver地址能够配置

服务商的接口地址可能会变。开发測试一个接口系统上线后又是还有一个接口。我们在开发时这个须要设计成可变不能写在代码里面,第一次设计我卸载了代码里面显这不灵活,事实上不不过这一点。不管大家在写什么假设是easy变、可能变的量都须要写在配置文件中面避免今后不必要的麻烦。以后维护方便不须要再修改代码。

2.同一个方法提供不同參数的接口

这一点已经体会到了在高校平台中。底层提供了各种接口不过一个更新就提供了各种參数,差点儿是更新操作都能够调用这种方法,这就是方便可用性,底层发部分是这样提供给别的,在生活中也是一样每一个人都喜欢用简单的东西。太复杂了还的学习。要拿用户当猪来对待。

3.參数和返回值明白

越是底层越是严格,越是彰显益彰。不知道大家有没有兴趣研究过开源框架,比方struts、springmvc、hibernate等等,看看这些框架底层的方法是怎么写的。站在巨人的肩膀上才会学的快、站的高才干看的远,它们写的都是非常具体比如參数,看名知意知道什么类型,当你參数输入不合法了都会有提示,这就是它们设计的优点,设想一下你自己写的方法在别人调用的时候,假设參数不合法你会提示别人啥信息吗?认为至少如今不会呢。尤其是在多人合作开发中。假设你不做到这一点。我们的合作版机房系统、我们在合作中的项目。怎么合作?没有办法继续开发下去。仅仅有你遇到了啥问题当面去找那个写接口、写方法的人当面解决当面问才干继续下去,这显然有点违背合作开发、违背面向OOP的思想。

4.当參数不合规范时,马上返回不可在往以下运行

底层方法调用频率可能是相当高的,不要造成内容不必要的浪费,当一个方法运行到中间每个位置、突然遇到问题,须要马上将这个问题返回给调用方,不可再往以下运行,这也是底层编程的一个原则非常多框架中也是这么做的。我们都学过处理异常的原则。

这个原理也是异常处理原则,当遇到异常切记处理并向向一级也就是调用该方法的部分抛出,有异常就须要处理。做的及时高效解决。

就像生活中,难免会遇到这样或那样的问题。你是选择让问题越积累越多还是及时处理,道理是相通的。问题积累多了仅仅能是带来很多其它的麻烦,让小的问题变成大问题最懊悔不好解决,有什么问题都须要在最初解决。我又想到了扁鹊治病。为什么说扁鹊很有名那时原由于他能够把严重的大病治好,大家就都觉得扁鹊医术很高明。不知大家是否还知道比扁鹊医术还要高明的是谁?那时他的哥哥,他哥治病在初。在病还没有严重的时候就给别人治好了这才算是大智慧。将问题在变大之前解决,因此,我们遇到问题或许须要在最初解决、及时解决。

5.静态变量要当心

你是否真正懂得他的原理呢?假设一个方法使用了静态方法它的成员变量也是静态的变量,假设底层方法的成员变量有值就要格外小心了(工具函数除外),有一次在我測试的时候,我调用了好几遍底层方法。我纳闷为什么结果总是一样呢,细致检查底层原来是静态方法惹的祸。它里面有一个静态成员变量,静态的是不能够改动的在以后调用的时候都是这一个值。使用静态的东西最后在没有成员变量或者成员变量不可变的时候再使用。否则会带来不必要的麻烦。

上面都是在写接口时候须要注意的一点问题。看一下一个发送短信接口

<span style="font-size:14px;">	/**
	 * @author 		lilongsheng
	 * @deprecated	发送短信方法。能够定时发送
	 * @param map	CorpID:  账号,
	 *              Pwd:     password,
	 *              Mobile:  联系人手机 ,
	 *              Content: 发送内容,
	 *              Cell: 	  子号。能够为空
	 * 				SendTime:定时发送时间, 比方:20060912152435代表2006年9月12日15时24分35秒
	 * 						 为空,表示马上发送
	 *
	 * @return      结果字符串
	 */
	public String send(String userURL, String CorpID, String Pwd,
			 String Mobile,String Content, String Cell, String SendTime)
	{
		//函数返回默认值
		String result="短信发送失败";
		//短信内容大小
		if (!isEmpty(prosURL.getProperty("contentSize"))) {
			contentSize=Integer.parseInt(prosURL.getProperty("contentSize"));
		}

		//推断用户是否提供了URL地址
		if ("".equals(userURL) || null==userURL) {

			userURL=prosURL.getProperty("SendURL");
		}
		//存储參数信息
		Map<String,Object> map=new HashMap<String, Object>();
		//推断账号是否为空
		if (!isEmpty(CorpID)) {
			map.put("CorpID",CorpID);
		}else {
			return result="账号不能为空";
		}
		//推断password是否为空
		if (!isEmpty(Pwd)) {
			map.put("Pwd",Pwd);
		}else {
			return result="password不能为空";
		}
		//推断手机格式是否正确
		if (!isEmpty(Mobile) && checkMobile(Mobile)) {
			map.put("Mobile",Mobile);
		}else {
			return result="发送手机号码为空或格式不对";
		}
		//推断短信内容是否为空、大小是否合适
		if (!isEmpty(Content) && Content.length()< contentSize) {
			map.put("Content",Content);
		}else {
			return result="发送内容为空或内容太长";
		}
		//子号能够为空
		if (!isEmpty(Cell)) {
			map.put("Cell",Cell);
		}
		//发送时间能够为空
		if (!isEmpty(SendTime)) {
			map.put("SendTime",SendTime);
		}
		try {

			//String strReg="";
    		//调用底层接口发送短信
			//将參数拼到url地址后面
			String url_str=getUserURL(userURL, map);
			System.out.println("url_str="+url_str);
			String strReg=sendgetinfo(url_str);

    		System.out.println("strResult="+strReg);
    		if (!isEmpty(strReg)) {

    			//依据底层返回值。返回对应结果
    			if ("0".equals(strReg)) {
    				return result="发送成功";
    			}
    			if ("-1".equals(strReg)) {
    				return result="账号未注冊";
    			}
                        …………
		}
		catch (Exception e) {
			e.printStackTrace();
		}
    	return result;
	}</span>

封装的公共方法

<span style="font-size:14px;">	/**
	 * @author lilongsheng
	 * @param userURL
	 * @param maps
	 * @return
	 */
	private String getUserURL(String userURL,Map<String, Object> maps)
	{
		//取得map中的參数。并拼接成URL參数
		StringBuilder sb = new StringBuilder();
		sb.append(userURL);
		Set<String> keys = maps.keySet();
		for (final String key : keys) {
			Object value = maps.get(key);
			//推断參数是否为空
			if (!"".equals(value) && null!=value) {

				sb.append(key); // 不能包括特殊字符
				sb.append('=');
				sb.append(value);
				sb.append('&');

			}
		}
		sb.deleteCharAt(sb.length() - 1);

		return sb.toString();
	}</span>
<span style="font-size:14px;">	/**
	 * @author lilongsheng
	 * @param url_str       发送接口
	 * @return
	 * @throws Exception
	 */
	private String sendgetinfo(String url_str)throws Exception{
		System.out.println(url_str);

        URL url =new URL(url_str);
        URLConnection connection=url.openConnection();
        byte[] buf=new byte[1024*4];
        ByteArrayOutputStream bos =new ByteArrayOutputStream ();
        int n;
        while((n=connection.getInputStream().read(buf))>=0)
                bos.write(buf,0,n);
        return bos.toString("gbk");
	}

</span>

这是一个简单的发动短信的接口,另外还有彩信等等,彩信格式为TMS、MMS等还需彩信开发包。

短信、彩信开发并不算难,事实上挺简单的也是用别人的类库,在开发中须要一边开发一边学习,难免会遇到自己不会的,仅仅要拿过来好好看看、查查资料、看看别人的理解以及现有的资料都能够解决,另外刚去了时因为对于系统还是没有真正写过代码,写的不是非常严谨。近期经理看了看我写的代码说比曾经写的好多了。改进了非常多,这一点还是有点惬意的,写代码重要的是设计思路和灵活性、严谨性。

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-12-25 14:37:58

移动互联网(一)短信和彩信界面开发包的相关文章

移动互联网(一)短信和彩信等接口开发封装

在这个项目中涉及到了短信和彩信等功能,这个算是一个项目重要组成部分,曾经想过这个功能怎么开发,例如在我们永和系统中有很多订单,可以给用户办理会员卡等业务如何让用户及时知道自己卡里的消费情况?如何让用户心中存在安全感,试想想在你的银行卡每次消费或者转入.转出每一笔款的时候都有短信提示,你是不是无意中增加了一份安全感呢? 大家在想想目前的各类门户网站,以及我们常用的CSDN等论坛都提供有短信登录.以及短信验证码.短信注册等等同短信沾边的业务内容,所有的这些都是一个思想提高系统灵活性.易用性.安全性,

利用Android Lost通过互联网或短信远程控制安卓设备

作者:Jack Wallen| 杰克·瓦伦翻译:PurpleEndurer,2014-11-15第1版 使用智能手机要考虑的一个至关重要的因素是安全性.当然,安全问题不仅仅存在于平台开发商之手,手机用户自身也难脱干系.为什么这么说呢?手机用户会丢失手机.这类事情不绝于耳,其中甚至充斥着"我公司的数据就在那部手机里"的不幸遭遇.你要采取什么措施来防止自己陷入这样的困境呢? 太简单了--安装一款类似Android Lost的应用软件.利用它(或其它类似的应用),你就可以通过互联网或短信服务

短信转彩信限制页数

需求 Message->option->settings->Txt Message(SMS)->Sms size limit for converting to mms - Over 10 segment Options:- over 3 pages- over 6 pages- over 10 pages- Never 方法: packages/apps/Mms/xml/multicardpreferences.xmlpackages/apps/Mms/xml/preferenc

Python图形界面开发包 PyGTK

http://www.oschina.net/p/pygtk/recomm http://www.oschina.net/p/pygtk/similar_projects?lang=0&sort=time

什么是短信猫

你要问我科普是谁,额......,谁知道是哪国总统,你要问我静静是谁,估计还能告诉你!(偷笑) 科普!科普!科普!重要的事情说三遍! 是不是觉得头重脚轻.腰酸背痛.四肢麻木.昏昏欲睡.闷闷不乐,这就对啦,这就是节后综合征.哈哈,不过小编不是医生,生病还得看医生!是不是觉得小编一改往日风格,嗯,您已在心底默默地抢答了,是!应广大客户和擦边客户的要求,在这阳光灿烂的日子科普下什么是短信猫. 一.短信猫 短信猫其实是一种用来收发短信的设备,他和我们用的手机一样,需要手机SIM卡的支持,在需要收发短信的

解决:HotSeat短信图标提醒有误

[操作步骤]正常收发短信.彩信. [测试结果]所有短信均已阅读,但在HOME界面的短信图标仍提示有一条短信未读.重启后仍存在. 经过分析,导致该情况的主要原因为当彩信已读的时候,launcher中进行查询的语句有问题.因为当彩信的状态为已读后pdu表中的read字段的值会由0变为1,而彩信点击进行下载,下载成功后信息类型由130变为132.我们可以到处数据表进行下一步分析. 现在我们从数据库表中的数据进行分析,分析前我们需要解释一下,read的值为0表示未读,为1表示已读,m_type的值为13

配送短信猫软件丰富,支持短信猫二次开发

配送短信猫软件丰富,支持短信猫二次开发 短信猫主要是用于二次开发领域,支持将短信收发功能集成.嵌入到其他系统.软件当中.最终实现短信收发除了需要有短信猫硬件外还需要相应短信猫软件的支持,即所谓的短信猫开发包.短信猫SDK或短信猫接口程序.而支持短信猫二次开发的软件非常丰富,有不同款式.有免费有收费,采用不同开发方式. 以下介绍我公司的几款短信猫开发软件,如下: 免费短信猫DLL开发包 提供有多种开发语言示例DEMO,方便程序员开发调用,免费短信猫开发包,免加密狗,自行测试调试使用. 短信服务器8

iOS 短信认证

短信验证 现在很多的短信验证平台,我们比较常用的有移动开发者服务平台 根据短信验证文档来集成 1. 找到iOS短信验证的集成开发文档 2. 下载SDK和Demo目录结构  3. 运行Demo 4. 写自己的测试Demo按照文档一步步操作即可. 1. 创建项目 2. 导入SVProgressHUD和SMS_SDK 3. 添加依赖库文件 必要:   libicucore.dylib libz.dylib MessageUI.framework javascriptcore.framework lib

安卓发短信的程序,但是没效果。

============问题描述============ 这个代码是Activity里面的布局的我就不贴了,我设置的Toast都报出来了但是短信还是发不出来. package com.example.message; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.teleph