Lanjut ke konten
17 April 2012 / Jeffrey Hermanto Halimsetiawan

App Hub Submission Error “An update cannot support fewer languages than the previous app instance supported (1047)”

Ketika melakukan “Submit an update” pada aplikasi yang telah ter-publish pada akun App Hub dan melakukan pengunggahan ulang file XAP yang baru, saya sempat memperoleh pesan kesalahan sebagai berikut:

An update cannot support fewer languages than the previous app instance supported (1047)

App Submission Error

Ternyata pesan kesalahan ini dapat disebabkan oleh perbedaan dukungan bahasa pada versi terbaru aplikasi dengan versi yang telah ter-publish pada Windows Phone Marketplace. Sebagai contoh, versi sebelumnya dari suatu aplikasi hanya mendukung Bahasa Indonesia, sedangkan versi pembaruan dari aplikasi ternyata tidak lagi mendukung Bahasa Indonesia melainkan hanya Bahasa Inggris. App Hub akan secara otomatis mendeteksi dukungan bahasa yang tersimpan pada XAP resource file. Berikut adalah langkah-langkah untuk mengatur “Neutral Language” pada project Visual Studio dari aplikasi:

  1. Klik kanan pada project name di Solution Explorer, kemudian pilih ‘Properties
  2. Pada tab Application”, klik tombol “Assembly Information
  3. Ubah combo box Neutral Language seperti yang terlihat pada gambar berikut:

Set Neutral Language in Assembly Information

Solusi dari pesan kesalahan tersebut ada 2, yaitu:

  1. Membuat versi terbaru dari aplikasi tersebut yang mendukung beberapa bahasa dengan memanfaatkan Localization.
  2. Submit a new app” pada App Hub dengan versi terbaru aplikasi yang tidak lagi memiliki dukungan terhadap bahasa terdahulu. Ketika versi terbaru tersebut telah certified dan published, maka unpublished versi lama dari aplikasi tersebut. (Aplikasi akan memiliki application id yang baru)

Semoga bermanfaat!

10 April 2012 / Jeffrey Hermanto Halimsetiawan

Multiline TextBlock pada Silverlight for Windows Phone

Ada kalanya, kita perlu untuk menampilkan sebuah informasi kepada pengguna dalam beberapa baris pada sebuah. Lalu, bagaimana cara menampilkan Multiline Textblock melalui C# code? Berikut adalah langkah-langkahnya:

  1. Tambahkan sebuah TextBlock pada PhoneApplicationPage dengan drag & drop dan beri nama txbUnlockStatus.image
  2. Tambahkan kode berikut untuk membuat TextBlock terdiri dari 2 baris string.
    txbUnlockStatus.Text = string.Empty;
    Run r = new Run();
    r.Text = "Ghost Buster medal is unlocked";
    txbUnlockStatus.Inlines.Add(r);
    txbUnlockStatus.Inlines.Add(new LineBreak());
    r = new Run();
    r.Text = "Ghost Enthusiast medal is unlocked";
    txbUnlockStatus.Inlines.Add(r);
    

Selamat mencoba!

5 April 2012 / Jeffrey Hermanto Halimsetiawan

In-App Advertising dengan Inneractive Ad SDK v1.0.5 pada J2ME

