楽天リワードSDK iOS 機能詳細 - RakutenReward/RakutenRewardSDK GitHub Wiki
詳細な機能について
RakutenReward クラス
アプリから SDK 側の情報を取得する場合、RakutenReward クラスの下記メソッドを使用してください。
メソッド | 戻り値の型 | 説明 |
---|---|---|
getStatus | RakutenRewardStatus | リワード機能のステータスを返します |
getUser | User | ユーザ情報を返します |
isOptedOut | Bool | リワード機能の opt-in/out 設定を返します |
isUIEnabled | Bool | 通知 UI の表示/非表示設定を返します |
getVersion | String | SDK のバージョンを返します |
RakutenRewardStatus
RakutenRewardStatus はリワード機能の状態を返す enum で、下記のように定義されてます。
メソッド | 戻り値の型 |
---|---|
Online | リワード機能は正常に動作しています |
Offline | 通信又はその他の問題により、リワード機能は正常に動作していません |
AppCodeInvalid | AppCode が不正のため、リワード機能は正常に動作していません |
RakutenRewardStatus の値は、下記のように取得することができます。
Swift
let status : RakutenRewardStatus = RakutenReward.sharedInstance.getStatus()
Objective-C
RakutenRewardStatus status = [RakutenReward sharedInstance] getStatus];
getVersion
SDK のバージョンは String 形式で定義されています。(例:”3.0.0”) 下記の方法で SDK のバージョンを取得することができます。
Swift
let version : String = RakutenReward.sharedInstance.getVersion()
Objective-C
NSString *version = [RakutenReward sharedInstance] getVersion];
isOptedOut
ユーザはポータルの設定画面から、リワード機能をオプトアウト(無効化)することができます。 ユーザがリワード機能を無効化した場合、optedOut の値は true になります。
Swift
let isOptedOut : Bool = RakutenReward.sharedInstance.isOptedOut()
Objective-C
Boolean isOptedout = [RakutenReward sharedInstance] isOptedOut];
isUIEnabled
ユーザはポータルの設定画面から、ミッション達成時の通知 UI の表示有無を選択することができます。 ユーザが通知 UI を非表示に設定した場合、uiEnabled の値は false になります。
Swift
let isUIEnabled : Bool = RakutenReward.sharedInstance.isUIEnabled()
Objective-C
Boolean isUIEnabled = [RakutenReward sharedInstance] isUIEnabled];
User クラス
User クラスはユーザ情報を持つクラスで、下記のメソッドにアクセス可能です。
Swift
let user : User? = RakutenReward.sharedInstance.getUser()
Objective-C
User *user = [RakutenReward sharedInstance] getUser];
MissionAchievementData クラス
MissionAchievementData はユーザが達成したミッションの情報を定義したクラスで、 下記のプロパティを保持しています。
プロパティ | 型 | 説明 |
---|---|---|
name | String | ミッション名 |
iconUrl | String | アイコン画像の URL |
instruction | String | ミッションの説明 |
action | String | アクションコード |
notificationType | String | 通知タイプ |
achievedDate | Date | ミッション達成日 |
point | Int | 達成時に得られるポイント数 |
custom | Bool | 通知タイプが Custom の場合は true, それ以外の場合は false |
RakutenRewardDelegate
RakutenRewardDelegate は、下記のメソッドを定義したプロトコルです。 これを実装することにより、ステータスやユーザ情報の変更、ミッションの達成等があった場合に通知を受け取ることがで きます。
public protocol RakutenRewardDelegate {
optional func didSDKStateChange(status: RakutenRewardStatus)
optional func didUpdateUnclaimedAchievement(missionAchievement: MissionAchievementData)
optional func didUpdateUser(user: User)
}
実装方法
上記の通知を受け取りたい場合、下記の例を参考に RakutenRewardDelegate の実装を行なってください。
Swift
public class ViewController : RakutenRewardDelegate {
override func viewDidLoad() {
RakutenReward.sharedInstance.delegate = self
}
}
Objective-C
@interface ViewController : UIViewController<RakutenRweardDelegate> { }
@implementation ViewController {
- (void) viewDidLoad {
[super viewDidLoad];
[RakutenReward sharedInstance].delegate = self;
}
}
didUpdateUser(user: User)
didUpdateUser メソッドはユーザ情報に変更があった時に呼ばれます。 (例:ユーザがログイン又はログアウトした時)
didUpdateUnclaimedAchievement(missionAchievemnet: MissionAchievementData)
didUpdateUnclaimedAchievement メソッドは、ユーザがミッションを達成した際に呼ばれます。 ミッションの達成通知 UI をカスタムに設定している場合、 このメソッド内に独自 UI を表示する処理を 実装することで、独自 UI を表示することができます。
Swift
func didUpdateUnclaimedAchievement(missionAchievement: MissionAchievementData) {
if (missionAchivement.isCustom()) {
// Show Custom UI here
}
}
Objective-C
- (void) didUpdateUnclaimedAchievement: (MissionAchievementData *)missionAchievement {
switch(status) {
case RakutenRewardStatusOnline:
[[RakutenReward sharedInstance] logAction:@"actionCodeOfLaunchMission"];
break;
case RakutenRewardStatusOffline:
break;
case RakutenRewardStatusAppCodeInvalid:
break;
}
}
didSDKStateChange(status: RakutenRewardStatus)
didSDKStateChange メソッドは RakutenRewardStatus の値に変更があった時に呼ばれます。 例えば1 日1回、初回起動時にミッションを達成させたい場合、didSDKStateChange を利用して実装することが可能です。 下記のように、ステータスが Online になったタイミングを検知して、logAction メソッ ドを呼んでください。 ※1日1回等の判定は別途必要です
Swift
func didSDKStateChange(status: RakutenRewardStatus) {
switch(status) {
case .Online: RakutenReward.sharedInstance.logAction(actionCodeOfLaunchMission) break
case .Offline: break
case .AppCodeInvalid: break
}
}
Objective-C
- (void) didUpdateUnclaimedAchievement: (MissionAchievementData *)missionAchievement {
switch(status) {
case RakutenRewardStatusOnline:
[[RakutenReward sharedInstance] logAction:@"actionCodeOfLaunchMission"];
break;
case RakutenRewardStatusOffline:
break;
case RakutenRewardStatusAppCodeInvalid:
break;
}
}
ミッション達成通知にカスタムのUIを実装する方法
- アクションを送信する
RakutenReward.sharedInstance.logAction(actionCode: "Example")
- RakutenRewardDelegateの didUpdateUnclaimedAchievement でミッション達成の通知を受け取る
RakutenRewardDelegate {
didUpdateUnclaimedAchievement(_ missionAchievement: MissionAchievementData)
}
- didUpdateUnclaimedAchievement で UI を表示するコードを実装する
func didUpdateUnclaimedAchievement(missionAchievement: MissionAchievementData) {
// UIの表示/非表示設定を確認します
guard RewardConfiguration.isUserSettingUIEnabled else {
return
}
// ノーティフィケーションタイプがカスタムであるかどうかを確認
if missionAchievement.isCustom() {
// カスタムUIをメインスレッドで表示させる
}
}
ポイントは、missionAchievement オブジェクトの claim メソッドをコールすることでできます
func didUpdateUnclaimedAchievement(missionAchievement: MissionAchievementData) {
// UIのコードは書いておく
// この操作は、例えばユーザーがクレイムのためのボタンを押したときなどにご使用ください
missionAchievement.claim()
}
ミッションが複数ある場合
actionCode により分類することで複数のミッションで異なるUIを表示させることができます
func didUpdateUnclaimedAchievement(missionAchievement: MissionAchievementData) {
// UIの表示/非表示設定を確認します
guard RewardConfiguration.isUserSettingUIEnabled else {
return
}
// ノーティフィケーションタイプがカスタムであるかどうかを確認
if missionAchievement.isCustom() {
if missionAchievement.getAction() == "ExampleMission1ActionCode" {
// ExampleMission1ActionCodeに対応するUIを表示させる
} else {
// 違うUIを表示させる
}
}
}
広告ポータルの実装
こちらの機能はSDKバージョン8.3.0以降になります。
広告ポータルを開く
openAdPortal(delegate: AdPortalDelegate)
Swift
RakutenReward.sharedInstance.openAdPortal(delegate: self)
Objective-C
[[RakutenReward sharedInstance] openAdPortalWithDelegate:self];
AdPortalDelegateについて
広告ポータルのイベントのコールバックを受け取ることができます
public protocol AdPortalDelegate {
optional func didOpenAdPortal()
optional func didFailOpenAdPortal(error: OpenAdPortalError)
optional func didCloseAdPortal()
}
OpenAdPortalError
didFailOpenAdPortal メソッドでのエラータイプになります。
public enum OpenAdPortalError : Int {
case AppCodeInvalid
case URLInvalid
}
ステータス | 説明 |
---|---|
AppCodeInvalid | アプリキーが無効です |
URLInvalid | URLが無効です |
実装例
Swift
extension ViewController: AdPortalDelegate {
func didOpenAdPortal() {}
func didFailOpenAdPortal(error: OpenAdPortalError) {
switch error {
case .AppCodeInvalid:
break
case .URLInvalid:
break
}
}
func didCloseAdPortal() {}
}
Objetive-C
[[RakutenReward sharedInstance] openAdPortalWithDelegate:self];
- (void)didOpenAdPortal {}
- (void)didFailOpenAdPortalWithError:(enum OpenAdPortalError)error {
switch (error) {
case OpenAdPortalErrorURLInvalid:
break;
case OpenAdPortalErrorAppCodeInvalid:
break;
}
}
- (void)didCloseAdPortal {}
その他の機能について
楽天会員のサインインページの表示 をコードから行う
Swift
RakutenReward.sharedInstance.openSignin()
Objective-C
[[RakutenReward sharedInstance] openSignin];
位置情報の設定について
楽天リワードでは広告の最適化のため位置情報の取得を行なっていますが、これを開発者様側の設定でオフにすることが 可能です。 ※こちらの機能はVer 6.0.2は無効となっております。(位置情報の取得はSDKでは行なっておりません)
Swift
RewardConfiguration.enableManualLocationPermissionRequest = true
RakutenReward.sharedInstance.startSession(appCode: "YOUR_APPLICATION_KEY")
Objective-C
[RewardConfiguration setEnableManualLocationPermissionRequest:YES];
[[RakutenReward sharedInstance] startSessionWithAppCode:@"YOUR_APPLICATION_KEY"];
これらのAPIはリワードSDKの初期化の前に呼び出す必要があります。
バージョン7以降のAPIについて
バージョン7以降のSDKでは、リワード機能のサポートをOS11以降に限定しております。
それに伴い、いくつかのAPIの呼び出しを11以降に限定しております。
@available(iOS 11, *) public class RewardPortalButton : UIView {}
@available(iOS 11, *) public class RewardPortalBarButtonItem : UIBarButtonItem {}
@objc public class MissionAchievementData: NSObject {
@available(iOS 11,*) @objc public func claim() {}
}
@objc final public class RakutenReward : NSObject {
@available(iOS 11, *)@objc public func logAction(actionCode: String)
@available(iOS 11, *) @objc public func openPortal()
@available(iOS 11, *) @objc public func openSignin()
@available(iOS 11, *) @objc public func doSignIn(username: String, password: String, delegate: RakutenRewardSDK.RakutenRewardSessionDelegate?)
@available(iOS 11,*) @objc public func cancelSignIn()
@available(iOS 11,*) @objc public func doSignOut(delegate:)
@available(iOS 11, *) @objc public func cancelSignOut()
}