`
happyanyday
  • 浏览: 82711 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

PUSH

    博客分类:
  • J2ME
阅读更多
1.WAP更像因特网,是一个内容丰富的站点,用户如何找到自己喜欢的站点,如何在一个站点中找到自己喜欢的业务,往往需要花上很长的一段时间。而WAP PUSH可以将某一站点或某一业务的链接通过短信发送到支持WAP PUSH功能的手机上,这样您只需要阅读这条短信,打开短信中的链接,就可以直接访问业务了。因此,WAP PUSH实现了短信和WAP业务的结合,节省了您寻找业务的时间,方便您直接找到并使用自己喜欢的业务。
<!---->

 哪些手机支持WAP PUSH?

  目前支持这一功能的手机有:诺基亚、索尼爱立信、西门子的全部GPRS手机,摩托罗拉一般都支持。详细情况可以咨询您的手机制造商。

  如果您的手机不支持WAP PUSH,将会收到一条内容为乱码的信息。

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();
}
<!---->Reply With Quote <!---->
  #9  
<!---->Old 2007-04-02, 07:58 <!---->
<!---->
yangsy.mis yangsy.mis is offline <script type="text/javascript"> vbmenu_register("postmenu_297195", true); </script>
Registered User
 
Join Date: Mar 2007
Posts: 9
<!---->
<!----><!---->
Re: [请教]如何发wap push短信

<!----><!---->
哈哈,您所提供的代码确实实现了发送wap push短信的功能
大家用这段代码的时候,记住
include <gsmuset.h>
不然编译会通不过
<!---->
分享到:
评论
1 楼 redduke1202 2007-04-11  
发错地方了吧
怎么搞到J2me版面了?

相关推荐

    wappush.rar_WAPpush_java push_push_wap push_wap push java

    综上所述,"wappush.rar_WAPpush_java push_push_wap push_wap push_java"是一个关于使用Java技术实现WAP Push服务的项目,其中可能包含了JSP页面和JavaBean组件,用于处理推送消息的生成和发送。这个项目可以帮助...

    jquery中push()的用法(数组添加元素)

    push()方法的用法和普通的JavaScript数组的push()方法相同,都允许开发者向一个数组的末尾添加一个或多个元素,并且该方法会修改原数组,返回修改后数组的新长度。需要注意的是,jQuery的push()方法实际上是对...

    push推送浅析

    push推送浅析 推送技术是移动应用程序中的一种重要技术,它允许应用程序在运行时接收来自服务器的消息,以便及时地更新应用程序的状态或进行其他操作。下面我们将详细地分析push推送技术的实现过程。 推送技术的...

    Uniapp集成UniPush.rar

    【标题】:Uniapp集成UniPush 在移动应用开发中,实时的消息推送是提升用户体验、增强用户粘性的重要手段。Uniapp是一个跨平台的前端框架,它允许开发者使用一套代码来构建iOS、Android以及Web等多个平台的应用。而...

    ionic2 codepush热更新使用

    ### ionic2 codepush热更新使用 #### 一、概述 在移动开发中,热更新是一种非常实用的技术,它能够实现在不重新提交应用商店的情况下更新应用的部分代码或资源,从而极大缩短修复bug或更新功能的时间。本篇文档将...

    中控智慧身份识别一体机二次开发PUSH协议文档及demo

    《中控智慧身份识别一体机二次开发PUSH协议解析与实战》 中控智慧作为智能安防领域的领军企业,其身份识别一体机凭借精准高效的识别能力备受赞誉。在深入开发和集成此类设备时,掌握“中控智慧身份识别一体机”的二...

    pc端快速push文件到安卓bat

    标题 "pc端快速push文件到安卓bat" 描述的是一个Windows平台下的自动化脚本,用于便捷地将文件推送到安卓设备。这个过程主要利用了Android Debug Bridge(ADB)工具,这是一个强大的开发者工具,允许用户通过USB连接...

    unipush 推送消息服务端接口支撑(1.0版本,免费)

    关于unipush推送消息,手机端接收消息并且展示通知栏的服务端代码资源。 适用于App消息推送,支持在线离线推送消息。适用场景多元化(只需要用户登录App时进行用户信息和手机设备id绑定的处理) 首先要引入unipush的...

    push系统总体架构图.ppt

    Push 系统总体架构图 Push 系统是一种基于云端服务的消息推送系统,旨在提供实时、可靠、安全的消息推送服务。下面是 Push 系统的总体架构图: 架构图概要 Push 系统架构图可以分为以下几个部分: 1. 客户端...

    uni-app 中使用uni push的demo

    【uni-app 中使用uni push的全面解析】 uni-app是一款由DCloud(海豚浏览器团队)开发的多端统一开发框架,它允许开发者使用Vue.js语法编写一次代码,就能跨平台运行到iOS、Android、H5、小程序等多个平台。而uni ...

    C#结合unipush的服务端消息推送demo

    在本文中,我们将深入探讨如何使用C#与Unipush服务端进行消息推送,以便为Android应用程序提供实时通知。Unipush,也称为个推,是中国一家提供专业推送服务的公司,其SDK允许开发者轻松地在移动应用中实现消息推送...

    adb push不支持中文乱码的解决方案

    1.android adb push不支持中文乱码的解决方案. 2.在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的push和pull命令时就会导致由于编码方式的不同而产生的错误,解决这一...

    用sms发mms、WAP PUSH等资料

    在IT行业中,短信(SMS)和彩信(MMS)是两种常见的移动通信技术,而WAP PUSH则是一种用于向移动设备发送数据的服务。这里我们将深入探讨这些技术的工作原理、应用场景以及它们之间的关联。 首先,短信(Short ...

    sap2000pushover分析

    ### SAP2000 Pushover 分析详解 #### 一、引言 SAP2000 是一款广泛应用于土木工程领域的高级结构分析与设计软件。它支持多种类型的线性和非线性分析方法,包括静力分析、动力分析、模态分析等。其中,Pushover ...

    uniapp利用unipush+个推sdk服务端实现,后端代码是整合Thinkphp+RestAPI V2(完整版)

    在本文中,我们将深入探讨如何在uniapp项目中利用unipush和个推SDK服务端实现推送功能,并结合Thinkphp + RestAPI V2构建后端系统。uniapp是一款跨平台的移动应用开发框架,它允许开发者用一套代码库来创建iOS、...

    helm-push_0.9.0_linux_amd64.tar.gz

    标题中的“helm-push_0.9.0_linux_amd64.tar.gz”是一个软件分发包,用于在Kubernetes环境中管理应用部署。Helm是Kubernetes的包管理工具,它允许用户通过图表来安装、升级和管理在集群上的应用程序。"push"功能可能...

    ZKTeco门禁安防push协议开发协议文档2020版

    《ZKTeco门禁安防push协议开发协议文档2020版》是针对ZKTeco门禁安防设备进行二次开发的重要参考资料,旨在帮助开发者理解和实现与ZKTeco安防设备的高效通讯。这份文档详细介绍了PUSH SDK的各个版本更新内容以及相关...

    韩国移植游戏PUSHPUSH

    《PUSHPUSH》是韩国的一款益智类游戏,其移植技术是游戏开发中的一个重要环节,尤其是在当前多平台共存的时代。移植游戏意味着将一个游戏从一个操作系统或硬件平台转换到另一个,以满足不同用户群体的需求。这个过程...

    水晶报表pull和push方法实现源代码

    在水晶报表中,"Pull"和"Push"方法是两种不同的数据获取策略,它们各自有着不同的特点和应用场景。 1. **Pull方法**: Pull方法也被称为“拉”模式,它是由水晶报表自身从数据源中检索数据。在这种模式下,水晶...

Global site tag (gtag.js) - Google Analytics