Brauche Hilfe beim Programmieren: Probleme mit der Implementierung des Google Application Licensing Service

  • Antworten:8
Sam Browder
  • Forum-Beiträge: 236

07.03.2013, 15:16:33 via Website

Ich versuche den Google Application Licensing Service in meine App einzubinden und richte mich dabei an die Anleitung, welche Google dafür zur Verfügung gestellt hat.
Die LicenseCheck Activity habe ich auch ohne Probleme nach dieser Anleitung hinbekommen - es werden von Eclipse auch keine Fehler erkannt:

1import android.os.Bundle;
2import android.app.Activity;
3import android.app.AlertDialog;
4import android.app.Dialog;
5import android.content.DialogInterface;
6import android.content.Intent;
7import android.net.Uri;
8import android.provider.Settings.Secure;
9import android.widget.Toast;
10import com.google.android.vending.licensing.AESObfuscator;
11import com.google.android.vending.licensing.LicenseChecker;
12import com.google.android.vending.licensing.LicenseCheckerCallback;
13import com.google.android.vending.licensing.ServerManagedPolicy;
14public class LicenseCheck extends Activity {
15 private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
16 public void allow(int reason) {
17 if (isFinishing()) {
18 return;
19 }
20 startMainActivity();
21 }
22 public void applicationError(int errorCode) {
23 if (isFinishing()) {
24 return;
25 }
26 toast("Error: " + errorCode);
27 startMainActivity();
28 }
29 public void dontAllow(int reason) {
30 if (isFinishing()) {
31 return;
32 }
33 showDialog(0);
34 }
35 }
36 private static final String BASE64_PUBLIC_KEY = "...Mein Code...";
37 private static final byte[] SALT = new byte[] {-90, 65, 70, -128, -103, -57, 74, -64, 51, 99, -95, -5, 100, 97, -35, -113, -14, 32, -64, 89};
38 private LicenseChecker mChecker;
39 private LicenseCheckerCallback mLicenseCheckerCallback;
40 private void doCheck() {
41 mChecker.checkAccess(mLicenseCheckerCallback);
42 }
43 @Override
44 public void onCreate(Bundle savedInstanceState) {
45 super.onCreate(savedInstanceState);
46 String deviceId = Secure.getString(getContentResolver(),
47 Secure.ANDROID_ID);
48 mLicenseCheckerCallback = new MyLicenseCheckerCallback();
49 mChecker = new LicenseChecker(this, new ServerManagedPolicy(this,
50 new AESObfuscator(SALT, getPackageName(), deviceId)),
51 BASE64_PUBLIC_KEY);
52 doCheck();
53 }
54 @Override
55 protected Dialog onCreateDialog(int id) {
56 return new AlertDialog.Builder(this)
57 .setTitle("Application Not Licensed")
58 .setCancelable(false)
59 .setMessage(
60 "This application is not licensed. Make sure you are connected to Internet. Please purchase it from Android Market")
61 .setPositiveButton("Buy App",
62 new DialogInterface.OnClickListener() {
63 public void onClick(DialogInterface dialog,
64 int which) {
65 Intent marketIntent = new Intent(
66 Intent.ACTION_VIEW,
67 Uri.parse("http://market.android.com/details?id="
68 + getPackageName()));
69 startActivity(marketIntent);
70 finish();
71 }
72 })
73 .setNegativeButton("Exit",
74 new DialogInterface.OnClickListener() {
75 public void onClick(DialogInterface dialog,
76 int which) {
77 finish();
78 }
79 }).create();
80 }
81 @Override
82 protected void onDestroy() {
83 super.onDestroy();
84 mChecker.onDestroy();
85 }
86 private void startMainActivity() {
87 startActivity(new Intent(this, MainActivity.class));
88 finish();
89 }
90 public void toast(String string) {
91 Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
92 }
93}
Das eigentliche Problem tritt dann bei der MainActivity auf
1public class MainActivity extends LicenseCheck {
2 @Override
3 protected void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 setContentView(R.layout.main);
6
7 doCheck();
8 }
und zwar kommt es bei
1protected void onCreate(Bundle savedInstanceState) {
und
1doCheck();
zu folgenden Fehlermeldungen:

und

Diese fordern mich auf, den Code in der LicenseCheck Activity (Stellen:
1public void onCreate(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
und
1private void doCheck() {
2 mChecker.checkAccess(mLicenseCheckerCallback);
3 }
) zu verändern. Ich gehe aber davon aus, dass man es nicht darf (Google gibt ja den Code so an, und nicht anders). Kann mir vielleicht jemand sagen, wieso denn die Fahler auftretet, und was ich jetzt tun Soll??? Bin für jede Hilfe Dankbar!

Antworten
impjor
  • Forum-Beiträge: 1.793

07.03.2013, 16:05:25 via App

Google gibt doch genau das an:
1@Override
2public void onCreate(Bundle savedInstanceState) {
3super.onCreate(savedInstanceState); ... // Call a wrapper method that initiates the license check
4doCheck();
5 ...
6}
7 ...
8private void doCheck() {
9...
10}

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Sam Browder
  • Forum-Beiträge: 236

07.03.2013, 16:26:50 via Website

Ja, das ist auch bei mir so - gehört aber zur LicenseCheck Activity. Die Fehler treten aber in der MainActivity auf:
1public class MainActivity extends LicenseCheck {
2 @Override
3 protected void onCreate(Bundle savedInstanceState) { // <-- wird als Fehler markiert
4 super.onCreate(savedInstanceState);
5 setContentView(R.layout.main);
6
7 doCheck(); // <-- wird als Fehler markiert
8 }
Zur Berichtigung der Fehler in der MainActivity schlägt Eclipse dann vor, diesen Code (aus der LicenseCheck Activity) zu
1protected void doCheck() {
2 ......
3 }
4@Override
5 protected void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7......
8 doCheck();
9 }
zu ändern. Das ist das Problem!!! Wenn ich die Fehler durch Eclipse berichtigen lasse, wir der Code dann nicht mehr mit dem von Google übereinstimmen. Denn dann wird in dem Code statt "public" und "private" in beiden Fällen "protected" verwendet.
Gruß

— geändert am 07.03.2013, 16:39:22

Antworten
Timo D.
  • Forum-Beiträge: 182

07.03.2013, 17:53:23 via Website

Wieso ist die onCreate Methode protected? Hast du Klassen in andere Packages ausgelagert? Eclipse sagt dir doch genau, was der Fehler ist. Also am besten einfach diesen Fehler beheben. Denn die Verzeichnisstruktur muss auch passen ;)

— geändert am 07.03.2013, 17:54:03

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free

Antworten
Sam Browder
  • Forum-Beiträge: 236

07.03.2013, 17:59:56 via Website

Bitte lesen Sie, was ich oben geschrieben habe.
Die onCreate Methode ist nicht protected (oben habe ich ja der ganzen Code geposted). Protected wird sie nur dann sein, wenn ich die "Fehler" behebe - das ist das, was Eclipse von mir will: von public ( und private bei doCheck) zu protected umwandeln. Wenn ich das aber so mache, weiss ich nicht, ob dann alles korrekt funktioniert.
Also jetzt alles noch Mal...
ich habe in meiner App ganz normal die MainActivity:
1public class MainActivity extends LicenseCheck {
2 @Override
3 protected void onCreate(Bundle savedInstanceState) { // <-- wird als Fehler markiert
4 super.onCreate(savedInstanceState);
5 setContentView(R.layout.main);
6doCheck(); // <-- wird als Fehler markiert
7 }
und dann habe ich zusätzlich die LicenseCheck Activity mit dem betroffenen Code:
1private void doCheck() {
2......
3 }
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7......
8 doCheck();
9 }
So, jetzt will Eclise durch die Fehleranzeigen in der MainActivity, in der LicenseCheck Activity, public bei onCreate und private bei doCheck zu protected umwandeln.
Ich hoffe, ich habe jetzt das Problem verständlicher beschrieben... :)

— geändert am 07.03.2013, 18:10:27

Antworten
Sam Browder
  • Forum-Beiträge: 236

08.03.2013, 13:04:36 via Website

Kann mir wirklich keiner weiterhelfen??? :(
Ich kann das ganze auch als einen Eclipse Projekt zur Verfügung stellen, wenn Ihr meine Fehlerbeschreibung nicht ganz nachvollziehen könnt.

— geändert am 08.03.2013, 13:06:50

Antworten
Sam Browder
  • Forum-Beiträge: 236

08.03.2013, 13:30:17 via Website

Hier ist das Projekt mit der License Implementierung. So könnt Ihr, die von mir beschriebenen Fehler besser nachvollziehen.
(Wenn Ihr euch es anschauen wollt, vergisst bitte nicht, eure eigene License Bibliothek (aus Android SDK) nach dem Projektimport in Eclipse, ins Projekt zu importieren.)

Antworten
TheEvilOne
  • Forum-Beiträge: 311

10.03.2013, 13:26:56 via App

Wenn ich die Woche Zeit finde schaue ich es mir mal an.

Antworten
Sam Browder
  • Forum-Beiträge: 236

10.03.2013, 13:28:10 via Website

Ok. Vielen Dank!!!

Antworten