Başlangıç

Başlangıç

Genel Açıklama

Uygulama üzerinden sdk’nın başlatılması ve multinet cüzdan seçme işleminin gerçekleşmesi için SDK’nın start metodu kullanılmalıdır.

Bu metod ile kullanıcı sdk’nın ekranlarına yönlendirilir. Kullanıcı, sdk ekranları üzerinden multinet hesabına giriş yapabilir ya da yeni hesap oluşturabilir.

  • Giriş başarılı ise cüzdanlarının listelendiği sayfaya yönlendirilir. Buradan kullanıcı yeni cüzdan ekleme işlemi veya cüzdan eşleştirme işlemi yapabilir.

  • Yeni hesap oluşturma seçildiyse kullanıcı “Kayıt Ol” ekranına yönlendirilir. Kullanıcı buradaki gerekli bilgileri doldurarak kayıt olma işlemini tamamlayabilir. Bu ekrandaki değerlerin dolu gelmesi isteniyorsa UserPreset ile bu değerler sağlanabilir. Kayıt olduktan sonra cüzdan ekleme sayfasına yönlendirilir. Cüzdan ekleme sonrasında ise cüzdan listeleme sayfası görüntülenir.

Cüzdan listeleme sayfasında “Cüzdan Eşleştirme” aksiyonu ile sdk ekranları kapanır ve uygulamaya eşleştirilen cüzdana ait bir token (walletToken) bilgisi -BroadcastReceiver ve MultiPaySdkListener kullanılarak- dönülür.

Entegrasyonu yapan taraf bu walletToken bilgisini güvenli bir şekilde saklamalıdır. Bu token cüzdan ile ilgili işlemlerin tamamında kullanılacaktır.

Cüzdan değiştirme işlemi için de start metodu kullanılmalıdır. Bu işlem için metod parametrelerine ilave olarak daha önceden seçilmiş cüzdanın token bilgisi (walletToken) gönderilmelidir.

Tüm akış için gerekli kod entegrasyonu aşağıda örneklendirilmiştir.

Start metodu

  • // Login üzerinden cüzdan seçimi yapılması için örnek
    MultiPaySdk.start(context = this, walletToken = null, userPreset = null)
    // Varolan cüzdanın değişimi için örnek
    MultiPaySdk.start(context = this, walletToken = "sampleWalletToken", userPreset = null)
    // Register işleminde alanların dolu gelmesi için örnek
    val testPreset = UserPreset(
        name = "John",
        surname = "Doe",
        email = "john.doe@test.com",
        gsm = "5070000000"
    )
    MultiPaySdk.start(context = this, walletToken = "sampleWalletToken", userPreset = testPreset)
  • // Login üzerinden cüzdan seçimi yapılması için örnek
    MultiPaySdk.start(this, null);
    // Varolan cüzdanın değişimi için örnek
    MultiPaySdk.start(this, "sampleWalletToken");
    // Register işleminde alanların dolu gelmesi için örnek
    UserPreset testPreset = UserPreset(
        "John",
        "Doe",
        "john.doe@test.com",
        "5070000000"
    );
    MultiPaySdk.start(this, "sampleWalletToken", testPreset);

Methodun değişkenleri:

  • context : Activity veya Fragment’a ait context değeri

  • walletToken : Kullanıcı sdk üzerinden hiç cüzdan seçimi yapmamış ise ya da daha önceden seçtiği cüzdanının eşleştirmesini kaldırmış ise bu değer null olarak atanır. Aksi durumlarda mevcut walletToken değeri girilir.

  • userPreset (Opsiyonel): Kullanıcı kayıt olmak istediğinde UserPreset içerisinde tanımlanan değerler “Kayıt Ol” sayfası üzerinde otomatik olarak doldurulur. Bu özellik kullanılmak istenmiyorsa null olarak atanmalıdır. Aksi durumlarda UserPreset objesi oluşturularak verilir.

WalletToken bilgisinin alınması

Sdk üzerinden cüzdan eşleştirme tamamlandıktan sonra BroadcastReceiver ve MultiPaySdkListener ile uygulamaya token bilgisi dönülür.

