请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

吾爱极客

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1605|回复: 1

使用通知(iOS和Android)

[复制链接]

271

主题

271

帖子

1129

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1129
发表于 2015-10-18 01:28:27 | 显示全部楼层 |阅读模式

本教程描述了移动设备上使用通知的基本步骤。

三个基本的通知或警报风格

当用户在移动设备上设置了应用通知时,通知可以用下面这里显示的三种基本风格呈现。标语短暂的显现,而警报对话框需要用户撤销。


移动设备的通知标语

iOS 1.PNG

Android
2.png



警报对话框: iOS 徽章数字和Android通知数字

iOS徽章数字
3.PNG
Android通知数字
4.png



移动设备上的通知中心

下图显示的是iPad(通知中心)和Android(通知抽屉)上的通知中心,用户可以往下拉出当前所有通知的列表。

iOS
5.PNG
Android
6.png

访问通知服务

在移动平台上, FireMonkey 提供了 TNotificationCenter 控件允许你很容易访问通知服务。
要访问通知服务,执行以下:

1.   创建一个新的移动应用:
     §  Delphi: File > New >Multi-DeviceApplication- Delphi
     §  C++: File > New >Multi-DeviceApplication- C++Builder

2.   在项目里包含需要的单元:
     §  对于Delphi应用,添加下面2个单元到uses 语句,如果还没有的话:

3.  uses
          FMX.Platform, FMX.Notification;

     §  对于 C++ 应用, 添加下面include 语句到项目头文件 (.h file):
      #include <FMX.Platform.hpp>
      #include <FMX.Notification.hpp>

4.    在Tool Palette里选择TNotificationCenter 空间, 拉到 Form Designer。

      注意: 如果TNotificationCenter 控件不可用,设置目标平台为Android 或 iOS。
             FMX.Notification.TNotificationCenter.CreateNotification 方法允许你创建TNotification 类对象实例。

添加 FMLocalNotificationPermission (仅适用于iOS 8)

为了在iOS 8设备上使用通知,你需要确认项目选项的Version Info页的FMLocalNotificationPermission 键/值对设置使能。

1.   选择 Project > Options >Version Info.

2.   在Target 字段, 选择 Debug configuration - iOS device - 32-bitplatform.

3.    设置FMLocalNotificationPermissionValue 字段值为 true

FMLocalNotificationPermission 设置使能iOS8设备的本地通知:
7.png
从代码设置图标徽章数字和通知数字

TNotification.Number 定义 图标徽章数字 (iOS设备) 和通知数字 (Android设备)。
要设置iOS 图标徽章数字 (Delphi 或 C++) 或者Android通知数字 (仅仅适用于Delphi apps), 需要实现相应的方法。

1.    拉一个 TButton 到窗体。
2.    在Object Inspector, 修改 Name 属性为 SetNumber.
3.    双击SetNumber  按钮创建它的 OnClick 事件。
4.    添加以下代码来实现SetNumber  按钮的事件的事件函数:

       §  For Delphi:
       procedure TForm1.SetNumberClick(Sender: TObject);
       var
         MyNotification: TNotification;
       begin
         // 创建TNotification实例
         MyNotification := NotificationCenter1.CreateNotification;
         try
             // --- 你的代码从这开始 ---
             // 设置图标或通知数字
            MyNotification.Number :=18;

             // 设置警报消息
            MyNotification.AlertBody := 'Delphi for your mobile device is here!';

             // 注: 必须发送通知到通知中心以使得显示图标徽章数字。
             NotificationCenter1.PresentNotification(MyNotification);
         finally
           MyNotification.DisposeOf;
         end;
       end;

       §  For C++:
       void __fastcall TForm1::SetNumberClick(TObject *Sender)
       {
               if (NotificationCenter1->Supported()) {
                       TNotification *myNotification = NotificationCenter1->CreateNotification();
                       __try {
                               myNotification->Number = 18;
                               myNotification->AlertBody = "C++ for your mobile device is here!";
                               NotificationCenter1->PresentNotification(myNotification);
                       }
                       __finally {
                               myNotification->DisposeOf();
                       }
               }
       }

     在运行应用(按F9)和点击SetNumber 按钮之后,你可以看到下面:
     § 应用图标上的徽章(在iOS 首页):
8.PNG
     § 通知中心中通知消息旁边的数字 (在Android上):
9.png
Android


计划通知

你也可以使用TNotificationCenter 类继承于TCustomNotificationCenter的 ScheduleNotification 方法来计划通知。
要显示一个通知消息,你需要创建TNotification 类实例,然后定义 Name, AlertBody,和 FireDate 字段。

