2013-04-23 11 views
6

मैंने the official instructions पढ़कर Google लाइसेंस चेकर लागू किया।एंड्रॉइड लाइसेंसिंग एप्लिकेशन काम नहीं करता है?

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(); 
    } 
} 

और यहाँ menifest अनुमति जो मैं दिया

<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"/> 

इस को लागू करने मैं में अनुप्रयोग चलाने और रिहाई कुंजी के साथ साथ इस पर हस्ताक्षर और में Google Play डेवलपर कंसोल अपलोड ड्राफ्ट के रूप में apk और इसके बाद है मैंने डेवलपर कंसोल की सेटिंग में 3 टेस्ट अकाउंट भी जोड़े हैं।

जैसा कि मैंने पढ़ा और समझ लिया है कि डिवाइस में चलाना आवश्यक है जिसमें डिवाइस में मुख्य खाता के रूप में परीक्षण खाता है और शेष डिवाइस को इसे संवाद दिखाना होगा।

लेकिन मेरे मामले में सभी उपकरणों में यह ठीक काम करेगा और यह बात कुछ अजीब स्थिति होती है यदि इंटरनेट डिस्कनेक्ट हो जाता है तो इससे चोरी हो जाती है और यदि यह टेस्ट अकाउंट डिवीज़ के बावजूद सभी डिवाइस में वर्स्क से जुड़ा हुआ है ।

उत्तर

1

अंततः मुझे Google लाइसेंस परीक्षक के परीक्षण का उचित तरीका मिला।

जैसा कि मैंने गूगल में apk ड्राफ्ट के रूप में डेवलपर कंसोल खेलने अपलोड की गई और अगर मैं तुलना में यह प्रतिक्रिया लायसेंस यदि डिवाइस में परीक्षण खाते के साथ लॉगिन होने नहीं कर रहा है के साथ चलेंगे किसी भी उपकरण में है कि apk स्थापित करें।

और अंत में मैं इस तरह का परीक्षण करते हैं मैं परीक्षण खाते को जोड़ा और मैं डेवलपर कंसोल में लाइसेंस परीक्षण प्रतिसादके रूप में एप्लिकेशन चलेंगे से लायसेंस का चयन करें और मैं भी NOT_LICENSED साथ डेवलपर कंसोल में सेटिंग बदल से यह पता चलता है के बाद उपकरण है जो मुख्य खाते के रूप में परीक्षण खाते होने में चोरी के बारे में संवाद।

महत्वपूर्ण नोट: और अन्य परीक्षण खाते उपकरणों की तुलना में यह प्रतिक्रिया लायसेंस किए क्योंकि मैं परीक्षण गूगल लाइसेंस हम विचार करने के लिए केवल परीक्षण खाते में जोड़ा होना आवश्यक है के लिए खेलने store.So में APK अपलोड ड्राफ्ट के रूप में है के साथ चलाने Google Play डेवलपर कंसोल

+0

यह मेरे लिए काम नहीं कर रहा है .... कृपया मेरी मदद करें। मैंने आपके जैसा उल्लेख किया था, लेकिन प्रत्येक बार समुद्री डाकू संवाद – user2592807

+0

पर पॉप अप करता है, आपको Google play डेवलपर कंसोल में परीक्षण जीमेल खाता जोड़ना होगा और डिवाइस में आपके पास यह खाता मुख्य जीमेल अकाउंट के रूप में होना चाहिए जिसका उपयोग प्ले स्टोर से ऐप्स डाउनलोड करने के लिए किया जाता है। जैसा कि मैंने लाइसेंस टेस्ट रिस्पांस के लिए उल्लेख किया है, आपको अधिसूचना या किसी अन्य विकल्प के बजाय LICENSED चुनने की आवश्यकता है। – Khan

+0

मुझे त्रुटि मिल रही है, "त्रुटि: (48, 0) विवरण com.android.vending.CHECK_LICENSE अमान्य है"। कोई मौका जानता है कि क्यों? बहुत धन्यवाद। – cjayem13

0

LVL खातों जुड़ने पर आपको न केवल मुख्य खाते के साथ सभी उपकरणों पर काम कर रहा है। यह उस खाते के साथ फ़ोन पर काम नहीं करना चाहिए जिसे आपने डेवलपर कंसोल में नहीं जोड़ा है। यहां तक ​​कि, एलवीएल आपके ऐप को Google एलवीएल-सर्वर के साथ सत्यापित करने का प्रयास करता है, इसलिए आपको इंटरनेट कनेक्शन की आवश्यकता है, यह ठीक है। यदि आप केवल एक बार लाइसेंस जांचना चाहते हैं, तो आपको साझा प्राथमिकताओं में उदाहरण के लिए कुछ डेटा सहेजना होगा, चेक पहले ही हो चुका है। तो, अगली बार एप्लिकेशन शुरू होता है, तो आप इन बचाया साझा प्राथमिकताएं स्पष्ट करते हुए, की जांच कर सकता है, तो अनुप्रयोग सिर्फ सत्यापित है। यदि हां, तो फिर से जांच न करें, यदि नहीं, तो इसे फिर से प्रयास करें।

आप डेवलपर कंसोल में लाइसेंस की जाँच के व्यवहार सेट कर सकते हैं, आप इतने पर एक सामान्य प्रतिक्रिया अनुकरण कर सकते हैं, या उदाहरण के लिए एक "सत्यापित नहीं" प्रतिक्रिया और ....

+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. 
संबंधित मुद्दे