1.WAP更像因特网,是一个内容丰富的站点,用户如何找到自己喜欢的站点,如何在一个站点中找到自己喜欢的业务,往往需要花上很长的一段时间。而WAP PUSH可以将某一站点或某一业务的链接通过短信发送到支持WAP PUSH功能的手机上,这样您只需要阅读这条短信,打开短信中的链接,就可以直接访问业务了。因此,WAP PUSH实现了短信和WAP业务的结合,节省了您寻找业务的时间,方便您直接找到并使用自己喜欢的业务。
2.
我解决了这个问题,但可能运营商的网关有很大关系,不一定到处通用,大家可以试试,在北京是可以的。
有些相关的文档可以参考:
http://www.cnblogs.com/sumtec/archiv.../19/94110.aspx
/*
*以下仅是示例代码,仅供参考。
*/
//aUrl就是PUSH消息所包含的URL,注意该URL不包含"http://";
//aPrompt就是UTF-8编码的PUSH提示消息。
void AssembleWapPushMessage(const TDesC8& aUrl, const TDesC8& aPrompt)
{
HBufC8* wapPushMsg = HBufC8::NewLC(1024);
TPtr8 msgPtr = wapPushMsg->Des();
msgPtr.Zero();
//组装WAP PUSH消息
//PUD
msgPtr.Append(0x29);
msgPtr.Append(0x06);
msgPtr.Append(0x06);
msgPtr.Append(0x03);
msgPtr.Append(0xAE);
msgPtr.Append(0x81);
msgPtr.Append(0xEA);
msgPtr.Append(0x8D);
msgPtr.Append(0xCA);
//WAP PUSH的内容字段
msgPtr.Append(0x02);
msgPtr.Append(0x05);
msgPtr.Append(0x6A);
msgPtr.Append(0x00);
msgPtr.Append(0x45);
msgPtr.Append(0xC6);
msgPtr.Append(0x0C);
msgPtr.Append(0x03);
//添加URL
msgPtr.Append(aUrl);
msgPtr.Append(0x00);
msgPtr.Append(0x01);
msgPtr.Append(0x03);
//添加WAP PUSH消息体
msgPtr.Append(aPrompt);
msgPtr.Append(0x00);
msgPtr.Append(0x01);
msgPtr.Append(0x01);
//提交发送请求
SendWapPushSmsL(_L("13800138000"), msgPtr);
CleanupStack::PopAndDestroy(wapPushMsg);
}
TBool SendWapPushSmsL(const TDesC& aAddress, const TDesC8& aMessage)
{
//创建消息
CreateWapPushMessageL(aAddress, aMessage);
// Validate it before sending
if(ValidateCreatedSMS())
{
// Now send
SendSMS2L();
return ETrue;
}
else
{
return EFalse;
}
}
void CreateWapPushMessageL(const TDesC& aAddress, const TDesC8& aMessage)
{
// Set SMS parameters
TMsvEntry indexEntry;
indexEntry.iDate.HomeTime();
CSmsSettings& serviceSettings = iSmsMtm->ServiceSettings();
indexEntry.SetInPreparation(ETrue);
// This is an SMS message
indexEntry.iMtm = KUidMsgTypeSMS;
indexEntry.iType = KUidMsvMessageEntry;
//Gets the ID of the current SMS service.
indexEntry.iServiceId = iSmsMtm->ServiceId();
// Create entry to drafts
iSmsMtm->SwitchCurrentEntryL(KMsvDraftEntryId);
// Creates a new child entry owned by the context synchronously.
iSmsMtm->Entry().CreateL(indexEntry);
// Set the MTM's active context to the new message
iSmsId = indexEntry.Id();
iSmsMtm->SwitchCurrentEntryL(iSmsId);
// Add message body. Body is set twice because index entry keeps a copy
// of some summary information. Index entry and full stored entry
// must be in sync.
// Set the SMS message settings for the message.
CSmsHeader& header = iSmsMtm->SmsHeader();
CSmsMessage &msg = header.Message();
TSmsUserDataSettings smsSettings;
smsSettings.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabet8Bit);
msg.SetUserDataSettingsL(smsSettings);
CSmsPDU &pdu = msg.SmsPDU();
CSmsUserData& userData = pdu.UserData();
userData.SetBodyL(aMessage);
pdu.SetBits7To4(TSmsDataCodingScheme::ESmsDCSTextUncompressed7BitOr8Bit);
pdu.SetClass(TRUE, TSmsDataCodingScheme::ESmsClass1);
pdu.SetPIDType(TSmsProtocolIdentifier::ESmsPIDTelematicInterworking);
pdu.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabet8Bit);
TBuf8<16> smsPort;
smsPort.SetLength(4);
smsPort[0] = 0x0B;
smsPort[1] = 0x84;
smsPort[2] = 0xF0;
smsPort[3] = 0x00;
userData.AddInformationElementL(CSmsInformationElement::ESmsIEIApplicationPortAddressing16Bit,smsPort);
serviceSettings.SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabet8Bit);
serviceSettings.SetDelivery( ESmsDeliveryImmediately ); // to be delivered immediately
serviceSettings.SetDeliveryReport(EFalse);
header.SetSmsSettingsL( serviceSettings );// new settings
//添加收件人
iSmsMtm->AddAddresseeL(aAddress);
indexEntry.iDetails.Set(aAddress);
// Commit changes because index entry is only a local variable
iSmsMtm->Entry().ChangeL(indexEntry);
// Save full message data to the store
iSmsMtm->SaveMessageL();
}
TBool ValidateCreatedSMS()
{
TMsvPartList partsToBeChecked = KMsvMessagePartBody | KMsvMessagePartRecipient |
KMsvMessagePartOriginator | KMsvMessagePartDate;
// ValidateMessage return KErrNone if message is valid.
TMsvPartList failedParts = iSmsMtm->ValidateMessage(partsToBeChecked);
if (failedParts == KMsvMessagePartNone)
{
return ETrue;
}
else
{
return EFalse;
}
}
void SendSMS2L()
{
// Changes the entry on which later actions are performed to the entry with the
// specified TMsvId.
iSmsMtm->SwitchCurrentEntryL(iSmsId);
// Load the created message
iSmsMtm->LoadMessageL();
// Gets the current SMS service settings
CSmsSettings& serviceSettings = iSmsMtm->ServiceSettings();
// Gets the number of service centre addresses stored in this object.
const TInt numSCAddresses = serviceSettings.NumSCAddresses();
// There should always be a service center number
if (numSCAddresses > 0)
{
CSmsNumber* serviceCentreNumber = NULL;
// get the service center number
if ((serviceSettings.DefaultSC() >= 0) && (serviceSettings.DefaultSC() < numSCAddresses))
serviceCentreNumber = &(serviceSettings.SCAddress(serviceSettings.DefaultSC()));
else
serviceCentreNumber = &(serviceSettings.SCAddress(0));
iSmsMtm->SmsHeader().SetServiceCenterAddressL(serviceCentreNumber->Address());
}
else
{
// Leave if there is no service center number
User::Leave(0);
}
iSmsMtm->SaveMessageL();
// Index entry must be Updated
TMsvEntry indexEntry = iSmsMtm->Entry().Entry();
// Set in-preparation flag
indexEntry.SetInPreparation(EFalse);
// Sets the sending state
indexEntry.SetSendingState(KMsvSendStateWaiting);
iSmsMtm->Entry().ChangeL(indexEntry);
// Time to send the message
Cancel(); // prepare iMsvOper for use
iEntrySelection->Reset();
iEntrySelection->AppendL(iSmsId);
TBuf8<1> dummyParam;
// There is also InvokeSyncFunctionL which is synchronous.
iMsvOper = iSmsMtm->InvokeAsyncFunctionL(ESmsMtmCommandScheduleCopy, *iEntrySelection, dummyParam, iStatus);
SetActive();
}
相关推荐
综上所述,"wappush.rar_WAPpush_java push_push_wap push_wap push_java"是一个关于使用Java技术实现WAP Push服务的项目,其中可能包含了JSP页面和JavaBean组件,用于处理推送消息的生成和发送。这个项目可以帮助...
push()方法的用法和普通的JavaScript数组的push()方法相同,都允许开发者向一个数组的末尾添加一个或多个元素,并且该方法会修改原数组,返回修改后数组的新长度。需要注意的是,jQuery的push()方法实际上是对...
push推送浅析 推送技术是移动应用程序中的一种重要技术,它允许应用程序在运行时接收来自服务器的消息,以便及时地更新应用程序的状态或进行其他操作。下面我们将详细地分析push推送技术的实现过程。 推送技术的...
【标题】:Uniapp集成UniPush 在移动应用开发中,实时的消息推送是提升用户体验、增强用户粘性的重要手段。Uniapp是一个跨平台的前端框架,它允许开发者使用一套代码来构建iOS、Android以及Web等多个平台的应用。而...
### ionic2 codepush热更新使用 #### 一、概述 在移动开发中,热更新是一种非常实用的技术,它能够实现在不重新提交应用商店的情况下更新应用的部分代码或资源,从而极大缩短修复bug或更新功能的时间。本篇文档将...
### Direct Push邮件技术详解 #### 一、Direct Push概述 Direct Push是一种先进的电子邮件技术,它允许用户的移动设备(如智能手机和平板电脑)自动接收新邮件,而无需用户手动触发检查新邮件的操作。这一功能极大...
《中控智慧身份识别一体机二次开发PUSH协议解析与实战》 中控智慧作为智能安防领域的领军企业,其身份识别一体机凭借精准高效的识别能力备受赞誉。在深入开发和集成此类设备时,掌握“中控智慧身份识别一体机”的二...
标题 "pc端快速push文件到安卓bat" 描述的是一个Windows平台下的自动化脚本,用于便捷地将文件推送到安卓设备。这个过程主要利用了Android Debug Bridge(ADB)工具,这是一个强大的开发者工具,允许用户通过USB连接...
关于unipush推送消息,手机端接收消息并且展示通知栏的服务端代码资源。 适用于App消息推送,支持在线离线推送消息。适用场景多元化(只需要用户登录App时进行用户信息和手机设备id绑定的处理) 首先要引入unipush的...
Push 系统总体架构图 Push 系统是一种基于云端服务的消息推送系统,旨在提供实时、可靠、安全的消息推送服务。下面是 Push 系统的总体架构图: 架构图概要 Push 系统架构图可以分为以下几个部分: 1. 客户端...
【uni-app 中使用uni push的全面解析】 uni-app是一款由DCloud(海豚浏览器团队)开发的多端统一开发框架,它允许开发者使用Vue.js语法编写一次代码,就能跨平台运行到iOS、Android、H5、小程序等多个平台。而uni ...
在本文中,我们将深入探讨如何使用C#与Unipush服务端进行消息推送,以便为Android应用程序提供实时通知。Unipush,也称为个推,是中国一家提供专业推送服务的公司,其SDK允许开发者轻松地在移动应用中实现消息推送...
1.android adb push不支持中文乱码的解决方案. 2.在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的push和pull命令时就会导致由于编码方式的不同而产生的错误,解决这一...
在IT行业中,短信(SMS)和彩信(MMS)是两种常见的移动通信技术,而WAP PUSH则是一种用于向移动设备发送数据的服务。这里我们将深入探讨这些技术的工作原理、应用场景以及它们之间的关联。 首先,短信(Short ...
### SAP2000 Pushover 分析详解 #### 一、引言 SAP2000 是一款广泛应用于土木工程领域的高级结构分析与设计软件。它支持多种类型的线性和非线性分析方法,包括静力分析、动力分析、模态分析等。其中,Pushover ...
在本文中,我们将深入探讨如何在uniapp项目中利用unipush和个推SDK服务端实现推送功能,并结合Thinkphp + RestAPI V2构建后端系统。uniapp是一款跨平台的移动应用开发框架,它允许开发者用一套代码库来创建iOS、...
标题中的“helm-push_0.9.0_linux_amd64.tar.gz”是一个软件分发包,用于在Kubernetes环境中管理应用部署。Helm是Kubernetes的包管理工具,它允许用户通过图表来安装、升级和管理在集群上的应用程序。"push"功能可能...
《ZKTeco门禁安防push协议开发协议文档2020版》是针对ZKTeco门禁安防设备进行二次开发的重要参考资料,旨在帮助开发者理解和实现与ZKTeco安防设备的高效通讯。这份文档详细介绍了PUSH SDK的各个版本更新内容以及相关...
《PUSHPUSH》是韩国的一款益智类游戏,其移植技术是游戏开发中的一个重要环节,尤其是在当前多平台共存的时代。移植游戏意味着将一个游戏从一个操作系统或硬件平台转换到另一个,以满足不同用户群体的需求。这个过程...
在水晶报表中,"Pull"和"Push"方法是两种不同的数据获取策略,它们各自有着不同的特点和应用场景。 1. **Pull方法**: Pull方法也被称为“拉”模式,它是由水晶报表自身从数据源中检索数据。在这种模式下,水晶...