6

Właśnie kończę moją aplikację na Androida. Teraz chcę przesłać moją aplikację na rynek Android dla płatnej aplikacji. Dla że przeczytałem dokument z Androidem strony:Jak licencjonować moją aplikację na Androida?

android licensing

Ale chcę zobaczyć demo lub dowolny projekt, który zrobił taką licencji. Widziałem demo na stronie deweloperów Androida. Ale tam jest podany przewodnik i chcę zaimplementować ten kod do mymainactivity projektu. W mymainactivity na początku aplikacji znajduje się ekran powitalny i ustawiłem dla niego jeden program obsługi. Dlatego potrzebuję przykładu, aby zobaczyć, jak wdrożyć licencję w naszej własnej aplikacji.

Kolejna sprawa, o której chciałbym wiedzieć, czy wprowadzenie licencji na Androida jest obowiązkowe w celu przesłania płatnej aplikacji na rynek Android?

Czy można ustawić aplikację jako płatną bez wdrażania licencji na aplikację na Androida?
Jeśli tak, to są dostępne dema, proszę mi podać link do tego.

+0

zobacz moje pytanie tutaj chciałbym, żeby ta sama funkcjonalność i kod działalności również zostały tam wklejone http://stackoverflow.com/questions/16169622/android-licensing-application-notwork-notwork – Khan

Odpowiedz

19

Zanim zaczniesz, sprawi, że obejmowały bibliotekę licencji w projekcie, jak wyjaśniono tutaj: Licensing Your Applications | Android Developers

  1. Dodać nowe aktywności w projekcie o nazwie LicenseCheck.java

  2. Wklej następujący w tej aktywności:

    import android.app.Activity; 
    import android.app.AlertDialog; 
    import android.app.Dialog; 
    import android.content.DialogInterface; 
    import android.content.Intent; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.provider.Settings.Secure; 
    import android.widget.Toast; 
    import com.android.vending.licensing.AESObfuscator; 
    import com.android.vending.licensing.LicenseChecker; 
    import com.android.vending.licensing.LicenseCheckerCallback; 
    import com.android.vending.licensing.ServerManagedPolicy; 
    
    /** 
    * NOTES ON USING THIS LICENSE FILE IN YOUR APPLICATION: 
    * 1. Define the package 
    * of you application above 
    * 2. Be sure your public key is set properly @BASE64_PUBLIC_KEY 
    * 3. Change your SALT using random digits 
    * 4. Under AllowAccess, Add your previously used MainActivity 
    * 5. Add this activity to 
    * your manifest and set intent filters to MAIN and LAUNCHER 
    * 6. Remove Intent Filters from previous main activity 
    */ 
    public class LicenseCheck extends Activity { 
    private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 
    @Override 
    public void allow() { 
         if (isFinishing()) { 
             // Don't update UI if Activity is finishing. 
             return; 
    } 
    // Should allow user access. 
    startMainActivity(); 
    
          } 
    
    @Override 
    public void applicationError(ApplicationErrorCode errorCode) { 
        if (isFinishing()) { 
         // Don't update UI if Activity is finishing. 
         return; 
        } 
        // This is a polite way of saying the developer made a mistake 
        // while setting up or calling the license checker library. 
        // Please examine the error code and fix the error. 
        toast("Error: " + errorCode.name()); 
        startMainActivity(); 
    
    } 
    
    @Override 
    public void dontAllow() { 
        if (isFinishing()) { 
         // Don't update UI if Activity is finishing. 
         return; 
        } 
    
        // Should not allow access. In most cases, the app should assume 
        // the user has access unless it encounters this. If it does, 
        // the app should inform the user of their unlicensed ways 
        // and then either shut down the app or limit the user to a 
        // restricted set of features. 
        // In this example, we show a dialog that takes the user to Market. 
        showDialog(0); 
    } 
    } 
    private static final String BASE64_PUBLIC_KEY = "PLACE YOUR BASE KEY FROM GOOGLE HERE"; 
    private static final byte[] SALT = new byte[] { INPUT 20 RANDOM INTEGERS HERE }; 
    private LicenseChecker mChecker; 
    
    // A handler on the UI thread. 
    
    private LicenseCheckerCallback mLicenseCheckerCallback; 
    private void doCheck() { 
         mChecker.checkAccess(mLicenseCheckerCallback); 
    } 
    
    @Override 
        public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    
    // Try to use more data here. ANDROID_ID is a single point of attack. 
    String deviceId = Secure.getString(getContentResolver(), 
         Secure.ANDROID_ID); 
    
    // Library calls this when it's done. 
    mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 
    // Construct the LicenseChecker with a policy. 
    mChecker = new LicenseChecker(this, new ServerManagedPolicy(this, 
         new AESObfuscator(SALT, getPackageName(), deviceId)), 
         BASE64_PUBLIC_KEY); 
         doCheck(); 
        } 
    
    @Override 
        protected Dialog onCreateDialog(int id) { 
    // We have only one dialog. 
    return new AlertDialog.Builder(this) 
         .setTitle("Application Not Licensed") 
         .setCancelable(false) 
         .setMessage(
           "This application is not licensed. Please purchase it from Android Market") 
         .setPositiveButton("Buy App", 
           new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(DialogInterface dialog, 
              int which) { 
             Intent marketIntent = new Intent(
               Intent.ACTION_VIEW, 
               Uri.parse("http://market.android.com/details?id=" 
                 + getPackageName())); 
             startActivity(marketIntent); 
             finish(); 
            } 
           }) 
         .setNegativeButton("Exit", 
           new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(DialogInterface dialog, 
              int which) { 
             finish(); 
            } 
           }).create(); 
        } 
        @Override 
        protected void onDestroy() { 
    super.onDestroy(); 
    mChecker.onDestroy(); 
        } 
    
        private void startMainActivity() { 
    startActivity(new Intent(this, MainActivity.class)); //REPLACE MainActivity.class WITH YOUR APPS ORIGINAL LAUNCH ACTIVITY 
    finish(); 
        } 
    
        public void toast(String string) { 
    Toast.makeText(this, string, Toast.LENGTH_SHORT).show(); 
        } 
    
    } 
    
  3. Zmień klucz podstawowy na jeden google d, Umieść 20 losowych liczb całkowitych w SALT, Zmień MainActivity.class na Main Activity swojej aplikacji.

  4. Aktualizacja pliku manifestu z nową działalnością

    <!-- Old Launch Activity Here --> 
    <activity android:label="@string/app_name" android:name=".MainActivity" /> 
    <!-- New License Launch Activity with all intent filters from your previous main activity --> 
    <!-- Translucent.NoTitleBar is so that this activity is never shown to the user -->  
    <activity android:label="@string/app_name" android:name=".LicenseCheck" 
        android:theme="@android:style/Theme.Translucent.NoTitleBar"> 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 
         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity> 
    
  5. Dodaj zezwolenia w oczywisty Tag ale nie w tagu aplikacji

    <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> 
    

skończysz! Upewnij się, że przetestowałeś go przed publikacją. :) :)

+0

błąd "Błąd: (48, 0) Opis com.android.vending.CHECK_LICENSE jest nieprawidłowy". Czy wiesz, dlaczego? Wielkie dzięki. – cjayem13

Powiązane problemy