Bonjour à tous,

J'ai intégré à mon application Android in-app billing dans le but de permettre à l'utilisateur de supprimer une bannière de publicité.

Voici mon MainActivity.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {
 
private static final String TAG = "com.mypackage.inappbilling";
 
public static final String ITEM_SKU = "test2";
 
NavigationView navigationView = null;
Toolbar toolbar = null;
IabHelper mHelper;
 
 
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
 
 
    //InAppBilling
 
    String base64EncodedPublicKey = "@string/base64";
    // compute your public key and store it in base64EncodedPublicKey
    mHelper = new IabHelper(this, base64EncodedPublicKey);
 
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        @SuppressLint("LongLogTag")
        public void onIabSetupFinished(IabResult result) {
            if (!result.isSuccess()) {
                // Oh no, there was a problem.
                Log.d(TAG, "Problem setting up In-app Billing: " + result);
            }
            // Hooray, IAB is fully set up!
        }
    });
}
 
 
@Override
protected void onActivityResult(int requestCode, int resultCode,
                                Intent data)
{
    if (!mHelper.handleActivityResult(requestCode,
            resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}
 
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
        = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result,
                                      Purchase purchase)
    {
        if (result.isFailure()) {
 
            // Handle error
            return;
        }
        else if (purchase.getSku().equals(ITEM_SKU)) {
            consumeItem();
 
        }
 
    }
};
 
 
 
public void consumeItem() {
    mHelper.queryInventoryAsync(mReceivedInventoryListener);
}
 
IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener
        = new IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(IabResult result,
                                         Inventory inventory) {
 
        if (result.isFailure()) {
            // Handle failure
        } else {
            mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
                    mConsumeFinishedListener);
        }
 
    }
 
};
 
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener =
        new IabHelper.OnConsumeFinishedListener() {
            public void onConsumeFinished(Purchase purchase,
                                          IabResult result) {
 
            }
        };
 
 
 
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
 
    if (id == R.id.nav_agenda) {
        //Set the fragment initially
 
        MainFragment fragment = new MainFragment();
 
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
        // Handle the camera action
    } else if (id == R.id.nav_cadena) {
 
        mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001,
                mPurchaseFinishedListener, "mypurchasetoken");
 
 
    } else if (id == R.id.nav_apropos) {
        //Set the fragment initially
        AproposFragment fragment = new AproposFragment();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
 
    } 
 
@Override
public void onDestroy() {
    super.onDestroy();
    if (mHelper != null) mHelper.dispose();
    mHelper = null;
}
La fonction achat fonctionne bien , en test. Toutefois, je n'arrive pas à l'appliquer sur ma publicité afin de désactiver celle ci lorsque l'achat est réalisé. Ma publicité se trouve dans un fragment.

MainFragment.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
public class MainFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
 
SwipeRefreshLayout swipeLayout;
 
 
public static AdView adView;
private RecyclerView recyclerView;
private View rootView;
 
 
 
 
public MainFragment() {
 
}
 
 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_main, container, false);
 
    StartProgress();
    updateInterface();
 
 
 
    if (Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
 
 
    return rootView;
 
 
 
}
 
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
 
 
 
 
 
 
 
    swipeLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_container);
    swipeLayout.setOnRefreshListener(this);
    swipeLayout.setColorSchemeColors(getResources().getColor(R.color.colorPrimary),
            getResources().getColor(R.color.colorPrimaryDark), getResources().getColor(R.color.colorAccent));
 
 
}
 
 
 
 
private void updateInterface() {
 
 
    if (purchase.getSku().equals(MainActivity.ITEM_SKU)) {
 
        displayAd(false);
    } else {
 
        displayAd(true);
    }
}
 
 
 
 
public void displayAd(boolean state) {
 
    if (state) {
        if (adView == null) {
 
            // Google has dropped Google Play Services support for Froyo
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) {
                adView = (AdView) rootView.findViewById(R.id.adViewCardItem);
 
                AdRequest adRequest = new AdRequest.Builder().build();
                adView.loadAd(adRequest);
            }
        }
    } else {
 
 
        if (adView != null) {
            adView.destroy();
            adView = null;
        }
    }
}
 
 
 
@Override
public void onRefresh() {
 
 
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
 
 
 
            swipeLayout.setRefreshing(false);
        }
    }, 2000);
 
 
}
 
public void StartProgress() {
    new AsyncProgressBar().execute();
}
 
 
 
private class AsyncProgressBar extends AsyncTask<Void, Void, Void> {
 
    protected ProgressDialog dialog;
 
    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(getActivity());
        dialog.setMessage("...");
        dialog.setCancelable(false);
        dialog.show();
    }
 
    @Override
    protected Void doInBackground(Void... params) {
        //duration of progressbar
        SystemClock.sleep(1000);
 
        return null;
    }
 
 
 
    @Override
    protected void onPostExecute(Void useless) {
      .....
    }
}
Je bloque sur cette partie de code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
private void updateInterface() {
 
 
    if (purchase.getSku().equals(MainActivity.ITEM_SKU)) {
 
        displayAd(false);
    } else {
 
        displayAd(true);
    }
}
Comment puis-je faire appel à la variable "purchase" de mon MainActivity.java ? Ou peut être n'est ce pas la bonne méthode ? Pouvez-vous s'il vous plaît m'éclairer sur ce point ?

En vous remerciant par avance pour vos réponses.