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

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

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

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

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

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

Планшетная версия приложения - Программирование Android
Иконки на планшете выглядят маленькими. В папки закинул иконки: mdpi - 85px, ldpi - 64px, hdpi - 128px, xhdpi - 170 px, xxhdpi - 255 px. ...

Фейсбучная версия любого андроид приложения - Программирование Android
Ребята, препод дал задание найти "фейсбучную версию андроид приложения".Любого приложения. Процитировал, вроде так в конспекте...

Мобильная версия сайта в виде приложения - Программирование Android
Доброго времени суток, уважаемые форумчане! У меня задача - приложение под Android - мобильная версия сайта, причем основной функционал...

Пробная версия приложения на 2 часа, после которого оно самоудалится - Программирование Android
Проблема и ее суть описана в теме. Повторюсь, как реализовать функцию самоудаления для установленного приложения через 2 часа после его...

Ошибка при вызове приложения из другого приложения - Программирование Android
Сделано два простеньких приложения и я хочу чтобы одно приложение запускало другое. В приложении, которое будет запущено установлен фильтр...

Из приложения А проверить наличие установленного на устройстве приложения В - Программирование Android
Извиняюсь за нубский вопрос. Подскажите в андроид есть возможность из приложения А проверить наличие установленного на устройстве...

51
Suvitruf
15 / 6 / 1
Регистрация: 22.09.2012
Сообщений: 83
20.11.2013, 21:44 #31
Цитата Сообщение от NOSC Посмотреть сообщение
Коллеги, я разобрался. У меня возникали проблемы из-за того что этот код подразумевает программное создание активити, а я пытался навязать ему готовое, из-за этого либо ничего кроме активити из xml не показывалось. Либо выпадала ошибка.

Всем спасибо за помощь, буду переделывать приложение полностью
Поздравляю. Удачи в дальнейшей разработке)
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
21.11.2013, 00:38 #32
Цитата Сообщение от Suvitruf Посмотреть сообщение
Если движок сишный, то в Java всего 2 класса: Активити и Сурфейс)
зато на сишке сотни.

Добавлено через 1 минуту
Цитата Сообщение от Suvitruf Посмотреть сообщение
Каждый фрагмент в отдельном файле конечно же =D
[SARCASM]зачем же, если можно все в один файл засунуть[/SARCASM]
0
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598
22.11.2013, 11:09 #33
Переименовать, вроде, проще (Premium, например, в конце дописать) Или просто сделай проект платный, который при установке, активирует твой.
0
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
22.11.2013, 13:14 #34
Коллеги, а если после отключения рекламы я хочу вместо банера открыть иконку поиска?
Правильно я понимаю что в классе PreferencesHelper в строке:
Java
1
2
3
4
5
public static boolean isAdsDisabled() {
//      LOG.d("disabledADS = "+disabledADS);
        return disabledADS;
        
    }
Можно прописать условия <показать картинку в layout> ??

Или это как-то по другому делается?
0
Suvitruf
15 / 6 / 1
Регистрация: 22.09.2012
Сообщений: 83
22.11.2013, 13:18 #35
Цитата Сообщение от NOSC Посмотреть сообщение
Коллеги, а если после отключения рекламы я хочу вместо банера открыть иконку поиска?
Правильно я понимаю что в классе PreferencesHelper в строке:
Java
1
2
3
4
5
public static boolean isAdsDisabled() {
//      LOG.d("disabledADS = "+disabledADS);
        return disabledADS;
        
    }
Можно прописать условия <показать картинку в layout> ??

Или это как-то по другому делается?

