楽天リワードSDK Android 導入手順 - RakutenReward/RakutenRewardSDK GitHub Wiki

スタートガイド

動作環境について

楽天リワードSDKは、Android 4.0 以上をサポートしています。

(2018/09/17) Android 4.x に対するサポートを終了いたします。

楽天リワードSDKバージョン2.3ではAndroid 4向けアプリの組み込みは可能ですが、ユーザはリワードサービスを利用できません。

Ad機能に関してましてもユーザは利用できません。

(2022/03/01) バージョン5.6より Android 5.0 以上をサポートしています。

ダウンロードページリンク

※バージョン4.2よりMavenをサポート致しました。gradleをご利用の方はSDKをAndroidのプロジェクトにインポートする(gradle) をご利用ください。

※バージョン4.4よりAndroidManifest.xmlのパーミッションの設定、および Activityの設定, proguardの設定は不要になりました。

※バージョン5.2より楽天市場の広告に関して、ディープリンクを採用し、一部の広告に関して楽天市場Androidアプリで開くようになりました

Android 12 Advertising IDについて

こちらをご参照くださいAndroid 12 Advertising ID について

Android 10について

こちらをご参照ください(Android 10について)


SDKをAndroidのプロジェクトにインポートする

SDK(jar, aarファイル)をプロジェクトにコピーする

以下ではlibsフォルダーにコピーしています ※ バージョン 5.2よりjarからaarに変更になりました

build.gradle を修正する

SDKは Google の appcompat-v7 ライブラリを使用しています。

dependencies {    
   implementation files('libs/rakutenreward-2.3.jar')      
   implementation 'com.android.support:appcompat-v7:27.0.0'     
}

gradleに関する記述の詳細はGradle ユーザガイドをご覧ください。

楽天リワードSDKバージョン2.0以上をご利用の方へ(オプショナル)

楽天リワードSDKバージョン2.0以上をご利用の場合、Google Mobile Ads を使用し広告ID を使用した広告配信を行なっております。 そのため以下の Google Play Service SDK のご利用をおすすめします。

dependencies {    
    compile 'com.google.android.gms:play-services-ads:xx.x.x'    
}

※こちらのライブラリは 'com.google.android.gms:play-services-ads-identifier:xx.x.x' で代用可能です

10以上のバージョンをサポート、Ad SDKの機能をご利用の場合11以上を推奨いたします。

SDKをAndroidのプロジェクトにインポートする(gradle)

RewardSDKはMavenをサポートしております。 build.gradleに以下の記述をすることでバージョンの管理が可能です。

repositories { 
     maven { url "https://raw.github.com/Rakuten-Reward-SDK/Reward-SDK-Android/master" }
}

dependencies {
     implementation 'jp.co.rakuten.reward.rewardsdk:rewardsdk:+'
}

AndroidManifest.xml の編集

SDKはインターネットへのアクセスを必要とするため、下記のパーミッションを追記してください。

<!-- Network permission -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

またAd SDKの機能をご利用の場合は以下の位置情報に関するパーミッションを追加してください。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />

Activity 及び App Key(AppCode) の設定

<application>
 <!-- Reward Related Activity -->
    <activity android:name="jp.co.rakuten.reward.rewardsdk.api.activity.RakutenRewardSDKActivity"></activity>
    <activity android:name="jp.co.rakuten.reward.rewardsdk.api.activity.RakutenRewardBrowserActivity"></activity>
    
 <!-- Reward SDK application key -->
    <meta-data android:name="jp.co.rakuten.rewardsdk.appcode" android:value="{YOUR_APPLICATION_KEY}" />
    ...
</application >

{YOUR_APPLICATION_KEY}の部分に開発者ポータルで発行したアプリケーションのApp Keyを使用します。

Proguard の設定

SDKの一部のコードに対し、ProGuardの例外設定を行う必要があります。 下記をアプリケーションでご使用のProguard設定ファイル(例: proguard-rules.pro) に追記してください。

# Reward SDK
-keepattributes *Annotation*
-keepattributes Signature
-keep class jp.co.rakuten.reward.rewardsdk.api.** {
 public <fields>;
 public <methods>;
}

-keep public enum jp.co.rakuten.reward.rewardsdk.api.status.** {
 **[] $VALUES;
 public *;
}

楽天リワードSDKバージョン2.0以上をご利用の方へ

Google Play Service SDKをご利用でない場合は以下の記述が必要になります。

-dontwarn jp.co.rakuten.reward.rewardsdk.**

楽天リワードSDKバージョン4.4以上をご利用の方へ

AndroidManifest.xmlの以下の設定は不用になります。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<activity android:name="jp.co.rakuten.reward.rewardsdk.api.activity.RakutenRewardSDKActivity"/>
<activity android:name="jp.co.rakuten.reward.rewardsdk.api.activity.RakutenRewardBrowserActivity"/>

Proguardの設定

proguard の設定はSDKのなかに組み込まれていますので、アプリ側で追加の設定は不要です。

リワードSDKの使用方法(SDKの初期化)

リワード機能の使用方法(SDKの初期化の方法)は2通りあります。 1つはActivityクラスを継承したRakutenRewardBaseActivityクラスを継承したActivityを利用する方法 もう1つはご利用のActivityなどにRakutenRewardLifecycleのメソッドを直接呼ぶ方法です。

RakutenRewardBaseActivity を継承する

import jp.co.rakuten.reward.rewardsdk.api.activity.RakutenRewardBaseActivity;

public class MainActivity extends RakutenRewardBaseActivity {

RakutenRewardBaseActivityクラスは、自身のonCreate, onStart, onResume, onPause, onDestroy メソッド を利用して処理を行います。よってこれらのメソッドをオーバーライドする際は、下記のように親クラスのメソッドを呼ぶのを 忘れないでください。 ※RakutenRewardBaseActivityは、リワード機能にアクセスする全てのActivityで継承する必要があります。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
}