Sebelumnya saya pernah menulis sebuah artikel berjudul “In-App Advertising dengan Inneractive pada J2ME”, Inneractive ternyata baru saja memperbarui InneractiveAdSDK-J2ME nya yang dirilis dengan versi 1.0.5 pada 8 Maret 2012. Salah satu kelebihan dari versi ini adalah developer memiliki kebebasan untuk menampilkan ads sesuai dengan look and feel pada aplikasi/game yang dikembangkan. Di versi sebelumnya, SDK tersebut hanya menyediakan method IASDK.displayAd() yang akan secara otomatis menampilkan sebuah ad pada Display. Pada versi terbarunya, SDK ini menyediakan sebuah API untuk memperoleh Banner Ad sesuai dengan standard MMA. Berikut adalah langkah-langkah untuk mengimplementasikan in-app advertising dengan SDK terbaru dari Inneractive pada J2ME:

  1. Mendaftar akun inneractive sebagai publisher pada tautan berikut: http://console.inner-active.com/iamp/publisher/register

    image

  2. Login ke akun inneractive dengan memasukkan username dan password pada tautan berikut: http://console.inner-active.com/iamp/auth/login

    image

  3. Klik tab ‘Add App

    image

  4. Pilih combo boxPlatform’ dengan pilihan ‘OVI’ lalu lengkapi isian lainnya yang tersedia.

    image

  5. Pada ‘Dashboard’, aplikasi yang baru saja dibuat akan muncul beserta ‘App ID’ dari aplikasi tersebut.

    image

  6. Klik tab ‘SDK’s’, lalu unduh inneractive SDK untuk J2ME.

    image

  7. Unzip file ‘inneractiveAdSDK-J2ME-v1.0.5.zip’ yang baru saja diunduh.
  8. Tambahkan ’inneractiveJ2MEAdSDK.jar’ pada ‘Library dan Resourceproject Netbeans yang telah dibuat.

    image

  9. Tambahkan beberapa JAD parameter berikut pada project Netbeans.

    IA-X-appID: IA_GameTest (App ID dapat dilihat pada tab ‘Dashboard’)

    image

  10. Tambahkan beberapa MIDlet Permission javax.microedition.io.Connector.http,javax.microedition.io.Connector.socket, javax.microedition.pim.ContactList.read, javax.microedition.io.Connector.sms, javax.wireless.messaging.sms.send pada kotak dialog ‘API Permission’:

    image

  11. Tambahkan potongan kode inner class berikut pada kelas yang merupakan turunan dari kelas MIDlet / Canvas. Method IADView.getBannerAdData() digunakan untuk melakukan request Banner Ad ke Inneractive dan akan mengembalikan return value bertipe Vector dimana indeks ke-0 adalah Image dan indeks ke-1 adalah string yang merupakan link dari Ad tersebut.
    class Worker extends Thread {
    
        boolean terminated = false;
        int mTask;
        PromotionalState mOwner;
    
        public Worker( PromotionalState owner ) {
            mOwner = owner;
        }
    
        synchronized public void run() {
    
            while (!terminated) {
                mTask = IDLE;
                try {
                    wait();
                }
                catch (InterruptedException ex) {}
    
                try {
                    switch (mTask) {
                        case CLICK_THE_BANNER:
                            if(null != Ad){
                                String clickURL = (String)Ad.elementAt(1);
                                if(null != clickURL && !clickURL.equals("")){
                                    boolean forceExit = MainMIDlet.instance.platformRequest( clickURL );
    
                                    System.out.println("platformRequest - the midlet should be close? " + forceExit);
    
                                    if(forceExit){
                                            MainMIDlet.quitApp();
                                    }
                                }
                            }
                            break;
    
                        case GET_BANNER_AD:
                            System.out.println("IADView.getBannerAd()" );
                            Ad = IADView.getBannerAdData(MainMIDlet.instance);
                            imgBanner = null;
                            if (null != Ad){
                                imgBanner = (Image)Ad.elementAt(0);
                            }
                            if (imgBanner != null){
                                Image.createImage(imgBanner);
                            }
                            else{
                                System.out.println("retImg is null");
                            }
                            break;
                    }
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                } catch (Throwable e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    
        synchronized public boolean doTask( int task ) {
            if (mTask != IDLE)
                return false;
            mTask = task;
            notify();
            return true;
        }
    }
    
  12. Berikutnya, kelas Worker tersebut harus di-instantiate dan Thread tersebut harus dijalankan dengan perintah berikut.
    worker = new Worker( this );
    worker.start();
  13. Tampilkan Image Banner Ad yang diperoleh
    if (imgBanner != null){
        g.drawImage(imgBanner, 12, 73 + yAnimation, 0);
    }
  14. Lakukan pengecekan apakah pengguna melakukan action pada Banner Ad tersebut, apabila pengguna menekan Banner Ad tersebut maka panggilah method berikut:
    worker.doTask( CLICK_THE_BANNER );

Berikut adalah contoh tampilan Banner Ad dari Inneractive:

image

Selamat mencoba!

30 Maret 2012 / Jeffrey Hermanto Halimsetiawan

Mengatasi ‘Resource limit exceeded for TCP client sockets’ Exception pada J2ME

Saat mengembangkan sebuah aplikasi J2ME yang melakukan koneksi ke server menggunakan TCP client sockets, suatu saat mungkin saja anda akan dihadapkan dengan permasalahan dimana muncul java.io.IOException: Resource limit exceeded for TCP client sockets. Penyebab dari permasalahan ini sangatlah, yaitu:

  • HttpConnection yang sudah di-open ke server, tidak di-close.
  • InputStream atau OutputStream yang berada pada Connection tersebut tidak di-close.

Jika Stream dan Connection tidak ditutup dengan benar, maka keduanya akan tetap terbuka. Semua perangkat mobile memiliki batas seberapa banyak koneksi yang dapat dibuka pada suatu waktu sehingga jika keduanya tetap dibiarkan dalam keadaan terbuka maka perangkat mobile tersebut akan kehabisan kuota untuk melakukan koneksi.

Caranya sangatlah mudah namun hal ini sangatlah krusial:

HttpConnection conn = (HttpConnection) Connector.open(url);
InputStream is = conn.openInputStream();
...
is.close();
conn.close();

Semoga bermanfaat!

29 Maret 2012 / Jeffrey Hermanto Halimsetiawan

Nokia Icon Builder

Seiring dengan kemunculan Symbian Anna yang sekarang juga telah diperbarui menjadi Symbian Belle, ada perubahan yang cukup signifikan pada bentuk icon aplikasinya yang tidak lagi berbentuk kotak. Nokia telah menyediakan tools online yang dapat digunakan untuk memudahkan developer untuk membuat icon Anna style tersebut yang dapat diakses pada tautan berikut: http://ovistorefb.com/iconcreator/

Tap Tap Ghost Icon dengan Nokia Icon Builder

Tap Tap Ghost Icon dengan Nokia Icon Builder

Langkah-langkahnya pun sangat mudah, pengguna hanya perlu mengunggah sebuah file .png yang ingin dijadikan icon. Kemudian, pengguna dapat melakukan perubahan ukuran dan menempatkan gambar pada frame sesuai selera. Jika hasil gambar yang ditampilkan telah sesuai dengan keinginan, cukup klik tombol “Save Icon” dan secara otomatis pengguna akan mendapatkan file icon bertipe png.

Selamat mencoba!

Rancang situs seperti ini dengan WordPress.com
Mulai