1.    拉一个TButton 到窗体。
2.    在Object Inspector, 修改 Name 属性为 ScheduleNotification
3.    双击ScheduleNotification  按钮来创建它的OnClick 事件。
4.    添加以下代码来实现ScheduleNotification  按钮的 OnClick 事件的事件函数。

§  For Delphi:
procedure TForm1.ScheduleNotificationClick(Sender: TObject);
var
  MyNotification: TNotification;
begin
  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name := 'MyNotification';
    MyNotification.AlertBody := 'Delphi for your mobile device is here!';

    // 10秒后发射
   MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0);

    // 发送通知到通知中心
    NotificationCenter1.ScheduleNotification(MyNotification);
  finally
    MyNotification.DisposeOf;
  end;
end;

§  For C++:
void __fastcall TForm1::ScheduleNotificationClick(TObject *Sender)
{
        if (NotificationCenter1->Supported()) {
                TNotification *myNotification = NotificationCenter1->CreateNotification();
                __try {
                        myNotification->Name = "MyNotification";
                        myNotification->AlertBody = "C++ for your mobile device is here!";
                        // 10秒后发射
                        myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);
                        //发送通知到通知中心
                        NotificationCenter1->ScheduleNotification(myNotification);
                }
                __finally {
                        myNotification->DisposeOf();
                }
         }
}
在运行应用(按F9)和点击ScheduleNotification 按钮之后,你可以在设备首页屏幕顶部看到通知消息 (警报体) 。 对于 iOS 设备,消息类似下面截图:
10.png


重复通知消息

可以使用TNotification  对象的RepeatInterval  属性来重发通知消息。
要重发一个通知消息,需要创建 TNotification 类实例,然后定义Name, AlertBody,和FireDate 字段。
而且需要使用 ScheduleNotification 方法和设置 RepeatInterval 属性。 下面的代码中,重发间隔设置为1分钟。
1.    放一个TButton 到窗体。
2.    在Object Inspector, 修改 Name 属性为 RepeatedNotification
3.    双击RepeatedNotification 按钮创建 OnClick 事件。
4.    通过添加以下代码为RepeatedNotification  按钮的OnClick  事件实现事件函数:

§  Delphi:
procedure TForm1.RepeatedNotificationClick(Sender: TObject);
var
  MyNotification: TNotification;
begin
  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Title := 'MyNotification';
    MyNotification.AlertBody := 'Repeating notification each minute!';

       //10秒后发射
   MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0);

        //每分钟重复一次
    MyNotification.RepeatInterval := TRepeatInterval.Minute;

        // 发送通知到通知中心
   NotificationCenter1.ScheduleNotification(MyNotification);
  finally
    MyNotification.Free;
  end;
end;

§  C++:
void __fastcall TForm1::RepeatedNotificationClick(TObject *Sender)
{
        if (NotificationCenter1->Supported()) {
                TNotification *myNotification =
                        NotificationCenter1->CreateNotification();
                __try {
                        myNotification->Name = "MyNotification";
                        myNotification->AlertBody = "Repeating notification each minute!";

                        // 10秒后发射
                        myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);

                        // 每分钟重复一次
                        myNotification->RepeatInterval = TRepeatInterval::Minute;

                        // 发送通知到通知中心
                        NotificationCenter1->ScheduleNotification(myNotification);
                }
                __finally {
                        myNotification->Free();
                }
        }
}
运行应用(按F9)并点击RepeatedNotification 按钮之后, 你可以在设备首页顶部看到通知消息 (警报体) 。 对于iOS 设备,消息类似以下屏幕:
11.png
更新或取消一个计划或重复通知消息

每个计划通知消息通过TNotification  对象的Name 属性来区分。
Note: 对于iOS 平台, CancelNotification 和 ScheduleNotification 仅在这些通知还没有展示时取消和更新。如果一个通知已经出现在设备通知列表,对于iOS,这时不能更新也不能取消该通知。

要更新一个计划通知, 只需用拥有相同名字(Name属性)的TNotificationCenter  实例再次调用ScheduleNotification 方法。
要取消一个计划通知, 只需用前面使用的标记再次调用 CancelNotification 方法。

1.    放一个TButton 到窗体。
2.    在Object Inspector, 修改 Name 属性为 CancelNotification.
3.    双击CancelNotification  按钮创建 OnClick 事件。
4.    通过添加以下代码给CancelNotification  按钮实现OnClick  事件函数:
§  Delphi:
procedure TForm1.CancelNotificationClick(Sender: TObject);
begin
   NotificationCenter1.CancelNotification('MyNotification');
end;

§  C++:
  void __fastcall TForm1::CancelNotificationClick(TObject *Sender)
{
   NotificationCenter1->CancelNotification("MyNotification");
}

