Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.71
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
#1

Платная версия приложения - Android

13.12.2012, 17:06. Просмотров 5392. Ответов 51
Метки нет (Все метки)

Хочу сделать платную версию приложения (отсутствие рекламы), как правильно это сделать? Как на основе существующего проекта сделать новый. Подскажите пожалуйста. Спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 17:06     Платная версия приложения
Посмотрите здесь:

Android Ошибка при вызове приложения из другого приложения
Android Новая версия Eclipse
Планшетная версия приложения Android
Версия SDK в Android Studio Android
Android Приложение как мобильная версия сайта
Android Из приложения А проверить наличие установленного на устройстве приложения В
Android Пробная версия приложения на 2 часа, после которого оно самоудалится
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
08.12.2013, 21:25     Платная версия приложения #41
Цитата Сообщение от Darth_Revan Посмотреть сообщение
!Какие исправления в коде нужно сделать ? Можешь показать?
Если вы про код пользователя Suvitruf - там, собственно ни каких исправлений не требуется.
Надо понимать, что этот метод для тех кто создает layout программно, а не в конструкторе xml.
Напишите что сделали и что не получилось
Darth_Revan
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 5
08.12.2013, 22:37     Платная версия приложения #42
Цитата Сообщение от NOSC Посмотреть сообщение
Коллеги! Нашел вот такой способ http://suvitruf.ru/2013/11/15/3362/
По крайней мере по примеру смог сделать однооконное приложение, которое показывало рекламу и позволяло вызвать диалог покупки.
Но проверить полноценно не удалось, в реальном приложение не заработало.
Посмотрите, может кто сможет понять и разжевать.

Что сделал я.
В моем приложении есть заставка SplashScreen, в него я пытался засунуть метод проверки покупок. Оценить не удалось, но рекламу на этом экране показывать стало, по клику кнопки предложил совершить покупку.

Как я хочу это осуществить.
1. в SpalshScreen проверка на совершенные покупки
2. в каждом классе активити
Java
1
AdsControllerBase ads = new AdMobController(this, layout);
для вызова рекламного банера
3. в каждой активити кнопка вызывающая диалог
Java
1
2
3
4
5
6
7
8
9
10
11
private void buy() {
        if (!PreferencesHelper.isAdsDisabled()) {
            /*
             * для безопасности сгенерьте payload для верификации. В данном
             * примере просто пустая строка юзается. Но в реальном приложение
             * подходить к этому шагу с умом.
             */
            String payload = "";
            mHelper.launchPurchaseFlow(this, SKU_ADS_DISABLE, RC_REQUEST,
                    mPurchaseFinishedListener, payload);
        }
в итоге не получилось - куча ошибок, кот подтер до исходного состояния и пытаюсь сделать по другому.
Пользовался тем же способом . сделал всё как сказано в первой Activity работает реклама и покупка работает, но во всех других Activity в которых есть (прописана AdsControllerBase ads; ads = new AdMobController(this, layout); ) реклама.при запуске которых либо вылетает ошибка либо реклама не отображается
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
08.12.2013, 22:47     Платная версия приложения #43
Цитата Сообщение от Darth_Revan Посмотреть сообщение
Пользовался тем же способом . сделал всё как сказано в первой Activity работает реклама и покупка работает, но во всех других Activity в которых есть (прописана AdsControllerBase ads; ads = new AdMobController(this, layout); ) реклама.при запуске которых либо вылетает ошибка либо реклама не отображается
Покажите код целиком той активити где есть проблемы.
Darth_Revan
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 5
08.12.2013, 23:14     Платная версия приложения #44
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class GlsAct extends Activity {
 
    private WebView browser;
    private String androidETName;
    RelativeLayout layout;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
        this.setTitle("KGT");
        androidETName = "KGT";
        AdsControllerBase ads = new AdMobController(this, layout);
        browser = (WebView) findViewById(R.id.mywebView);
        browser.getSettings().setJavaScriptEnabled(true);
        browser.getSettings().setBuiltInZoomControls(true);
        browser.setWebChromeClient(new WebChromeClient());
        browser.loadUrl("file:///android_asset/html/gls.html");
        browser.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_UP:
                    if (!v.hasFocus()) {
                        v.requestFocus();
                    }
                    break;
                }
                return false;
            }
 
        });
    
        }
    }
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
09.12.2013, 10:07     Платная версия приложения #45
Цитата Сообщение от Darth_Revan Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
public class GlsAct extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
........
        }
    }
Так не будет показывать, вот так надо:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
public class AnatomyActivity extends Activity {
    
    static final String SKU_ADS_DISABLE = "id встроеной покупки";
    public static final String BASE64_PUBLIC_KEY = публичный ключик";
    private static final String TAG = "Ваш таг";
    static final int RC_REQUEST = 10001;
    
    IabHelper mHelper; //обязательно
    AdsControllerBase ads; //обязательно
    public Context context; //обязательно
    RelativeLayout layout; //обязательно
    тут перечислите все нужные лайауты и виджеты
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreferencesHelper.loadSettings(this);
//      здесь Ваш код 
        
