Notyfikacje Push są popularną formą informowania użytkowników na temat nowości, promocji, ofert i wszelkich wiadomości jakich chcielibyśmy naszym odbiorcom przekazać. Sama ich implementacja nie zalicza się do najprostsztycj niemniej możemy skorzystać z zewnętrznej platformy takiej jak infobip push by ułatwić sobie to zadanie.
Usługa dostępna jest pod adresem httpss://push.infobip.com W przypadku niewielkich aplikacji usługa jest w pełni darmowa pozwalająca nam stworzyć 3 aplikacje oraz wysłać 10 tysięcy notyfikacji. Niestety przy większej grupie odbiorców przyjdzie nam już zapłacić 75 € lub 300 € w zależności od wersji na jaką się zdecydujemy.
Na początku tworzymy nasze konto. Jak zawsze podajemy nasz login, hasło i adres email. Niestety aby w pełni korzystać z infobip push będziemy później w celu weryfikacji podać nasz numer telefonu.
Po zalogowaniu będziemy mieli dostęp do panelu. Tworzymy nową aplikację Podajemy w niej nazwę aplikacji oraz jej opis i ewentualnie zdjęcie. Żeby wszystko działało poprawnie potrzebujemy jeszcze numer API usługi Google Cloud Messaging (API key (GCM)). Google Cloud Messaging jednak w ostatnim czasie zamieniło się na Firebase Cloud Messaging. Tak więc aby otrzymać klucz API musimy udać się pod httpss://console.firebase.google.com/
Tam rejestrujemy swój projekt podając jego nazwe. W panelu wchodzimy pod Project Settings -> Cloud Messaging i kopiujemy server key i wklejamy go do panelu InfoBip Push. Następnym krokiem jest zaimplementowanie rozwiązania w aplikacji.
Pobieramy bibliotekę httpss://push.infobip.com/downloads/infobip-push-2.0.1.aar uruchamiamy android studio i tworzymy nowy projekt, minimalna wersja androida to 15. Importujemy do projektu dopiero co ściągniętą bibliotekę File-> New ->New module -> Import .JAR/.AAR package
Dodatkowo bibloteki jakie potrzbujemy to google play, Retrofit, Gson, ReactiveX. Dodajemy wszystkie zalezności do pliku gradle.
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "com.testpush"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.0'
compile project(':infobip-push-2.0.1')
compile 'com.android.support:support-v13:24.0.0'
compile 'com.android.support:appcompat-v7:24.+'
compile 'com.google.android.gms:play-services:6.1.+'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttps:okhttps:2.0.0'
compile 'com.squareup.okhttps:okhttps-urlconnection:2.0.0'
compile 'com.google.code.gson:gson:2.3.1'
compile 'io.reactivex:rxjava:1.0.10'
compile 'io.reactivex:rxandroid:0.24.0'
compile 'com.github.oxo42:stateless4j:2.5.0'
}
Przechodzimy do pliku AndroidManifest.xml Dodajemy tutaj wszystkie niezbędne pozwolenia jak łączenie się z internetem i otrzymywanie notyfikacji push. Przy notyfikacji push musimy podać nazwę naszego pakietu jak w pliku poniżej. Nie możemy też zapomnieć o Services i BrodcasReciverach oraz meta tagu informującym o wersji biblioteki google play. Jeśli chcemy przesyłać media w naszych wiadomościach musimy dodać odpowiednią aktywność i ustawić hardwareAccelerated=”true”.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.testpush">
<uses-permission android:name="com.testpush.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.VIBRATE" />
<permission
android:name="com.testpush.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="com.infobip.push.PushActionService"/>
<service android:name="com.infobip.push.GcmService"/>
<receiver android:name="com.infobip.push.GcmReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<category android:name="com.testpush"/>
</intent-filter>
</receiver>
<receiver android:name="com.infobip.push.PushActionReceiver"/>
<receiver
android:name="com.infobip.push.ConsistencyAlarmReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name="com.infobip.push.activities.MediaActivity"
android:hardwareAccelerated="true"
android:screenOrientation="portrait">
</activity>
<activity
android:name="com.testpush.MediaActivity"
android:label="@string/title_activity_media" >
</activity>
</application>
</manifest>
Na konieć zostaję nam zaimplementowanie kodu w aplikacji, prezentuję się on następująco:
package com.testpush;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.infobip.push.Configuration;
import com.infobip.push.Notification;
import com.infobip.push.PushClient;
import com.infobip.push.activities.MediaActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Configuration pushLibraryConfiguration =
Configuration.customConfiguration(getApplication())
.applicationId("0iedbanus3w4") //Numer identyfikacyjny aplikacje "
Application ID" znajdujący sie w panelu ibnfobip
.applicationSecret("4lqwcrq4l5nzlv9") //"Application secret" wygenerowany przez aplikacje znajdujący się również w panelu infoBip
.projectNumber("761011732022") //Numer Id aplikacji możemy ją znaleźć w panelu FCM obok server key (Sender id)
.production(false)
.build();
PushClient.configure(getApplication(), pushLibraryConfiguration);
PushClient.start();
//Tworzenie nowej aktywności w której odbieramy media wysłane z panelu infobip
Intent onMediaNotificationClickIntent = new Intent(getApplicationContext(), MediaActivity.class);
Notification.DefaultNotificationHandler.onNotificationClickIntent(
onMediaNotificationClickIntent,
Notification.DefaultNotificationHandler.NotificationType.media
);
}
}
public class MediaActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String jsonData = getIntent().getExtras().getString(
Notification.DefaultNotificationHandler.INTENT_EXTRAS_KEY
);
}
}
W panelu info bip możemy ustawić temat wiadomości, krótką informacje o wiadomości oraz treść przesyłanej wiadomości w następujący sposób:
Gdy wyszlemy notyfikacje pojawi nam się taki oto wynik:
InfoBip pozwala na szybkie i proste wysyłanie wiadomości. Ponadto istnieje możliwość identyfikowania grupowania czy identyfikowania pojedynczych użytkowników. Wysyłania wiadomości do osób z wybranego regionu świata czy reagowanie na wydarzenia takie jak dostarczenie wiadomości, klikniecie na wiadomość. W celu zdobycia większej informacji odsyłam zainteresowanych do dokumentacji httpss://push.infobip.com/docs/platforms/android#androidLibrary
Very quickly this web page will be famous amid all blogging and site-building visitors, due to it’s pleasant content.