立即展示通知消息

你也可以使用PresentNotification 函数立即显示通知消息。
要显示一个通知消息,需要创建 TNotification 类实例,然后定义 Name 和 AlertBody 字段。

1.    放一个TButton 到窗体。
2.    在 Object Inspector, 修改 Name 属性为 PresentNotification
3.    双击PresentNotification  按钮创建 OnClick 事件。
4.    通过添加以下代码给PresentNotification  按钮实现 OnClick 事件函数:

§  Delphi:
procedure TForm1.PresentNotificationClick(Sender: TObject);
var
  MyNotification: TNotification;
begin  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name := 'MyNotification';
    MyNotification.AlertBody := 'Delphi for your mobile device is here!';

    // 以及设置图标徽章数字(iOS) 或消息数字(Android)
   MyNotification.Number := 18;
    MyNotification.EnableSound := False;

    // 发送通知到通知中心
    NotificationCenter1.PresentNotification(MyNotification);
  finally
    MyNotification.DisposeOf;
  end;
end;

§  C++:
void __fastcall TForm1::PresentNotificationClick(TObject *Sender)
{
  if (NotificationCenter1->Supported()) {
           TNotification *myNotification = NotificationCenter1->CreateNotification();
           __try {
                    myNotification->Name = "MyNotification";
                   myNotification->AlertBody = "C++ for your mobile device is here!";

                   // 设置图标徽章数字( iOS) 或消息数字 (Android)
                   myNotification->Number = 18;
                   myNotification->EnableSound = False;

                   // 发送通知到通知中心
                   NotificationCenter1->PresentNotification(myNotification);
          }
          __finally {
                     myNotification->DisposeOf();
          }
}
}


定制通知声音

通过TNotification  对象的SoundName  属性可以立即给通知消息定制声音。
你需要创建 TNotification 类的实例,定义 EnableSound 和 SoundName 属性。并且指明声音文件的完整路径与文件后缀。

1.    放一个 TButton 到窗体。
2.    在 Object Inspector, 修改 Name 属性为 SoundNotification.
3.    双击SoundNotification 按钮创建 OnClick 事件。
4.    通过添加以下代码给SoundNotification 按钮实现 OnClick 事件函数:

§  Delphi:
procedure TForm1.SoundNotificationClick(Sender: TObject);
var
  MyNotification: TNotification;
begin
  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name := 'MyNotification';
    MyNotification.AlertBody := 'Delphi for your mobile device is here!';
    MyNotification.EnableSound := True;
    MyNotification.SoundName := GetSoundName;
        MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0);

        // 发送通知到通知中心
    NotificationCenter1.ScheduleNotification(MyNotification);
  finally
    MyNotification.Free;
  end;
end;

§  C++:
void __fastcall TForm1::SoundNotificationClick(TObject *Sender)
{
TNotification *myNotification = NotificationCenter1->CreateNotification();
        __try {
            myNotification->Name = "MyNotification";
            myNotification->AlertBody = "C++ for your mobile device is here!";
            myNotification->EnableSound = true;
            myNotification->SoundName = GetSoundName();
            myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);
            // 发送通知到通知中心
           NotificationCenter1->ScheduleNotification(myNotification);
        }
        __finally {
            myNotification->Free();
        }
}

5.    声明GetSoundName 函数。

    §  对于Delphi:
    §  在单元的private部分设置GetSoundName 声明。
    §  添加 System.IOUtils 到项目uses 语句。
     uses
           System.IOUtils;
     private
           function GetSoundName: string;

     §  For C++:
     §  在头文件 (.h file)中, 添加以下声明:
     §  在单元的private部分设置GetSoundName 声明。
     §  包含 System.IOUtils.hpp 到项目 uses 语句。.
     #include<System.IOUtils.hpp>
     private:     // User declarations
      __fastcall UnicodeString GetSoundName ();

6.     实现 GetSoundName 函数。
    注: 取决于目标操作系统,声音文件可能有不同的文件后缀。

    §  Delphi:

{$R *.fmx}
function TForm1.GetSoundName: string;
begin
{$IFDEF IOS}
  Result := 'myiOSSound.caf';
{$ENDIF}
{$IFDEF ANDROID}
  Result := TPath.Combine(TPath.GetSharedDocumentsPath, 'myAndroidSound.mp3');
{$ENDIF}
end;

    §  C++:
    § 在 .cpp 文件, 添加以下代码:

UnicodeString __fastcall TForm1::GetSoundName ()
{
        UnicodeString result;
#if defined(_PLAT_IOS)
        result = "myiOSSound.caf";
#endif
#if defined(__ANDROID__)
        result = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDocumentsPath(), "myAndroidSound.mp3");