Bunun için uygulama tarafında ilk olarak MultiPaySdkListener tanımı yapılmalıdır.

  • private var multiPaySdkListener = object : MultiPaySdkListener {
        override fun walletTokenReceived(walletToken: String) {
            Log.i(TAG, "walletToken: $walletToken")
        }
    
        override fun serviceErrorOccurred(error: String?, code: Int) {
            Log.i(TAG, "error = $error code = $code")
        }
    
        override fun multiPaySdkClosed() {}
    }
  • MultiPaySdkListener multiPaySdkListener = new MultiPaySdkListener() {
        @Override
        public void walletTokenReceived(@NotNull String walletToken) {
            Log.i(TAG, "walletToken = "+walletToken);
        }
    
        @Override
        public void serviceErrorOccurred(@org.jetbrains.annotations.Nullable String error, int code) {
            Log.i(TAG, "error code = "+code+"\nerror = "+error);
        }
    
        @Override
        public void multiPaySdkClosed() {
    
        }
    
        @Override
        public void walletInfoReceived(@NotNull WalletResponse walletResponse) {
    
        }
    
        @Override
        public void confirmPaymentReceived(@NotNull String sign, @NotNull String transferServerRefNo) {
    
        }
    
        @Override
        public void unSelectWalletReceived(@org.jetbrains.annotations.Nullable UnselectWalletResponse unSelectWallet) {
    
        }
    
        @Override
        public void rollbackPaymentReceived(@NotNull String sign, @NotNull String rollbackServerReferenceNumber) {
    
        }
    };

Ardından MultiPaySdkReceiver sınıfından türetilmiş bir BroadcastReceiver oluşturulmalıdır. Ve daha önceden oluşturmuş olduğumuz MultiPaySdkListener objesi bu sınıfa parametre olarak gönderilmelidir.

  • import com.inventiv.multipaysdk.MultiPaySdkListener
    import com.inventiv.multipaysdk.receiver.MultiPaySdkReceiver
    
    class SampleReceiver(
        private val multipaySdkListener: MultiPaySdkListener
    ) : MultiPaySdkReceiver() {
    
        override fun onWalletTokenReceived(walletToken: String) {
            multipaySdkListener.walletTokenReceived(walletToken)
        }
    
        override fun sdkClosed() {
            multipaySdkListener.multiPaySdkClosed()
        }
    }
  • import com.inventiv.multipaysdk.MultiPaySdkListener;
    import com.inventiv.multipaysdk.receiver.MultiPaySdkReceiver;
    
    import org.jetbrains.annotations.NotNull;
    
    public class SampleReceiver extends MultiPaySdkReceiver {
    
        private MultiPaySdkListener multiPaySdkListener;
        
        public SampleReceiver(MultiPaySdkListener multiPaySdkListener) {
            this.multiPaySdkListener = multiPaySdkListener;
        }
    
        @Override
        protected void onWalletTokenReceived(@NotNull String walletToken) {
            multiPaySdkListener.walletTokenReceived(walletToken);
        }
    
        @Override
        protected void sdkClosed() {
            multiPaySdkListener.multiPaySdkClosed();
        }
    }

Son olarak tanımlamış olduğumuz BroadcastReceiver’ı kullanacağımız Activity veya Fragment tarafında initialize etmemiz gerekmektedir.

BroadcastReceiver bağlantısı için Localbroadcastmanager kullanılır.

  • val sampleReceiver = SampleReceiver(multiPaySdkListener!!)
    val intentFilter = IntentFilter()
    intentFilter.addAction("com.inventiv.multipaysdk.intent.TOKEN_RECEIVED")
    intentFilter.addAction("com.inventiv.multipaysdk.intent.SDK_CLOSED")
    LocalBroadcastManager.getInstance(this).registerReceiver(sampleReceiver, intentFilter)
  • SampleReceiver sampleReceiver = new SampleReceiver(multiPaySdkListener);
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.inventiv.multipaysdk.intent.TOKEN_RECEIVED");
    intentFilter.addAction("com.inventiv.multipaysdk.intent.SDK_CLOSED");
    LocalBroadcastManager.getInstance(this).registerReceiver(sampleReceiver, intentFilter);

Bu tanımlamaların ardından sdk üzerinden eşleştirilen cüzdana ait walletToken bilgisi, uygulamada oluşturduğumuz MultiPaySdkListener objesi altındaki walletTokenReceived callback’inin tetiklenmesi ile elde edilmiş olacaktır.

Not : Oluşabilecek memory leak’lerin engellenmesi için Activity ya da Fragment’ın sonlanması sırasında BroadcastReceiver ve MultiPaySdkListener değişkenleri temizlenmelidir.

  • override fun onDestroy() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(sampleReceiver)
        multiPaySdkListener = null
        super.onDestroy()
    }
  • @Override
    protected void onDestroy() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(sampleReceiver);
        multiPaySdkListener = null;
        super.onDestroy();
    }