        context = this;
        billingInit();
        ads = new AdMobController(this, layout);
        setContentView(layout);
        ads.show(!PreferencesHelper.isAdsDisabled());
        layout.setBackgroundResource(R.drawable.anatomiya);
        
        
}
    private void billingInit() {
        mHelper = new IabHelper(this, BASE64_PUBLIC_KEY);
 
        // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ (пїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ false)
        mHelper.enableDebugLogging(true);
 
        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    return;
                }
 
                
                mHelper.queryInventoryAsync(mGotInventoryListener);
            }
        });
    }
    IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
        private static final String TAG = "QueryInventoryFinishedListener";
 
        public void onQueryInventoryFinished(IabResult result,
                Inventory inventory) {
            LOG.d(TAG, "Query inventory finished.");
            if (result.isFailure()) {
                LOG.d(TAG, "Failed to query inventory: " + result);
                return;
            }
 
            LOG.d(TAG, "Query inventory was successful.");
 
            Purchase purchase = inventory.getPurchase(SKU_ADS_DISABLE);
            PreferencesHelper.savePurchase(context,
                    PreferencesHelper.Purchase.DISABLE_ADS, purchase != null
                            && verifyDeveloperPayload(purchase));
            ads.show(!PreferencesHelper.isAdsDisabled());
 
        }
    };
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 
        // Pass on the activity result to the helper for handling
        if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
            // not handled, so handle it ourselves (here's where you'd
            // perform any handling of activity results not related to in-app
            // billing...
            super.onActivityResult(requestCode, resultCode, data);
        } else {
            LOG.d(TAG, "onActivityResult handled by IABUtil.");
        }
    }
 
    /** Verifies the developer payload of a purchase. */
    boolean verifyDeveloperPayload(Purchase p) {
        return true;
    }
 
    // пїЅпїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
        public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
            LOG.d(TAG, "Purchase finished: " + result + ", purchase: "
                    + purchase);
            if (result.isFailure()) {
                return;
            }
            if (!verifyDeveloperPayload(purchase)) {
                return;
            }
 
            LOG.d(TAG, "Purchase successful.");
 
            if (purchase.getSku().equals(SKU_ADS_DISABLE)) {
 
                LOG.d(TAG, "Purchase for disabling ads done. Congratulating user.");
                Toast.makeText(getApplicationContext(), "Purchase for disabling ads done.", Toast.LENGTH_SHORT);
                // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ
                PreferencesHelper.savePurchase(context, PreferencesHelper.Purchase.DISABLE_ADS, true);
                // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ
                ads.show(!PreferencesHelper.isAdsDisabled());
            }
 
        }
    };
 
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (ads != null)
            ads.onDestroy();
 
        if (mHelper != null)
            mHelper.dispose();
        mHelper = null;
 
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        if (ads != null)
            ads.onResume();
 
    }
 
    @Override
    protected void onPause() {
        super.onPause();
 
    }
 
    @Override
    protected void onStart() {
        super.onStart();
 
        if (ads != null)
            ads.onStart();
 
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        if (ads != null)
            ads.onStop();
 
    }
    
}
Поскольку у меня покупку можно только с одного экрана сделать, то тут метода buy() нет

Как то так должно быть

Добавлено через 2 часа 54 минуты
Кстати, нашел один косяк - не понимаю почему так получается.
Вчера выложил приложение в магазин, сделал строчку
Java
1
mHelper.enableDebugLogging(false);
Но при покупки он все равно говорит что тестовый заказ и деньги не будут списываться

Можно посмотреть вживую здесь https://play.google.com/store/apps/d...e.nosc.sexbook
Darth_Revan
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 5
09.12.2013, 19:40     Платная версия приложения #46
NOSC,
как экран я использую xml(layout-файл) ,как же связать код с xml , неужели всё придётся переделывать в LayoutParams?
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
09.12.2013, 20:39     Платная версия приложения #47
Цитата Сообщение от Darth_Revan Посмотреть сообщение
NOSC,
как экран я использую xml(layout-файл) ,как же связать код с xml , неужели всё придётся переделывать в LayoutParams?
Хм, я пришел к выводу что никак, именно после того как увидел этот метод стал писать все в классе, от создания лэйаут в xml ушел полностью, собственно так даже лучше получается
Darth_Revan
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 5
10.12.2013, 14:55     Платная версия приложения #48
Автор этой статьи пообещал написать ещё один туториал с использованием xml вместо LayoutParams, на выходных .
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
10.12.2013, 14:59     Платная версия приложения #49
Цитата Сообщение от Darth_Revan Посмотреть сообщение
Автор этой статьи пообещал написать ещё один туториал с использованием xml вместо LayoutParams, на выходных .
Будем ждать, это актуально. Хотя пишу второй проект - он без рекламы, но опять таки не пользуюсь xml
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
15.12.2013, 23:18     Платная версия приложения #50
Други, а подскажите как сделать еще один проект с тем же кодом, но с другим именем пакета и чтоб все работало =)?
Vladimirys
298 / 195 / 22
Регистрация: 16.01.2010
Сообщений: 551
16.12.2013, 11:50     Платная версия приложения #51
Банально, но работает. Сначала просто копируем свой проект. Потом.
В Эклипсе-> выбираем требуемый проект->кликаем ПКМ ->Android tools ->Rename application package - > и дальше смотрим, там ничего сложного.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2013, 13:26     Платная версия приложения
Еще ссылки по теме:

Android Мобильная версия сайта в виде приложения
Релизная, дебаг версия и Авторизация гугл? Android
Android Версия андроид
Версия Gradle Android
Android Фейсбучная версия любого андроид приложения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Termit___
5 / 5 / 0
Регистрация: 02.04.2013
Сообщений: 85
16.12.2013, 13:26     Платная версия приложения #52
Да, спасибо. Методом тыка уже нашел. Так и сделал. Токлько пришлось еще поменять имена пакетов в коде в некоторых местах, но это уже специфика моего приложения.
Yandex
Объявления
16.12.2013, 13:26     Платная версия приложения
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru