IOS的极光推送通知声音音能改吗

AdobeAIR * 使用推送通知
使用推送通知
推送通知使远程通知提供方将通知发送至在移动设备中运行的应用程序。针对使用 Apple 推送通知服务 (APNs) 的 iOS 设备,AIR 3.4 支持推送通知。
要针对 AIR for Android 应用程序启用推送通知,请使用本机扩展,例如由 Adobe evangelist Piotr Walczyszyn 开发的 。
本章节其余部分描述了如何在 AIR for iOS 应用程序中启用推送通知。
该讨论假定您拥有 Apple 开发人员 ID,熟悉 iOS 开发工作流程,并且已在一台 iOS 设备上至少部署了一个应用程序。
推送通知概述Apple 推送通知服务 (APNs) 使远程通知提供方将通知发送至在 iOS 设备中运行的应用程序。APNs 支持以下通知类型:
关于 APNs 的完整信息,请参阅 。
在应用程序中使用推送通知涉及到多个方面:
客户端应用程序 - 推送通知注册、与远程通知提供方沟通、接收推送通知。
iOS - 管理客户端应用程序和 APNs 之间的互动。
APNs - 在客户端注册期间提供一个 tokenID,并将远程通知提供方的通知传递至 iOS。
远程通知提供方 - 储存 tokenId-client 应用程序信息并将通知推送至 APNs。
注册工作流程在服务器端服务中注册推送通知的工作流程如下:
客户端应用程序要求 iOS 启用推送通知。
iOS 向 APNs 转发该请求。
APNs 服务器将一个 tokenId 返回至 iOS。
iOS 将 tokenId 返回至客户端应用程序。
客户端应用程序(使用特定于应用程序的机制)向远程通知提供方提供 tokenId,远程通知提供方储存 tokenId 用于推送通知。
通知工作流程通知工作流程如下:
远程通知提供方生成一个通知,并将通知有效载荷与 tokenId 一起传递至 APNs。
APNs 将通知转发至设备中的 iOS。
iOS 将通知有效载荷推送至应用程序。
推送通知 APIAIR 3.4 采用了一组支持 iOS 推送通知的 API。这些 API 在 flash.notifications 中,并且包含以下类:
- 定义通知类型常量:ALERT、BADGE 和 SOUND.C
- 使您可以预定和注销推送通知。
- 使您可以选择接收的通知类型。使用 notificationStyles 属性定义注册多个通知类型的字符串矢量。
AIR 3.4 还包含 flash.events.RemoteNotificationEvent(由RemoteNotifier调度),如下所示:
成功创建应用程序预定和收到来自 APNs 的新 tokenId 时。
接收新的远程通知时。
此外,如果在预定进程期间遇到错误,则 RemoteNotifier 调度 flash.events.StatusEvent。
在应用程序中管理推送通知要注册推送通知应用程序,必须执行以下步骤:
创建预定应用程序中的推送通知的代码。
在应用程序 XML 文件中启用推送通知。
创建启用 iOS Push Services 的供给配置文件和证书。
以下有批注的样本代码预定推送通知并处理推送通知事件:
import flash.display.S
import flash.display.StageA
import flash.display.StageScaleM
import flash.events.*;
import flash.events.E
import flash.events.IOErrorE
import flash.events.MouseE
import flash.net.*;
import flash.text.TextF
import flash.text.TextF
import flash.ui.M
import flash.ui.MultitouchInputM
// Required packages for push notifications
import flash.notifications.NotificationS
import flash.notifications.RemoteN
import flash.notifications.RemoteNotifierSubscribeO
import flash.events.RemoteNotificationE
import flash.events.StatusE
[SWF(width="1280", height="752", frameRate="60")]
public class TestPushNotifications extends Sprite
private var notiStyles:Vector.&String& = new Vector.&String&;;
private var tt:TextField = new TextField();
private var tf:TextFormat = new TextFormat();
// Contains the notification styles that your app wants to receive
private var preferredStyles:Vector.&String& = new Vector.&String&();
private var subscribeOptions:RemoteNotifierSubscribeOptions = new RemoteNotifierSubscribeOptions();
private var remoteNot:RemoteNotifier = new RemoteNotifier();
private var subsButton:CustomButton = new CustomButton("Subscribe");
private var unSubsButton:CustomButton = new CustomButton("UnSubscribe");
private var clearButton:CustomButton = new CustomButton("clearText");
private var urlreq:URLR
private var urlLoad:URLLoader = new URLLoader();
private var urlString:S
public function TestPushNotifications()
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
tf.size = 20;
tt.y =150;
tt.height = stage.stageH
tt.width = stage.stageW
tt.border =
tt.defaultTextFormat =
addChild(tt);
subsButton.x = 150;
subsButton.y=10;
subsButton.addEventListener(MouseEvent.CLICK,subsButtonHandler);
stage.addChild(subsButton);
unSubsButton.x = 300;
unSubsButton.y=10;
unSubsButton.addEventListener(MouseEvent.CLICK,unSubsButtonHandler);
stage.addChild(unSubsButton);
clearButton.x = 450;
clearButton.y=10;
clearButton.addEventListener(MouseEvent.CLICK,clearButtonHandler);
stage.addChild(clearButton);
tt.text += "\n SupportedNotification Styles: " + RemoteNotifier.supportedNotificationStyles.toString() + "\n";
tt.text += "\n Before Preferred notificationStyles: " + subscribeOptions.notificationStyles.toString() + "\n";
// Subscribe to all three styles of push notifications:
// ALERT, BADGE, and SOUND.
preferredStyles.push(NotificationStyle.ALERT ,NotificationStyle.BADGE,NotificationStyle.SOUND );
subscribeOptions.notificationStyles= preferredS
tt.text += "\n After Preferred notificationStyles:" + subscribeOptions.notificationStyles.toString() + "\n";
remoteNot.addEventListener(RemoteNotificationEvent.TOKEN,tokenHandler);
remoteNot.addEventListener(RemoteNotificationEvent.NOTIFICATION,notificationHandler);
remoteNot.addEventListener(StatusEvent.STATUS,statusHandler);
this.stage.addEventListener(Event.ACTIVATE,activateHandler);
// Apple recommends that each time an app activates, it subscribe for
// push notifications.
public function activateHandler(e:Event):void{
// Before subscribing to push notifications, ensure the device supports it.
// supportedNotificationStyles returns the types of notifications
// that the OS platform supports
if(RemoteNotifier.supportedNotificationStyles.toString() != "")
remoteNot.subscribe(subscribeOptions);
tt.appendText("\n Remote Notifications not supported on this Platform !");
public function subsButtonHandler(e:MouseEvent):void{
remoteNot.subscribe(subscribeOptions);
// Optionally unsubscribe from push notfications at runtime.
public function unSubsButtonHandler(e:MouseEvent):void{
remoteNot.unsubscribe();
tt.text +="\n UNSUBSCRIBED";
public function clearButtonHandler(e:MouseEvent):void{
tt.text = " ";
// Receive notification payload data and use it in your app
public function notificationHandler(e:RemoteNotificationEvent):void{
tt.appendText("\nRemoteNotificationEvent type: " + e.type +
"\nbubbles: "+ e.bubbles + "\ncancelable " +e.cancelable);
for (var x:String in e.data) {
tt.text += "\n"+ x + ":
" + e.data[x];
// If the subscribe() request succeeds, a RemoteNotificationEvent of
// type TOKEN is received, from which you retrieve e.tokenId,
// which you use to register with the server provider (urbanairship, in
// this example.
public function tokenHandler(e:RemoteNotificationEvent):void
tt.appendText("\nRemoteNotificationEvent type: "+e.type +"\nBubbles: "+ e.bubbles + "\ncancelable " +e.cancelable +"\ntokenID:\n"+ e.tokenId +"\n");
urlString = new String("/api/device_tokens/" +
e.tokenId);
urlreq = new URLRequest(urlString);
urlreq.authenticate =
urlreq.method = URLRequestMethod.PUT;
URLRequestDefaults.setLoginCredentialsForHost
"1ssB2iV_RL6_UBLiYMQVfg","t-kZlzXGQ6-yU8T3iHiSyQ");
urlLoad.load(urlreq);
urlLoad.addEventListener(IOErrorEvent.IO_ERROR,iohandler);
urlLoad.PLETE,compHandler);
urlLoad.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpHandler);
private function iohandler(e:IOErrorEvent):void
tt.appendText("\n In IOError handler" + e.errorID +" " +e.type);
private function compHandler(e:Event):void{
tt.appendText("\n In Complete handler,"+"status: " +e.type + "\n");
private function httpHandler(e:HTTPStatusEvent):void{
tt.appendText("\n in httpstatus handler,"+ "Status: " + e.status);
// If the subscription request fails, StatusEvent is dispatched with
// error level and code.
public function statusHandler(e:StatusEvent):void{
tt.appendText("\n statusHandler");
tt.appendText("event Level" + e.level +"\nevent code " +
e.code + "\ne.currentTarget: " + e.currentTarget.toString());
在应用程序 XML 文件中启用推送通知要在应用程序中使用推送通知,请在 Entitlements 标签(在 iphone 标签下)中提供以下内容:
   &Entitlements&
      &![CDATA[
         &key&aps-environment&/key&
         &string&development&/string&
      ]]&
   &/Entitlements&
当您已准备好将应用程序推送至 App Store 时,用于开发到生产的 &string& 元素:
      &string&production&/string&
如果应用程序支持已本地化的字符串,则请在 supportedLanguages 标签中指定语言,该标签在 intialWindow 标签下,如以下示例所示:
&supportedLanguages&en de cs es fr it ja ko nl pl pt&/supportedLanguages&
创建启用 iOS Push Services 的供给配置文件和证书要启用应用程序 - APNs 通信,必须用启用 iOS Push Services 的供给配置文件和证书打包应用程序,如下所示:
登录您的 Apple 开发人员帐户。
导航至 Provisioning Portal。
单击“应用程序 ID”选项卡。
单击“新建应用程序 ID”按钮。
指定说明和捆绑标识符(不应在捆绑标识符中使用 * )。
单击“提交”。Provisioning Portal 会生成您的应用程序 ID 并重新显示“应用程序 ID”页面。
单击“配置”(位于应用程序 ID右侧)。显示“配置应用程序 ID”页面。
选择“启用 Apple 推送通知服务”复选框。注意有两种类型的推送 SSL 证书:一种用于开发/测试,一种用于生生产。
单击“开发推送 SSL 证书”右侧的“配置”按钮。显示“生成证书签名请求 (CSR)”页面。
按照页面所指示,使用 Keychain Access 公用程序生成 CSR。
生成 SSL 证书。
下载并安装 SSL 证书。
(可选)对于生产推送 SSL 证书重复第 9 步至第 12 步。
单击“完成”。显示“配置应用程序 ID”页面。
单击“完成”。显示“应用程序 ID”页面。注意应用程序 ID 的推送通知旁的绿色圆圈。
确保保存 SSL 证书,因为该证书稍后将用于应用程序和提供方通信。
单击“供给”选项卡以显示“供给配置文件”页面。
为新的应用程序 ID 创建供给配置文件并下载。
单击“证书”选项卡并为新的供给配置文件下载一个新的证书。
对推送通知使用声音。要为应用程序启用声音通知,请将声音文件捆绑为其他任何资源,但在相同目录中捆绑为 SEF 和 app-xml 文件。例如:
Build/adt -package -target ipa-app-store -provisioning-profile _-_.mobileprovision -storetype pkcs12 -keystore _-_.p12 test.ipa test-app.xml test.swf sound.caf sound1.caf
Apple 支持以下声音数据格式(aiff、wav 或 caf 文件):
MA4 (IMA/ADPCM)
使用已本地化的警告通知要在应用程序中使用已本地化的警告通知,请在 lproj 文件夹表单中捆绑已本地化的字符串。例如,您支持西班牙语的警告,则按以下步骤操作:
在项目中创建与 app-xml 文件同级的 es.lproj 文件夹。
在 es.lproj 文件夹中,创建一个名为 Localizable.Strings 的文本文件。
在文本编辑器中打开 Localizable.Strings,并添加消息密钥和相应的已本地化字符串。例如:
"PokeMessageFormat" = "La notificación de alertas en espa?ol."
保存该文件。
应用程序接收到使用该密钥值的警告通知且设备语言为西班牙语时,显示已译警告文本。
配置远程通知提供方需要一个远程通知提供方以将推送通知发送至应用程序。此服务器应用程序用作提供方,接受推送输入,并将通知和通知数据传递至 APNs,然后 APNs 将推送通知发送至客户端应用程序。
关于来自远程通知提供方的推送通知的详细信息,请参阅 Apple 开发人员库中的。
远程通知提供方选项远程通知提供方选项包含以下内容:
基于 APNS-php 开源服务器创建自己的提供方。可以使用
建立 PHP 服务器。通过该 Google 代码项目,您可以设计一个与指定要求匹配的界面。
使用服务提供方。例如, 提供了一个现成的 APNs 提供方。注册该服务后,开始先使用与以下内容类似代码提供设备标记:
private var urlreq:URLR
private var urlLoad:URLLoader = new URLLoader();
private var urlString:S
//When subscription is successful then only call the following code
urlString = new String("/api/device_tokens/" + e.tokenId);
urlreq = new URLRequest(urlString);
urlreq.authenticate =
urlreq.method = URLRequestMethod.PUT;
URLRequestDefaults.setLoginCredentialsForHost("",
   "Application Key","Application Secret");
urlLoad.load(urlreq);
urlLoad.addEventListener(IOErrorEvent.IO_ERROR,iohandler);
urlLoad.PLETE,compHandler);
urlLoad.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpHandler);
private function iohandler(e:IOErrorEvent):void{
   trace("\n In IOError handler" + e.errorID +" " +e.type);
private function compHandler(e:Event):void{
   trace("\n In Complete handler,"+"status: " +e.type + "\n");
private function httpHandler(e:HTTPStatusEvent):void{
   tt.appendText("\n in httpstatus handler,"+ "Status: " + e.status);
然后您可以使用 Urban Airship 工具发送测试通知。
远程通知提供方证书您必须复制 SSL 证书和私钥(之前生成的)至远程通知提供方服务器上适当的位置。通常将这两个文件组合至单个的 .pem 文件中。要进行此操作,请执行以下步骤:
打开终端窗口。
通过输入以下命令,从 SSL 证书创建 .pem 文件:
openssl x509 -in aps_developer_identity.cer -inform der -out TestPushDev.pem
通过输入以下命令,创建私钥 (.p12) 的 .pem 文件:
openssl pkcs12 -nocerts -out TestPushPrivateKey.pem -in certificates.p12
通过输入以下命令,将两个 .pem 文件组合至单个文件:
cat TestPushDev.pem TestPushPrivateKey.pem & FinalTestPush.pem
创建服务器端推送应用程序时,向服务器提供商提供组合的 .pem 文件。
有关更多信息,请参阅 Apple 本机和推送通知编程指南中的。
在应用程序中处理推送通知在应用程序中处理推送通知涉及以下内容:
推送通知的全局用户配置和接受
单个推送通知的用户接受
处理推送通知和通知有效载荷数据
推送通知的配置和接受用户第一次启动启用推送通知的应用程序时,iOS 显示 appname 是否要给您发送推送通知对话框,对话框中包括“不允许”和“好”按钮。如果用户选择“好”,则应用程序会接收预定的所有类型的通知。如果用户选择“不允许”,则不会接收通知。
用户可以在“设置”&“通知”中控制可以为每个启用推送的应用程序接收的特定通知类型。
Apple 建议每次激活应用程序时都应预定推送通知。应用程序调用 RemoteNotifier.subscribe() 时,会接收到 RemoteNotificationEvent,类型为 token,其包含唯一可以识别设备中应用程序的 32 字节唯一数字 tokenId。
设备接收到推送通知时,显示一个弹出窗口,其中包括“关闭”和“启动”按钮。如果用户点击“关闭”,则没有事件发生;如果用户点击“启动”,则 iOS 会调用应用程序,且应用程序会接收到类型为 notification 的 flash.events.RemoteNotificationEvent,如下所述。
处理推送通知和有效载荷数据远程通知提供方将通知发送至设备(使用 tokenID)时,无论应用程序是否在运行中,应用程序都会接收到类型为 notification 的 flash.events.RemoteNotificationEvent。此时,应用程序执行特定于应用程序的通知处理。如果应用程序处理通知数据,则可以通过 JSON 格式的 RemoteNotificationEvent.data 属性访问该数据。
&Twitter(TM) 与 Facebook 中的内容不在 Creative Commons 的条款约束之下。搜索 新闻 资讯 游戏
您现在的位置:&&>>&&>>&&>>&&>>&正文
iPhone6通知推送设置技巧&让通知真正有用!
编辑:wangqing && 来源:网络 && 发布时间: 11:02:25
  【巴士数码】苹果iOS系统的通知推送功能相信大家都不陌生吧,现在有网友和我们分享了一些iPhone6通知推送设置技巧,教大家如何更好地利用iOS通知栏,让通知更有用、更实用。如果你手中正握着一台iOS设备,不妨来看看本教程,学一下新技能。
  【iPhone6通知推送设置技巧】
  通知是我们和未打开App的一种交流,但不是所有的通知都是必要的,有一些通知根本不需要出现,它们的出现除了浪费我们双击一下那个「X」的时间外时并没有任何作用,如何让通知变得真正有用呢?
  首先应该把通知分为「打开的」和「关闭的」两类。
  应该打开通知的App
  这一类的App应该是那些你看到便要去点击它,去通过它处理某些事情的和看到它便要去做某些不可推迟的事的。举两个例子:
  即时通讯应用。这类通知对时间要求比较高,大部分是收到了就要马上要回复一下,所以像这类App的通知应该是打开的。或者这么说,你收到一条即时通讯App的讯息,你是需要判断是否立刻回复,所以应该打开这类App的通知。
  待办事项应用。这类App的作用其实很符合通知这个名字,就是通知你该干什么,所以这类App的通知应该打开。
  应该关闭通知的App
  这类App应该是你只是在需要的时候才会进这些App,其他时候并不需要和这个App有什么联系的。举两个例子:
  单机游戏。比如Mr Jump这些游戏就是你在想打发时间的时候才会去点击它,所以在其它时间它就没有必要出现。(为什么说单机呢?因为有些联网游戏可能会通过通知来告诉你:你被攻击了)
  修图应用。修图App你要通知干什么?!
  在将打开和关闭的两类分好后,我们还需要对打开通知的App进行进一步的设置。
  我们要对一个App的通知进行设置,你需要点击:
  设置 -& 通知 -& 你想修改的App,就以微博为例,你会看到下面这个界面:
  由上到下依次为:
  总开关
  允许在通知中心显示的通知条数
  允许收到通知时播放提示音
  允许桌面App图标显示标记(通常习惯称「角标」)
  允许在锁屏界面显示
  通知推送时的样式
  在通知中心显示的通知条数
  这个是需要注意的。什么App只需要显示一条就够了,什么App需要有多少通知就显示多少?
  1. 只显示一条通知的App
  这一类是你只要看到通知就直接点进App,换句话说你只是需要知道「我要进这个App了」这类App就只需要打开一项就好,可以为那些真正需要空间的App留下位置。
  以微信为例,在微信里的朋友给我发消息的时候一般都是马上看的,而且为了保护隐私我会取消显示消息的内容,这时候我的微信通知是这个样子的。
  它只是能告诉我来消息了,所以这时候我打开5条、10 条根本没有意义,所以我只会给微信这类App打开1条。
  2. 有多少显示多少的App
  这一类App我认为主要有两类:
  你需要判断是否进入App的。比如本人的QQ主要用来收取重要的通知,只有有需要发表意见的消息时才会到QQ里去。这样的话,因为通知成了你了解这个应用的唯一通道,那么为了不漏掉信息和减少清理次数,尽可能的增多条数就有必要了(这样做的前提是,你得把QQ里该屏蔽的都屏蔽了,否则重要的信息会被挤掉)
  你需要知道每条通知内容的。比如待办事项类,到点了就提醒你一件事,你在完成之前都需要这条通知来提醒你,那么这个App也是尽量开多一些来让他更好地提供功能。
  App角标
  App的角标实际只是对通知中心里通知的补充,我是这样设置的,在文件夹里的App绝对不开,不然15页的App会很浪费时间,而且又没有办法详细知道是哪个App。在文件夹之外的App,留角标的如图:
  角标的最大作用主要是给我直观提示。如微信的角标能直观地告诉我漏掉了信息,Mailbox角标能直观地告诉我有多少封邮件……我的建议是,角标可以用于漏掉消息会有严重后果,以及需要角标来判断是否需要处理的App。
  锁屏显示和通知的形式也是根据每个人的需要决定了,有个小小的建议:信息什么的就不要显示详细内容了,不然容易泄露隐私。
  以上就是网友和我们分享的一些iPhone6通知推送设置技巧,所有iOS设备都可以参考一下,当然,其中部分观点比较个人,但不失为一次很好的学习。
扫描左侧二维码,可以订阅iPhone中文网官方微信。每天除了推送最新的苹果产品资讯,我们还将不定期举行有奖活动,广大网友可以积极参与,幸运随时会降临!当然,你也可微信搜索“iPhone中文网”或“apple4cn”,关注iPhone中文网官方微信,第一时间获取更多苹果资讯。
iOS越狱破解
苹果产品信息查询
热门新闻排行
皖公网安备05 皖网文许字[3号
TGBUS Corporation, All Rights Reserved4093人阅读
现在越来越多的应用、游戏的推送都已经使用自己定制的声音。看到后自己就去实现了这个功能。
分为3个步骤:
1.制作推送提醒铃声
2.导入项目
3.修改推送json
1.制作推送提醒铃声
你可以转换格式为aiff,wav,caf 格式文件,最多30s,(一般就1-2s)
如果没有这些文件 mac中就有一些做好的声音资源
/System/Library/Sounds/
Basso.aiff Frog.aiff Hero.aiff Pop.aiff Submarine.aiff
Blow.aiff Funk.aiff Morse.aiff Purr.aiff Tink.aiff&
Bottle.aiff Glass.aiff Ping.aiff Sosumi.aiff
可以使用一下代码进行转换格式
afconvert /System/Library/Sounds/Submarine.aiff ~/Desktop/sub.caf -d ima4 -f caff -v&
2.把.caf文件倒入到Xcode项目中
$body['aps'] = array(
'alert' =& $message,
//'sound' =& 'default',
& & 'sound' =& 'sub.caf', &//为你添加到项目中的声音文件名称
& & 'badge' =& 1000
最后发送一条推送试试看吧~&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:488697次
积分:5073
积分:5073
排名:第4187名
原创:67篇
转载:58篇
评论:107条
(2)(1)(4)(16)(5)(6)(2)(6)(2)(1)(4)(3)(1)(2)(2)(3)(8)(2)(1)(3)(2)(3)(7)(7)(5)(3)(1)(1)(2)(2)(2)(8)(6)(3)论玩脑子玩花样我只服天朝大国,双12“亲亲节”什么鬼?
虽说续航时间剩余是不大可能回归了,但除了将它从系统中移除之外,苹果还有没有其他的...
期待已久的《超级马里奥跑酷》现已火热登陆 App Store,中国区暂未上架。
毕竟这是一款 1288 元的耳机,不是每个人都买得起的。
从没有这么热烈的期盼过自己的钱能被扣掉是吧。
不过有竞争才有进步,没有了 Galaxy Note ,三星也会有别的手机继续与苹果斗下去~
或许在接下来的这段时间内,我们可以期待一下这款游戏能够创造什么新的App Store纪录...
对于越狱用户来说,这应该是个好消息。
在本作中每一个玩家将各自为战,自己建立起自己的营地,而僵尸们则可以被利用为幸存者...
在前作当中玩家需要通过重重机关和谜题,将别人的电脑黑掉,而在本作当中有了VR技术的...
这是一款难得的战棋手游,强烈的火纹既视感和丰富的手游系统是否值得收入囊中呢?
《战术小队》作为一款讲求策略的塔防类游戏,在兵种的设计以及升级系统上做的还是不错...
在游戏中玩家扮演一名指挥官参与到一场战争当中,而在这场战斗当中玩家需要让自己的军...
《奥里斯(Aureus)》是Galta推出的一款三消作品,这款三消游戏可不一般,首先它的名...
《开园像素牧场》让玩家当一回有雄心壮志的庄园主,除了改良品种提升作物单价,还能参...
从没有这么热烈的期盼过自己的钱能被扣掉是吧。
有网友表示,可以到街上去捡。
你还剩一个周末的时间可以用来攒人品。
一款耳机这么贵,不知道代工厂商的代工费是多少?
这款 M2 游戏手柄通过蓝牙跟 iPhone 连接,其内部配置的 800 毫安时可充电电池能够实...
AirPods能否经得起市场和时间的检验,让我们拭目以待。
正如我们预料的一样,这款苹果新推出的无线耳机在发售初期将会面临供货吃紧的局面。
Olloclip镜头组一直都是 iPhone 的好伙伴~
IOS8.1怎么修改推送的通知音
注册时间 最后登录
在线时间140 小时 UID
主题帖子人气
青苹果, 积分 62, 距离下一级还需 138 积分
装插件也是可以的,有类似的插件吗?
注册时间 最后登录
在线时间258 小时 UID
主题帖子人气
就是那个三全音吗。在。system.&&让给一个l的文件夹。让后就是audio 里面还有一个文件夹。&&让后就是一个sms 开头的后面是1的文件。这个就是推送的三全音。 我已经改成QQ提醒的咳嗽声了。 没用电脑。不知道具体路径。请见谅回楼主lookatme123于13 分钟前发表的: 装插件也是可以的,有类似的插件吗?......
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!

我要回帖

更多关于 ios 本地推送通知 的文章

 

随机推荐