Если у вас реклама отключится, то слоя с рекламой вообще не будет создано.
Там же у меня
Java
1
2
public void createView(RelativeLayout layout) {
                if(PreferencesHelper.isAdsDisabled()) return;
Поэтому в этот слой ничего не запихнуть. Можно в методе createView в случае, если реклама отключена, создавать другой слой и в нём показывать картинку.
0
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
22.11.2013, 13:30 #36
Цитата Сообщение от Suvitruf Посмотреть сообщение
Можно в методе createView в случае, если реклама отключена, создавать другой слой и в нём показывать картинку.
А можно пример кода?
0
Suvitruf
15 / 6 / 1
Регистрация: 22.09.2012
Сообщений: 83
22.11.2013, 13:32 #37
Цитата Сообщение от NOSC Посмотреть сообщение
А можно пример кода?
Вам этот слой надо постоянно показывать или как?
0
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
22.11.2013, 13:35 #38
Цитата Сообщение от Suvitruf Посмотреть сообщение
Вам этот слой надо постоянно показывать или как?
Если нет рекламы, то во всех активити должна быть картинка "поиск"

Да, постоянно
0
Suvitruf
15 / 6 / 1
Регистрация: 22.09.2012
Сообщений: 83
22.11.2013, 13:41 #39
Цитата Сообщение от NOSC Посмотреть сообщение
Если нет рекламы, то во всех активити должна быть картинка "поиск"

Да, постоянно
Заменить методы public void createView(RelativeLayout layout) и public void show(boolean show) на что-то такое.

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
 public void createView(RelativeLayout layout) {
                if(PreferencesHelper.isAdsDisabled()) {
                   ViewGroup view = (ViewGroup)context.getLayoutInflater().inflate(R.layout.id_слоя_скартинкой, null);
                    RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                                RelativeLayout.LayoutParams.WRAP_CONTENT,
                                RelativeLayout.LayoutParams.WRAP_CONTENT);
                adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
                    layout.addView(view, adParams);
                }
                else{
                adView = new AdView((Activity) c, AdSize.BANNER, ADMOB_ID);
                RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                                RelativeLayout.LayoutParams.WRAP_CONTENT,
                                RelativeLayout.LayoutParams.WRAP_CONTENT);
                adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
 
                adView.setAdListener(this);
 
                layout.addView(adView, adParams);
 
                adView.loadAd(new AdRequest());
                }
                
        }
        
        public void show(boolean show) {
                if(adView == null) return;        
                adView.setVisibility((show) ? View.VISIBLE : View.GONE);
                
        }
Проверить работоспособность не могу, на работе сейчас.
0
Darth_Revan
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 5
06.12.2013, 21:16 #40
Цитата Сообщение от NOSC Посмотреть сообщение
Коллеги, я разобрался. У меня возникали проблемы из-за того что этот код подразумевает программное создание активити, а я пытался навязать ему готовое, из-за этого либо ничего кроме активити из xml не показывалось. Либо выпадала ошибка.

Всем спасибо за помощь, буду переделывать приложение полностью

!Какие исправления в коде нужно сделать ? Можешь показать?
0
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
08.12.2013, 21:25 #41
Цитата Сообщение от Darth_Revan Посмотреть сообщение
!Какие исправления в коде нужно сделать ? Можешь показать?
Если вы про код пользователя Suvitruf - там, собственно ни каких исправлений не требуется.
Надо понимать, что этот метод для тех кто создает layout программно, а не в конструкторе xml.
Напишите что сделали и что не получилось
1
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); ) реклама.при запуске которых либо вылетает ошибка либо реклама не отображается
0
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); ) реклама.при запуске которых либо вылетает ошибка либо реклама не отображается
Покажите код целиком той активити где есть проблемы.
0
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;
            }
 
        });
    
        }
    }
0
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
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 10:07
Привет! Вот еще темы с ответами:

Версия андроид - Программирование Android
Какая последняя версия андроид???

Версия Gradle - Программирование Android
Здравствуйте. Последняя версия Gradle 2.13 у меня используется 2.10. Надо ли использовать более свежую версию? Если да, то как...

Не устанавливается release версия - Программирование Android
У меня debug версия собирается и устанавливается нормально, но release версия при попытке установить пишет &quot;приложение не установлено&quot; ...

Версия для слабовидящих - Программирование Android
Как по проще сделать функцию для слабовидящих? Увеличить размер шрифта.


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

Или воспользуйтесь поиском по форуму:
45
Yandex
Объявления
09.12.2013, 10:07
Ответ Создать тему
Опции темы

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