#endif
        return result;[size=12.3825px]  [size=12.3825px]//
}

7.    添加声音文件到项目:
     § 在Windows浏览器找到myAndroidSound.mp3 和myiOSSound.caf 文件,将其拉到项目管理器 Project Manager,在项目名字上放下这些文件。
    注意: 声音文件myAndroidSound.mp3 和 myiOSSound.caf 并不包含在RAD Studio的安装里面。你可以使用任意你拥有的MP3 和CAF 文件, 但记得修改文件名字为上面代码中的名字。
     §  在确认对话框点击 Yes 添加声音文件到项目。

8.    打开 DeploymentManager(发布管理器) 确认声音文件已经随同应用一起发布。你可以在远程路径一列看到对应的入口:
     §  对iOS: StartUp\Documents 。
     §  对 Android: assets\internal 。
9.    在发布管理器里面修改添加文件的远程路径:
     §  对 iOS: .\
     §  对 Android: assets\


通知标语或通知警报

应用默认显示通知标语:
§ iPad上的通知标语
12.PNG
§ Android设备上的通知标语
13.png
Android
§ 通知警报 (仅仅适用于 iOS设备)
14.PNG
要使用通知警报来代替通知标语 (仅适用 iOS设备), 终端用户需要在设备设置里面通过通知中心的配置页修改 Alert 风格为 Alerts
15.PNG
添加通知警报的动作(仅适用iOS)

也可以通过添加打开应用的动作按钮来定制警报。
要定制警报动作Action, 设置 AlertAction 字段为动作按钮的名字,然后设置 HasAction 字段为True, 如下:
1.    放一个 TButton 到窗体。
2.    在 Object Inspector, 修改 Name 属性为 ActionNotification.
3.    双击ActionNotification  按钮创建OnClick 事件。
4.    通过添加以下代码为ActionNotification  按钮的 OnClick  事件实现事件函数:
§   Delphi:
procedure TForm1.ActionNotificationClick(Sender: TObject);
var
  MyNotification: TNotification;
begin
   MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name := 'MyNotification';
    MyNotification.AlertBody := 'Delphi for iOS is here! ';
    MyNotification.Number := 2;
    MyNotification.AlertAction := 'Launch';
    MyNotification.HasAction := True;
    MyNotification.FireDate := Now + EncodeTime(0, 0, 20, 0);
    NotificationCenter1.ScheduleNotification(MyNotification);
  finally
    MyNotification.DisposeOf;
  end;
end;

§  C++:
void __fastcall TForm1::ActionNotificationClick(TObject *Sender)
{
   if (NotificationCenter1->Supported()) {
           TNotification *myNotification = NotificationCenter1->CreateNotification();
           __try {
                   myNotification->Name = "MyNotification";
                   myNotification->AlertBody = "C++ for iOS is here!";
                   myNotification->Number = 2;
                   myNotification->AlertAction = "Launch";
                   myNotification->HasAction = True;
                   myNotification->FireDate = Now() + EncodeTime(0,0,20,0);
                   NotificationCenter1->ScheduleNotification(myNotification);
           }
           __finally {
                   myNotification->DisposeOf();
           }
   }
}
注意: 只有 iOS 设备支持通知警报功能。
通知警报在FireDate 字段指定的时间打开。
16.PNG


添加动作到通知

TNotificationCenter 类提供了 onReceiveLocalNotification 事件函数允许你编写一个当用户在通知中心点击了通知消息时的回应。要编写回应, 在窗体设计器双击 TNotificationCenter 控件, 然后实现 OnReceiveLocalNotification 事件函数。
下列代码实现了一个回应,显示一个消息框说" <通知名字>" 通知被点击"
§  For Delphi:
   procedure TForm1.NotificationCenter1ReceiveLocalNotification(Sender: TObject; ANotification: TNotification);
   begin
       ShowMessage('The ' + ANotification.Name + ' notification clicked.' );
   end;

§  For C++:
void __fastcall TForm1::NotificationCenter1ReceiveLocalNotification(TObject *Sender, TNotification *ANotification)
{
           ShowMessage("The " + ANotification->Name + " notification clicked.");
}

17.png

运行应用

要运行应用,选择 Run > Run 或按 F9。在设备上点击不同按钮来计划或展示通知。



www.52jike.com(吾爱极客)  ruanzhuo翻译整理,转载请注明出处


回复

使用道具 举报

0

主题

1

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2017-1-23 16:32:05 | 显示全部楼层
好东东,谢谢楼主












回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|吾爱极客 ( 粤ICP备15067754号-1  

GMT+8, 2018-6-25 17:56 , Processed in 0.174150 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表