@Override
public void onStart() {
    super.onStart();
    ...
}

@Override
public void onResume() {
    super.onResume();
    ...
}

@Override
public void onPause() {
    super.onPause();
    ...
}

@Override
public void onDestroy() {
    super.onDestroy();
    ...
}

RakutenRewardLifecycle クラスを使用する

Activityがすでに他のクラスを継承しているなどの理由により継承が難しい場合は、下記のように RakutenRewardLifecycleのメソッドを直接呼ぶことでリワード機能が使用可能になります。 ※リワード機能にアクセスする全てのActivityで下記のメソッドを呼ぶ必要があります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    RakutenRewardLifecycle.onCreate(this);
}

@Override
protected void onStart() {
    super.onStart();

    RakutenRewardLifecycle.onStart(this);
}

@Override
protected void onResume() {
    super.onResume();

    RakutenRewardLifecycle.onResume(this);
}

@Override
protected void onPause() {
    super.onPause();
    RakutenRewardLifecycle.onPause(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    RakutenRewardLifecycle.onDestroy();
}

ミッションの達成について

ミッションを達成するにはアクションを送信する必要があります。 またミッションが達成されると、通知UIが表示されます(通知UIは変更可能です)。

アクション実行時

ユーザがアクションを行なったら、下記のメソッドを実行してください。その際、ミッションに関連づけられた actionCode を引数として渡してください。

RakutenReward.getInstance().logAction(actionCode);

通知UI

ユーザがアクションを実行してミッションが達成されると、通知UIが表示されます。  SDKはモーダル及びバナーの通知UIを用意しています。

Modal Android Notification Banner

バージョン5.9.0からは広告バナー(小)、 広告バナー(大)の通知UIを用意しています。

Small Ad Banner Big Ad Banner

通知タイプ

ミッション達成時の通知の方法は4通りあります。 上記のモーダル、バナーの通知UIを表示するパターンに加えて、通知UIを表示しない方式と、アプリ側で 任意の通知UIを設定する方法があります。 これらは開発者ポータルでミッションを設定する際に定義することができます。

通知タイプ UI
モーダル SDKが用意したモーダルUIが表示されます
バナー SDKが用意したバナーUIが表示されます
カスタム 開発者側で任意のUIを設定できます
通知なし 通知UIは表示されません
広告バナー(小) SDKが用意した広告バナーUIを表示する
広告バナー(大) SDKが用意した広告バナーUIを表示する

ポータルボタン

ポータルボタンはリワードポータルへアクセスするためのボタンです。SDKが用意した RewardPortalButtonクラスを使用することで、アプリ内ポータルボタンを配置することが可能です。

カラータイプ

ポータルボタンにはDarkとLightの2通りのカラータイプがあります。 背景が明るい色の場合はDarkを、背景が暗い場合はLightを使用してください。 初期値はLightに設定されています。 

Dark Dark

Light Light

ポイント未獲得件数を示すバッジ

ユーザミッションを達成したもののポイントをまだ取得していない場合、未獲得となっている件数が、 ポータルボタンの上に赤丸のバッジとして表示されます。バッジの位置はデフォルトでは右上ですが、 コードから変更することも可能です。(後述)

ポータルボタンの使用方法

ポータルボタンを使用するActivityは、上述の通りRakutenRewardBaseActivityを継承するか、 RakutenRewardLifecycleのメソッドを呼ぶ必要があります。その上で、下記のように任意の箇所に RewardButtonを配置してください。

<jp.co.rakuten.reward.rewardsdk.api.ui.RewardButton
  android:id="@+id/portalButton"
  android:layout_width="55dp"
  android:layout_height="55dp" />

ポータルボタンのカスタマイズ

// Get instance of portal button
portalButton = (RewardButton)findViewById(R.id.portalButton);


// Change color type of button
portalButton.setButtonColor(RewardButtonColorType.DARK);

// Change image of button
portalButton.setImage(R.drawable.custom_image);

// Change badge position of button
portalButton.setBadgePosition(BadgePosition.POSITION_BOTTOM_RIGHT);

ポータルボタンをセッション状態を同期される

ポータルボタンはSDKのセッションステータス(後述)がOnline以外の場合、グレーアウトしてタップ不能の 状態になります。 ActivityがRakutenRewardBaseActivityを継承している場合は、セッションステータスがOnlineになったタイミング でポータルボタンも自動的に使用可能になりますが、ActivityがRakutenRewardBaseActivityを継承していない場合、 下記のようにRakutenRewardListenerを実装してリスナーにセットしてください。

public class YourActivity extends Activity implements RakutenRewardListener {

    @Override
    protected void onStart() {
        super.onStart();
        // Set Listener
        RakutenReward.getInstance().setListener(this);
        RakutenRewardLifecycle.onStart(this);
    }
}

ポータル表示をコードから行う

下記のメソッドを呼ぶことで、ポータルボタンを使わずにポータルを表示することも可能です。

RakutenReward.getInstance().openPortal();

ポイント未獲得件数を標準のポータルボタン以外の箇所で使用する

ポータルへの導線を独自に実装する場合は、下記の値を利用し、ポイント未獲得件数をユーザに示すようにしてください。 ユーザ自身にミッション機能に気づいてもらうために、必ず実装してください。 アプリのデザイン上なので難しい場合は、別途ご相談ください。

RakutenReward.getInstance().getUser().getUnclaimed();

※ポータルボタンをご利用でない場合、リワードへの導線文言は上記画像のように「楽天リワー ド」と置いてください。変更をご希望の際は、別途ご相談ください。

⚠️ **GitHub.com Fallback** ⚠️