Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Bu sayfada:

Table of Contents

...

Adım 1 - Gerekenler

Android mobil uygulama  & Android Studio

Firebase Cloud Messaging ve Huawei Push Kit - google_services.json & agconnect_services.json

RMC Hesabı - AppAlias

Minimum 21 API Level Test Cihazı

Adım 2 - Bağımlılıkları Eklemek

2.1  app/build.gradle (Module: app) açıp aşağıdaki kod blogunu ekleyiniz.

Code Block
languagegroovy
dependencies {
		implementation 'com.
euromsg:euromsg
github.relateddigital:euromessage-android:$euromessage_version'
	}

apply plugin: 'com.huawei.agconnect'
apply plugin: 'com.google.gms.google-services'

...

2.2 project / build.gradle'i açıp aşağıdaki kod blogunu ekleyiniz.

Code Block
languagegroovy
buildscript {
    repositories {
        google()
        jcenter()
        maven {url 'http://developer.huawei.com/repo/'}
    }

dependencies {
        classpath "com.android.tools.build:gradle:$gradle_version"
        classpath 'com.google.gms:google-services:$google_version'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.huawei.agconnect:agcp:$huawei_version'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'http://developer.huawei.com/repo/'}
     
} }

...

Seçeneğine tıklamayı unutmayınız

   maven { url 'https://jitpack.io' }
    }
}

Adım 3  - Android Manifest'e Kodları Eklemek

Code Block
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
Code Block
languagexml
    	<service
            android:name="euromsg.com.euromobileandroid.service.EuroFirebaseMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <service
            android:name="euromsg.com.euromobileandroid.service.EuroHuaweiMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
            </intent-filter>
        </service>


Bu tanımlamalar sayesinde gelen FCM ve HMS'den gelen push bildirimleri Euromessage tarafından karşılanacaktır.  Uygulamanızın Application Class - eğer yoksa - tanımlamanız gerekebilir. Burada yapmanız gereken yeni bir class oluşturup Application Class’tan extend etmek ve AndroidManifest dosyasında bunu tanımlamak olacaktır;

Code Block
languagexml
<application
   android:name=".MainApplication"
   android:allowBackup="true"
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >

 Adım 4  - Gerekli Kodları Eklemek

Aşağıda örnek bir implementasyon görülmektedir; Bunun için FIREBASE_APP_ALIAS  ve HUAWEI_APP_ALIAS'ı  RMC panel üzerinden tanımlamanız Eğer WRITE_EXTERNAL_STORAGE ve READ_EXTERNAL_STORAGE izinlerini uygulamanızda kullanıyorsanız aşağıdaki satırı AndroidManifest.xml dosyanıza <application tag ı içerisine eklemeniz gerekmektedir.

Code Block
language

...

xml
android:requestLegacyExternalStorage="true"

...

Adım 4  - Gerekli Kodları Eklemek

Bildirim İzni İsteme

Uygulama ilk açıldığında kullanıcıdan izin istemek için aşağıdaki kodu kullanabilirsiniz.

Code Block
languagejava
EuroMobileManager.getInstance().requestNotificationPermission(activity);

Aşağıda örnek bir implementasyon görülmektedir; Bunun için FIREBASE_APP_ALIAS  ve HUAWEI_APP_ALIAS'ı  RMC panel üzerinden tanımlamanız gerekmektedir.

Code Block
languagejava
public class MainApplication extends Application {

    private final String FIREBASE_APP_ALIAS = "euromessage-android";
    private final String HUAWEI_APP_ALIAS = "euromsg-huawei";

    private static EuroMobileManager euroMobileManager;

    @Override
  	 public void onCreate() {
        super.onCreate();

        euroMobileManager = EuroMobileManager.init(FIREBASE_APP_ALIAS, HUAWEI_APP_ALIAS, this);
        euroMobileManager.registerToFCM(getBaseContext());
    }
}


4.1 Firebase Messaging Servis'te Token Toplama

EuroFirebaseMessagingService onNewToken() methodu içerisinde ilk kez açılan bir uygulama için token'i alır ve subscribe eder.

