2012-06-20 2 views
0

애플리케이션 라이센스 구현은 아주 간단하지만 예제 코드는 위젯이 아닌 완전한 Android 애플리케이션 용으로 설계된 것처럼 보입니다.Android AppWidget에 대한 라이센스 서비스 구현

마찬가지로 애플리케이션에서 스플래시 화면 또는 기본 활동에 라이센스 코드를 추가하고 사용자가 허용되지 않으면 라이센스를 완료하고 애플리케이션을 사용할 수 없게됩니다.

마찬가지로 위젯에서 누군가가 라이선스 코드를 추가 할 위치와 사용자가 허용되지 않는 경우 수행 할 조치에 대한 단서를 던질 수 있습니까?

누군가가 예를 가리킬 수 있다면 좋을 것입니다.

미리 감사드립니다.

답변

0

위젯에 구성 활동을 추가하고 여기에서 라이센스 논리를 구현하십시오. 긍정적 인 결과를 얻지 못하면 위젯을 추가하지 마십시오. 위젯 업데이트 서비스에서 정기 라이센스 검사를 수행 할 수 있습니다.

0

Nikolay가 구성 활동을 가리켜 주셔서 감사합니다. 이것이 라이센스 서비스 구현이 실제로 이루어지는 곳입니다. 다음은 라이선스 서비스 구현을 통한 구성 활동입니다.

package com.mobisys.android.contactwidget; 

import com.google.android.vending.licensing.AESObfuscator; 
import com.google.android.vending.licensing.LicenseChecker; 
import com.google.android.vending.licensing.LicenseCheckerCallback; 
import com.google.android.vending.licensing.ServerManagedPolicy; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.appwidget.AppWidgetManager; 
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; 

public class ConfigActivity extends Activity { 
    private LicenseChecker mChecker; 
    private LicenseCheckerCallback mLicenseCheckerCallback; 
    public static final String BASE64_PUBLIC_KEY = "PUBLIC KEY OF YOUR ACCOUNT"; 
    public static final byte[] SALT = new byte[] { 
    -120, 30, 50, -20, 33, -100, 32, -90, -98, 104, 12, 
    110, 78, -34, 105, 21, 62, 35, -12, 97 
    }; 

    private AESObfuscator mObsfuscator; 
    private String android_id; 
    ProgressDialog pg; 
    int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; 

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

     setResult(RESULT_CANCELED); 
     Intent intent = getIntent(); 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      mAppWidgetId = extras.getInt(
        AppWidgetManager.EXTRA_APPWIDGET_ID, 
        AppWidgetManager.INVALID_APPWIDGET_ID); 
     } 

     // If they gave us an intent without the widget id, just bail. 
     if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { 
      finish(); 
     } 

     pg=ProgressDialog.show(this, "Verification", "Verifying purchase"); 
     pg.show(); 
     android_id = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID); 
     mObsfuscator = new AESObfuscator(SALT, getPackageName(), android_id); 
     ServerManagedPolicy serverPolicy = new ServerManagedPolicy(this,mObsfuscator); 

     mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 
     mChecker = new LicenseChecker(
      this, serverPolicy, 
      BASE64_PUBLIC_KEY // Your public licensing key. 
      ); 
     mChecker.checkAccess(mLicenseCheckerCallback); 
    } 

    private void onAllow(){ 
     Intent resultValue = new Intent(); 
     resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); 
     setResult(RESULT_OK, resultValue); 
     finish(); 
    } 

    private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 
     @Override 
     public void allow(int reason) { 
      if(pg!=null&&pg.isShowing()) 
       pg.dismiss(); 
      if (isFinishing()) { 
       // Don't update UI if Activity is finishing. 
       return; 
      } 
      runOnUiThread(new Runnable(){ 

       @Override 
       public void run() { 
        onAllow(); 
       } 

      }); 
     } 

     @Override 
     public void dontAllow(int reason) { 
      if(pg!=null&&pg.isShowing()) 
       pg.dismiss(); 

      if (isFinishing()) { 
       // Don't update UI if Activity is finishing. 
       return; 
      } 

      showDialog(0); 
     } 

     @Override 
     public void applicationError(int errorCode) { 
      Toast.makeText(ConfigActivity.this, "Application Error:"+errorCode, Toast.LENGTH_SHORT).show(); 
      if(pg!=null&&pg.isShowing()) 
       pg.dismiss(); 
      if (isFinishing()) return; 

      finish(); 
     } 
    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     // We have only one dialog. 
     AlertDialog.Builder builder=new AlertDialog.Builder(this) 
     .setTitle("Application Not Licensed") 
     .setCancelable(false) 
     .setMessage("This application is not licensed. Please purchase it from Google play") 
     .setPositiveButton("Buy App", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog,int which) { 
       Intent marketIntent = new Intent(
        Intent.ACTION_VIEW, 
        Uri.parse("market://details?id=" + getPackageName())); 
        startActivity(marketIntent); 
        finish(); 
       }}) 
       .setNegativeButton("Exit",new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         finish(); 
       } 
      } 
     ); 

     return builder.create(); 
    } 

}