2013-04-23 12 views
6

私はGoogle License Chekerをthe official instructionsと読みました。Androidライセンスアプリケーションが動作しませんか?

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.provider.Settings.Secure; 
import android.widget.Toast; 

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; 

public class Splash extends Activity { 
    MyLicenseCheckerCallback mLicenseCheckerCallback; 
    LicenseChecker mChecker; 
    byte[] SALT = new byte[] { -73, 95, 70, -126, -103, -57, 14, -46, 51, 88, -5, 
     -60, 77, -88, -63, -13, -1, 82, -4, 9 }; 
    //Handler mHandler; 
    String BASE64_PUBLIC_KEY="My base key"; 
    Context mContext; 
    IBinder serviceBinder; 
    String deviceId; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

     mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 
     deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); 
     // Construct the LicenseChecker with a policy. 
     mChecker = new LicenseChecker(this, 
      new ServerManagedPolicy(Splash.this, new AESObfuscator(SALT, 
       getPackageName(), deviceId)), BASE64_PUBLIC_KEY); 
     doCheck(); 
    } 

    private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 
     @Override 
     public void allow(int reason) { 
      // TODO Auto-generated method stub 
      if (isFinishing()) 
       return; // Don't update UI if Activity is finishing. 
      // Toast.makeText(Splash.this, "Success", Toast.LENGTH_LONG).show(); 
      Intent intent=new Intent(Splash.this,Main.class); 
      startActivity(intent); 
      finish(); 

      // Should allow user access. 
      // so do nothing 
     } 

     @Override 
     public void dontAllow(int reason) { 
      // TODO Auto-generated method stub 
      if (isFinishing()) 
       return; // Don't update UI if Activity is finishing. 
      // Toast.makeText(Splash.this, "Fail", Toast.LENGTH_LONG).show(); 
      createDialog(); 
     } 

     @Override 
     public void applicationError(int errorCode) { 
      // TODO Auto-generated method stub 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mChecker.onDestroy(); 
    } 

    private void doCheck() { 
     // mCheckLicenseButton.setEnabled(false); 
     setProgressBarIndeterminateVisibility(true); 
     /// mStatusText.setText(R.string.checking_license); 
     mChecker.checkAccess(mLicenseCheckerCallback); 
    } 

    public void createDialog(){ 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("PIRACY WARNING"); 
     builder.setMessage("A valid purchase for My App has not been detected. Your IP" 
      + " has been logged and all offenders will be reported to the authorities." 
      + " If you received this message in error, please contact Support."); 
     builder.setPositiveButton("Buy Now", new DialogInterface.OnClickListener() { 
      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); 
      } 
     }); 
     builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       finish(); 
      } 
     }); 
     AlertDialog dialog = builder.create(); 
     dialog.show(); 
    } 
} 

、ここで私はこれを実装した後、私はアプリを実行し、解除キーとのGoogle PlayデベロッパーコンソールでドラフトとしてアップロードされたAPKとし、それに署名

<supports-screens android:normalScreens="true" android:largeScreens="true" android:smallScreens="true" android:anyDensity="true" android:xlargeScreens="true" android:resizeable="true"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="com.android.vending.CHECK_LICENSE" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

を与えmenifest許可され、私は開発者コンソールの設定に3つのテストアカウントを追加しました。

私が読んで理解したように、テストアカウントをデバイスのメインアカウントとして、デバイスの残りの部分で実行する必要があるため、ダイアログを表示する必要があります。

私の場合、すべてのデバイスでうまくいきます。インターネットが接続されていないと、違法コピーについてのダイアログが表示され、接続されている場合、テストアカウントのdevies 。

答えて

1

最後に私はGoogleライセンスチェッカーの適切なテスト方法を発見しました。

私はそれがデバイスでテストアカウントでログインを持っていない場合を許諾応答で実行されますよりも、任意のデバイスでそのAPKをインストールする場合は、ドラフトと としてGoogle PlayデベロッパーコンソールでAPKをアップロードしています。

そして最後に、私はこの方法をテストしない私は、テストアカウントを追加し、私が実行されますアプリより LICENSED としてデベロッパーコンソールでライセンステスト応答を選択して、それが表示さよりも、私はまた、NOT_LICENSEDでデベロッパーコンソールで設定を変更した後テストアカウントをメインアカウントとして持つデバイスの違法コピーに関するダイアログ。

重要な注意:それは応答LICENSED beacuseで実行し、テストアカウントデバイス以外は、私がテストグーグルのライセンスのためにプレイstore.SoにドラフトとしてAPKをアップロードしている私たちは、で追加のみテストアカウントを考慮する必要がなければなりませんGoogle Playデベロッパーコンソール

+0

それは私のために働いていない....私を助けてください。私はあなたが言及したように、違法コピーのダイアログが表示されるたびに – user2592807

+0

Googleの開発者向けのテストコンソールにテスト用のgmailアカウントを追加する必要があります。また、デバイスには、そのアカウントをメインのGmailアカウントとして持っていなければなりません。ライセンステストレスポンスで言及したように、NOTLICENSEDやその他のオプションの代わりにLICENSEDを選択する必要があります。 – Khan

+0

私は「Error:(48、0)com.android.vending.CHECK_LICENSEの記述が無効です」というエラーが発生し続ける。万が一、誰かが理由を知っていますか?どうもありがとう。 – cjayem13

0

LVLは、メインアカウントだけでなく、追加したアカウントを持つすべてのデバイスで機能しています。デベロッパーコンソールに追加していないアカウントの携帯電話では機能しません。さらに、LVLはgoogle LVL -Serverでアプリを検証しようとします。インターネットに接続する必要があります。これは問題ありません。ライセンスを一度確認したいだけの場合は、共有設定に、チェックがすでに行われているなどのデータを保存する必要があります。したがって、次回のアプリ起動時に、アプリがただちに確認されれば、保存された共有設定で確認することができます。はいの場合はもう一度チェックしない場合はもう一度やり直してください。あなたはデベロッパーコンソールでライセンスをチェックする動作を設定することができます

、あなたはuはすでにすべての手順を行って上....

+0

私の場合、デベロッパーコンソールにアカウントが追加されていないデバイスでも動作します。アプリがすべての端末で動作しています。 – Khan

+0

よろしくお願いします。あなたは本当に、他のデバイスのテストアカウントがないことを本当に確信していますか?つまり、複数のアカウントを持つことは可能ですが、この端末にもテストアカウントがありますか? – Opiatefuchs

1

正常な応答、または例えば「未検証」応答などをシミュレートすることができます再度明確にチェックしてください:

1.check once ur's public key compare with the draft store public key. 
2.Give own salt 20 numbers. 
3.Give properly test accounts in the google play and same account 
    use in the device also. 
4.In google play u have to put licensed mode for application draft. 
5.check after some time because it will take some time to give valid results. 
6.finally verify the alert dialog conditions in application. 
7.clear the google play cache in ur mobile may be it will store the results. 
関連する問題