Daha önceden sahip olduğunuz token'ları EuroMobileManager'a setlemek için aşağıdaki kodları eklemeniz gerekmektedir

Code Block
languagejava
 private void setExistingFirebaseTokenToEuroMessage() {

        FirebaseMessaging.getInstance().getToken()
        .addOnCompleteListener(new OnCompleteListener<String>() {
            @Override
            public void onComplete(@NonNull Task<String> task) {
                if (!task.isSuccessful()) {
                    return;
                }
                String token = task.getResult();
                euroMobileManager.subscribe(token, getApplicationContext());
            }
        });
    }


4.2 Huawei Messaging Servis'te Token Toplama  

Huawei'de telefonun EMUI sürümüne göre token toplama yöntemi de değişmektedir.

EMUI 10'dan düşük sürümler EuroHuaweiMessagingService içindeki onNewToken()’da tokenları subscribe ederken,

EMUI 10 üzerinde telefonlar aşağıdaki gibi tokenları generate eder. Generate edilmiş bu token'i euroMobileManager'a subscribe etmeniz gerekmektedir.

Code Block

...

languagejava

...

private void setHuaweiTokenToEuromessage() {

...


    

...

new Thread() {
        

...

@Override

...


        

...

public void run() {
            

...

try {
                

...

String appId = 

...

new AGConnectOptionsBuilder().build(getApplicationContext()).getString("client/app_id");
                

...

final String token = HmsInstanceId.getInstance(getApplicationContext()).getToken(appId, "HCM");

                if(TextUtils.isEmpty(token) || token 

...

== null) {
                    Log.

...

e("Huawei Token

...

 : ", "Empty 

...

token!!!");
                 

...

  

...

 

...

return;

...

 

...

               }

    

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

     euroMobileManager.subscribe(token, getApplicationContext());

         

...

       Log.i("Huawei Token", "" + token);

...

         

...

   }

...

languagejava

...

 catch (ApiException e) {
            

...

    Log.e("Huawei Token", "Getting the token 

...

failed! " + 

...

e);
    

...

Kodların son hali ; 

...

languagejava

...

 

...

 

...

 

...

 

...

 

...

   }
  

...

 

...

 

...

 

...

 

...

 

...

 }
   

...

 }.start();
}

veya

Code Block
languagejava
 private void setHuaweiTokenToEuromessage() {

   
private
 
static
 
EuroMobileManager
 
euroMobileManager;
  new Thread() {
 
@Override
   
 
public
 
void
 
onCreate()
 
{
    @Override
    
super.onCreate();
        public void 
euroMobileManager
run() 
= EuroMobileManager.init(FIREBASE_APP_ALIAS, HUAWEI_APP_ALIAS, this);
{
           
euroMobileManager.registerToFCM(getBaseContext());
     try {
   
setExistingFirebaseTokenToEuroMessage();
     
if
 
(!EuroMobileManager.checkPlayService(getApplicationContext()))
 
{
          String appId 
setHuaweiTokenToEuromessage(
= AGConnectServicesConfig.fromContext(getApplicationContext()).getString("client/app_id");
        
}
        
}
 
}
   final String token 

...

Kullanıcıya ait çeşitli parametreler biliniyorsa kayıt aşamasında ya da sonrasında aşağıdaki gibi activity'de eklenebilir. Aşağıdaki kod bloğu sayesinde aynı bilgilere ait kullanıcı Euromessage RMC panelinde varsa, alınan token kullanıcı ile eşleştirilecektir. 

Bu method sayesinde subscribe işlemi için sunucuya gönderilen json objesinde extra parametresine değerler eklenmiş olur ve kullanıcının hangi token ile eşleştirileceği belirtilmiş olur. Zorunlu parametreler ve opsiyonel parametreler gönderildikten sonra sync() metodu çağrılmalıdır.

...

Code Block
languagejava
--Zorunlu parametreler--
euroMobileManager.setEmail("euromsg@euromsg.com", this);
euroMobileManager.setEuroUserId("123456", this);

--Opsiyonel parametreler--
euroMobileManager.setAppVersion("1.1");
euroMobileManager.setFacebook("euroFB", this);
euroMobileManager.setTwitterId("euroTW", this);
euroMobileManager.setPhoneNumber("05320000000", this);
euroMobileManager.setLocation(41.12,29.11);
euroMobileManager.setNotificationTransparentSmallIcon(android.R.drawable.your_drawable, getApplicationContext());
euroMobileManager.setNotificationLargeIcon(R.drawable.your_drawable, getApplicationContext());
euroMobileManager.setNotificationColor("#d1dbbd");
euroMobileManager.setChannelName("Demo", getApplicationContext());
euroMobileManager.setPushIntent("com.relateddigital.euromessage.MainActivity", getApplicationContext());

euroMobileManager.sync(this);

...

Mobil kanaldan gelen datalarınızın RMC'ye yüklenebilmesi için, aktif RMC hesabınızda kullanmış olduğunuz referans değeriniz ne ise (KEY_ID* veya E-Mail vb.) mobil kanaldan gelen dataların da bu referans ile gelmesine dikkat ediniz."

*KEY_ID: Uygulama sahibi tarafından müşterisinin tekilleştirilmesi için kullanılan id değerleridir. Bunlar CRM id, userid, customerid, accountid gibi farklı isimlerle ifade ediliyor olabilir.

User-token eşleşmesi için gönderilen payload ta extra parametresi bu şekilde parametreler alacaktır;

Code Block
languagejson
"extra" : {"email" : "euromsg@euromsg.com",
= HmsInstanceId.getInstance(getApplicationContext()).getToken(appId, "HCM");

                    euroMobileManager.subscribe(token, getApplicationContext());

                    Log.i("Huawei Token", "" + token);

                } catch (ApiException e) {
                    Log.e("Huawei Token", "get token failed, " + e);
                }
            }
        }.start();
    }


4.3 İki servisin aktif olduğu cihazlarda tokeni iki kere yollamamak için

Code Block
languagejava
	  if (!EuroMobileManager.checkPlayService(getApplicationContext())) {
            setHuaweiTokenToEuromessage();
        }
        

Kodların son hali ; 

Code Block
languagejava
public class MainApplication extends Application {

    private final String FIREBASE_APP_ALIAS = "euromessage-android";
    private final String HUAWEI_APP_ALIAS = "euromsg-huawei";

    private static EuroMobileManager euroMobileManager;

    @Override
  	 public void onCreate() {
        super.onCreate();

        euroMobileManager = EuroMobileManager.init(FIREBASE_APP_ALIAS, HUAWEI_APP_ALIAS, this);
        euroMobileManager.registerToFCM(getBaseContext());

        setExistingFirebaseTokenToEuroMessage();

		if (!EuroMobileManager.checkPlayService(getApplicationContext())) {
            setHuaweiTokenToEuromessage();
        }

    }
}	       

4.4 Push Bildirim İzni Alın (Android 13 veya daha yüksek)

SDK versiyonlarınızı doğrulayın. Compile ve target SDK versiyonu en az 33 olmalıdır.

Code Block
languagegroovy
android {
    compileSdkVersion "33"

    defaultConfig {
        targetSdkVersion "33"
    }
}

Aşağıdaki Euromessage metodunu kullanarak, push notification izni isteme prompt’unu tetikleyin.

Code Block
languagejava
EuroMobileManager.getInstance().requestNotificationPermission(activity);


Adım 5  - Token Kullanıcı Üye Eşleşmesi

Kullanıcıya ait çeşitli parametreler biliniyorsa kayıt aşamasında ya da sonrasında aşağıdaki gibi activity'de eklenebilir. Aşağıdaki kod bloğu sayesinde aynı bilgilere ait kullanıcı Euromessage RMC panelinde varsa, alınan token kullanıcı ile eşleştirilecektir. 

Bu method sayesinde subscribe işlemi için sunucuya gönderilen json objesinde extra parametresine değerler eklenmiş olur ve kullanıcının hangi token ile eşleştirileceği belirtilmiş olur. Zorunlu parametreler ve opsiyonel parametreler gönderildikten sonra sync() metodu çağrılmalıdır.

Code Block
languagejava
--Zorunlu parametreler--
euroMobileManager.setEmail("euromsg@euromsg.com", this);
euroMobileManager.setEuroUserId("123456", this);

--Opsiyonel parametreler--
euroMobileManager.setAppVersion("1.1");
euroMobileManager.setFacebook("euroFB", this);
euroMobileManager.setTwitterId("euroTW", this);
euroMobileManager.setPhoneNumber("05320000000", this);
euroMobileManager.setLocation(41.12,29.11);
euroMobileManager.setNotificationTransparentSmallIcon(android.R.drawable.your_drawable, getApplicationContext());
euroMobileManager.setNotificationLargeIcon(R.drawable.your_drawable, getApplicationContext());
euroMobileManager.setNotificationColor("#d1dbbd");
euroMobileManager.setChannelName("Android", getApplicationContext());
euroMobileManager.setPushIntent("com.relateddigital.euromessage.MainActivity", getApplicationContext());

euroMobileManager.sync(this);


Bir uygulama mobil cihaza kurulduğu anda push subscription servisi ile bu cihaza ait token bilgisi RMC veri tabanına yazılır. Bir token; kullanıcı uygulamada oturum açana kadar “anonim” yani hiç bir kullanıcı ile eşleştirilmeden kaydedilir. Bu tokenın bir kullanıcıyla eşleştirilebilmesi için mutlaka cihazda oturum açılmış olması ve SDK tarafından bu tokenın sahibini tanımlayıcı bir bilginin (KEY_ID yada EMAIL) RMC'ye gönderilmesi gerekir. Bu bilgiler push mesajı payload unda "extra" : {} bloğunda yer alır. 

Mobil kanaldan gelen datalarınızın RMC'ye yüklenebilmesi için, aktif RMC hesabınızda kullanmış olduğunuz referans değeriniz ne ise (KEY_ID* veya E-Mail) mobil kanaldan gelen dataların da bu referans ile gelmesine dikkat ediniz."

*KEY_ID: Uygulama sahibi tarafından müşterisinin tekilleştirilmesi için kullanılan id değerleridir. Bunlar CRM id, userid, customerid, accountid gibi farklı isimlerle ifade ediliyor olabilir.

User-token eşleşmesi için gönderilen payload ta extra parametresi bu şekilde parametreler alacaktır;

Code Block
languagejson
"extra" : {"email" : "euromsg@euromsg.com",
            "keyID" : "123456"}

Adım 6 - IYS E-Posta Kaydı

Eğer kullanıcınız kurumsal bir hesap ise TACIR olarak göndermeniz gerekmektedir. Bunun için registerEmail metodunda bulundan false değerini true olarak değiştiriniz.

Code Block
languagejava
EuromessageCallback callback = new EuromessageCallback() {
    @Override
    public void success() {
        Toast.makeText(getApplicationContext(), "REGISTER EMAIL SUCCESS", Toast.LENGTH_LONG).show();
    }

    @Override
    public void fail(String errorMessage) {
        String message = "REGISTER EMAIL ERROR ";
        if(errorMessage != null) {
            message = message + errorMessage;
        }
        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
    }
};
EuroMobileManager.getInstance().registerEmail("test@euromsg.com", EmailPermit.ACTIVE, false, getApplicationContext(), callback);

Eğer RMC panel üzerinde bir kullanıcı eşleştirmesi görmüyorsanız, RMC support ekibinden ilgili appKey’in FLAG’ini aktif hale getirmesini talep ediniz.

Adım 7  - Okundu Raporu ve Yönlendirme

Gelen push bildiriminin içeriğini yakalamak ve gerekli yönlendirmeyi yapabilmek için aşağıdaki gibi onNewIntent() metodunu kullanmalısınız. Eğer öncesinde EuroMobileManager.setPushIntent() metodu aracılığıyla bir sınıf girdiyseniz o sınıf içerisine onNewIntent() methodu eklenmelidir.

Eğer setPushIntent() metodunu kullanmadıysanız launcher activity içerisine onNewIntent() metodunun eklenmesi gereklidir.

Okundu raporlarıyla ilgili:

- Eğer 5.1.3 veya üstü bir SDK versiyonu kullanıyorsanız, okundu raporunu sizin göndermeniz gerekmektedir. Android 12 ile gelen kısıtlamalar nedeniyle SDK tarafından gönderilememektedir.

Code Block
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if(intent != null) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Message message = (Message) intent.getExtras().getSerializable("message");
            if(message != null) {
                // Send open report
                if(EuroMobileManager.getInstance() == null) {
                    EuroMobileManager.init(googleAppAlias, huaweiAppAlias, getApplicationContext()).sendOpenRequest(message);
                } else {
                    EuroMobileManager.getInstance().sendOpenRequest(message);
                }
            } else {
                // Carousel push notification : an item was clicked
                String itemClickedUrl = bundle.getString("CarouselItemClickedUrl");
                if(itemClickedUrl != null && !itemClickedUrl.equals("")) {
                    try {
                        Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(itemClickedUrl));
                      

...

 

...

Adım 6 - IYS E-Posta Kaydı

Eğer kullanıcınız kurumsal bir hesap ise TACIR olarak göndermeniz gerekmektedir. Bunun için registerEmail metodunda bulundan false değerini true olarak değiştiriniz.

Code Block
languagejava
EuromessageCallback callback = new EuromessageCallback() { viewIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                 @Override     public void successstartActivity(viewIntent);
{           Toast.makeText(getApplicationContext(), "REGISTER EMAIL SUCCESS", Toast.LENGTH_LONG).show();     } catch (Exception e) {
      @Override     public void fail(String errorMessage) {         String message = "REGISTER EMAIL ERROR ";e.printStackTrace();
              if(errorMessage != null) {   }
         message = message + errorMessage;   }
     }       }
 Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();     }
}; EuroMobileManager.getInstance().registerEmail("test@euromsg.com", EmailPermit.ACTIVE, false, getApplicationContext(), callback);

Eğer RMC panel üzerinde bir kullanıcı eşleştirmesi görmüyorsanız, RMC support ekibinden ilgili appKey’in FLAG’ini aktif hale getirmesini talep ediniz.

Adım 7  - Okundu Raporu

Uygulamaya bildirim geldiğinde Activity deki intent.getExtra içerisine gelecek  ve bu method bildirimleri karşılayacaktır. Bu şekilde push mesajının içeriği Activity içerisinden okunur. reportRead metodu okundu bilgisinin iletilmesi içindir.

...

languagejava

...

 }
}

