Multi-Device Application to Receive Push Notifications

From Appmethod Topics
Jump to: navigation, search

Go Up to Mobile Tutorial: Using Remote Notifications (iOS and Android)

You create a basic application to receive push notification with elements that are generic to Android and iOS, and you add the code that makes the characteristics for the specific platforms.

Note: Because our implementation is based on the REST BAAS framework, Appmethod allows you to use in your iOS or Android apps one of the following service providers:
  • Kinvey
  • Parse
  • EMS

Before you create your application to receive push notifications, ensure to complete these two required steps:

Design and Set Up the User Interface

  1. To create an Multi-Device Application, select either of the following:
    File > New > Multi-device Application - Object Pascal > Blank Application
    File > New > Multi-device Application - C++ > Blank Application
  2. Drop a TCheckBox component on the form.
    In the Object Inspector, set the following properties of the CheckBox:
    1. Set the Align to Top.
    2. Set the IsChecked property to False.
    3. Set the Text to Active.
  3. Add a TMemo component to the form and set the Align property to Client.
  4. Drop a TPushEvents object.
  5. Set the AutoActivate to False.
  6. In LiveBindings Designer add a link from Active in PushEvents to IsChecked in CheckBox. The Active property of PushEvents is set to True when the CheckBox component is checked.
    Link.png
  7. Depending on the service provider you want to use, add:
    1. Using TKinveyProvider (iOS or Android)
      KinveyProvider.png
      In the Object Inspector, set the following properties of the KinveyProvider:
      KnvProv.png
    2. Using TParseProvider (iOS or Android)
      ParseProvider.png
      In the Object Inspector, set the following properties of the ParseProvider:
      Note: You do not need to add the GCM AppID when developing Android apps and using Parse.
      ParsePorviderSett.png
    3. Using TEMSProvider (iOS or Android)
      EMSProvider.png
      In the Object Inspector, set the following properties of the EMSProvider:
      EMSProv.png

Creating the Event Handlers

  1. On the form, select PushEvents1 and go to the Object Inspector:
    • Check whether the Provider property is set to KinveyProvider1, to ParseProvider1 or to EMSProvider1 , depending on which provider you used.
    • Go to Events tab and create an event handler for each event by double-clicking the Value field.
    PushEvents.png
  2. Switch to Code tab by pressing F12.
  3. Define the event handlers as follows:
    Object Pascal:
    implementation
    
    {$R *.fmx}
    
    procedure TForm1.PushEvents1DeviceRegistered(Sender: TObject);
    begin
      Memo1.Lines.Add('Device Registered');
      Memo1.Lines.Add('');
    end;
    
    procedure TForm1.PushEvents1DeviceTokenReceived(Sender: TObject);
    begin
      Memo1.Lines.Add('Device Token Received');
      Memo1.Lines.Add('');
    end;
    
    procedure TForm1.PushEvents1DeviceTokenRequestFailed(Sender: TObject;
      const AErrorMessage: string);
    begin
      Memo1.Lines.Add('Device Token Request Failed');
      Memo1.Lines.Add(AErrorMessage);
      Memo1.Lines.Add('');
    end;
    
    procedure TForm1.PushEvents1PushReceived(Sender: TObject;
      const AData: TPushData);
    begin
      Memo1.Lines.Add('Device push received');
      Memo1.Lines.Add(AData.Message);
      Memo1.Lines.Add('');
    end;
    
    end.
    
    C++:
    //--------------------------------------------------------------------------
    void __fastcall TForm1::PushEvents1DeviceRegistered(TObject *Sender)
    {
       Memo1->Lines->Add("Device Registered");
       Memo1->Lines->Add("");
    }
    //--------------------------------------------------------------------------
    void __fastcall TForm1::PushEvents1DeviceTokenReceived(TObject *Sender)
    {
       Memo1->Lines->Add("Device Token Received");
       Memo1->Lines->Add("");
    }
    //--------------------------------------------------------------------------
    void __fastcall TForm1::PushEvents1DeviceTokenRequestFailed(TObject *Sender, const UnicodeString AErrorMessage)
    
    {
      Memo1->Lines->Add("Device Token Request Failed");
      Memo1->Lines->Add(AErrorMessage);
      Memo1->Lines->Add("");
    }
    //--------------------------------------------------------------------------
    void __fastcall TForm1::PushEvents1PushReceived(TObject *Sender, TPushData * const AData)
    
    {
      Memo1->Lines->Add("Push Received");
      Memo1->Lines->Add(AData->Message);
      Memo1->Lines->Add("");
    }
    //--------------------------------------------------------------------------
    

Android Settings

Note: To verify whether your Android device supports GCM, see GCM Overview

Project Settings

To enable your application to receive remote notifications:

  1. Right-click your project in the Project Manager.
  2. Choose Project > Options > Entitlement List.
  3. Set Receive Push Notification value to True.


Note: If you want to enable receiving a notification even if the application is not running while the remote notification comes in, you will need to register a Service Class. This Java service class will create an entry in the Notification Center of the Android Device. If you do not need or want items in the Notification Center, you can skip this step.

You need to include an additional entry in the AndroidManifest.xml for the project, by customizing your AndroidManifest.template.xml. In the AndroidManifest.template.xml file of your project search for the following tag:

<%receivers%>

Add the following code below it:

<service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />

iOS Settings

Project Settings

  1. Right-click your project in the Project Manager.
  2. Choose Project > Options > Version Info, and set the CFBundleIdentifier key. This should be the same as the identifier of your App ID. It is the Bundle ID from Creating iOS App ID on Apple Developer Program section.
VersionInfo.png

Running Your Application on a Mobile Device

Now your application is ready to run on either a simulator or your connected mobile device.
To run your application

  1. In Project Manager, select your target platform.
  2. Choose either of the following commands:
    • Run > Run
    • Run > Run Without Debugging
  3. Click the Active checkbox.
  4. Go to Parse, Kinvey or Sending EMS Push Messages and send a new push:
    Note: You can use your own EMS application to send EMS Push Notifications messages.
    Parse

    ParseHello.png

    Kinvey

    HelloKinvey.png

    EMS

    HelloEMS.png

  5. Switch to your mobile device:
    iOS

    IosDevice.png

    Android

    AndroidHello.png

    iOS EMS

    IOSEMSHello.png


  6. Send your app to background and send another push from Parse or Kinvey. Now go to Notifications:
    iOS

    Pushios.png

    Android

    AndNotificationCenter.png

See Also

Code Samples