- Eğer 5.0 - 5.1.2 arası bir SDK versiyonu kullanıyorsanız, SDK otomatik olarak okundu raporlarını gönderecektir. Bu yüzden reportRead() metodunu çağırmamalısınız. (Bu metod 5.0+ SDK versiyonlarında zaten mevcut değildir.)

Code Block
@Override
protected void onNewIntent(Intent intent) {
  

...

super.onNewIntent(intent);
  

...

if (intent.getExtras() != null) {
    

...

Message message = (Message) intent.getExtras().getSerializable("message");
    String url = 

...

message.getUrl();

...

    // 

...

Navigate 

...

to 

...

the 

...

corresponding page by using url above.
  }

...

}

- Eğer 5.0 versiyonun altında bir SDK versiyonu kullanıyorsanız okundu raporlarının panele yansıması için aşağıdaki gibi reportRead() metodunu çağırmalısınız.

Code Block
languagejava
@Override
protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  if (intent.getExtras() != null) {
    Message message 

...

= (Message) intent.getExtras().getSerializable("message");
    EuroMobileManager.getInstance().reportRead(intent.getExtras());
    

...

String url = message.getUrl();
    // Navigate to the corresponding page

...

 by using

...

 url above.
  }
}

Öneri

Eğer RMC’den kampanya gönderimlerinizde push bildirimi cihazınıza debug modda ulaşıyor, release modda ulaşmıyorsa, uygulamanızda pro-guard ile ilgili sorunlarınıza göz atın.

...

Euromessage Android SDK Diğer Özellikleri

https://relateddigital.atlassian.netnull/pages/createpage.action?spaceKey=RMCKBT&title=-&linkCreation=true&fromPageId=892633513

FCM ve HMS' nin RMC'ye Entegrasyonu

...