初期化¶
アプリの起動時に以下の手順でSDKの初期化処理を行います。
手順¶
import¶
import RichFlyer
#import <RichFlyer/RichFlyer.h>
SDK実行キーの設定¶
// Class RFApp
static func setServiceKey(serviceKey: String, appGroupId: String, sandbox: Bool)
// Class RFApp
+ setServiceKey:appGroupId:sandbox:
パラメータ | 内容 |
---|---|
serviceKey | 管理サイトで発行されたSDK実行キー SDK実行キーの取得方法 |
appGroupId | AppGroupsのGroup ID |
sandbox | 通知の配信種別。 YES:Developmentプロビジョニングを適用する場合 NO:Distributionプロビジョニングを使用している場合 |
delegateの設定¶
// Class RFApp
static func setRFNotficationDelegate(delegate: RFNotificationDelegate)
// Class RFApp
+ setRFNotificationDelegate:
パラメータ | 内容 |
---|---|
delegate | RFNotificationDelegateを実装しているクラスのオブジェクト |
RFNotificationDelegate
public protocol RFNotificationDelegate {
// アプリがフォアグラウンドにある場合ときにプッシュ通知を受信
func willPresentNotification(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Swift.Void)
// 通知センターからアプリを起動した
func didReceiveNotification(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Swift.Void)
// アプリ起動時表示が閉じられた
func dismissedContentDisplay(_ action: RFAction?, content: RFContent?) -> Swift.Void
}
@protocol RFNotificationDelegate <NSObject>
@optional
// アプリがフォアグラウンドにある場合ときにプッシュ通知を受信
- (void)willPresentNotificationWithCenter:(UNUserNotificationCenter *)center
notification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler;
// 通知センターからアプリを起動した
- (void)didReceiveNotificationWithCenter:(UNUserNotificationCenter *)center
response:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler;
// アプリ起動時表示が閉じられた
- (void)dismissedContentDisplay:(RFAction*)action content:(RFContent*)content;
@end
OSに対してプッシュ通知受信の許可をリクエスト¶
// Class RFApp
static func requestAuthorization(application: UIApplication, applicationDelegate: UIApplicationDelegate, options: [RFAuthorizationOptions] = [.badge, .sound, .alert, .carPlay])
// Class RFApp
+ requestAuthorizationWithOptions:applicationDelegate:options:
パラメータ | 内容 |
---|---|
application | UIApplicationオブジェクト |
applicationDelegate | UIApplicationDelegateを実装しているクラスのオブジェクト |
options | 通知表示のオプション(バッジ、通知の表示、サウンド、カープレイ) カープレイはiOS10以上で利用可能 |
通知表示のオプション
public enum RFAuthorizationOptions {
case badge // バッジを表示する
case sound // サウンドを鳴らす
case alert // 受信時に通知を表示
case carPlay // カープレイ
}
typedef NS_OPTIONS(NSUInteger, RFAuthorizationOptions) {
RFAuthorizationOptionNone = 0,
RFAuthorizationOptionBadge = (1 << 0), // バッジを表示する
RFAuthorizationOptionSound = (1 << 1), // サウンドを鳴らす
RFAuthorizationOptionAlert = (1 << 2), // 受信時に通知を表示
RFAuthorizationOptionCarPlay = (1 << 3), // カープレイ
};
デバイストークンを登録¶
// Class RFApp
static func registDevice(deviceToken: Data, completion: @escaping (_ result: RFResult) -> Void)
// Class RFApp
+ registDevice:completion:
パラメータ | 内容 |
---|---|
deviceToken | OSから取得したデバイストークン |
completion | 処理完了時に呼び出されるハンドラ。結果オブジェクト(RFResult)が渡される。 |
結果オブジェクト¶
public struct RFResult {
public let result: Bool // 結果
public let message: String // エラーメッセージ
public let code: Int // エラーコード
}
@interface RFResult : NSObject
@property (readonly) BOOL result; // 結果
@property (readonly, nonatomic, nullable) NSString* message; // エラーメッセージ
@property (readonly) NSInteger code; // エラーコード
@end
エラーコード¶
エラーコード | 内容 | 予想される原因 |
---|---|---|
401 | 認証失敗 | 認証トークンが不正か、期限切れの可能性があります。 アプリの再起動または requestAuthorization を呼ぶことで解消する可能性があります。 |
404 | サービス不明 | 管理サイトで取得したSDK実行キーが指定されていない可能性があります。 SDK実行キーの確認方法 |
600 | 通信エラー | RichFlyerサーバへの接続に失敗しています。通信環境の悪化等が考えられます。 |
601 | デバイストークン不明 | OSから発行されるデバイストークンがRichFlyer SDKに渡されていないか失われた可能性があります。 アプリの再起動または requestAuthorization を呼ぶことで解消する可能性があります。 |
602 | 認証トークン不明 | デバイストークンの登録に失敗している可能性があります。 アプリの再起動または requestAuthorization を呼ぶことで解消する可能性があります。 |
603 | 認証トークン不明 | デバイストークンの登録に失敗している可能性があります。 アプリの再起動または requestAuthorization を呼ぶことで解消する可能性があります。 |
604 | SDK実行キー不明 | SDK実行キーが指定されていない可能性があります。 |
実装例¶
Swift
import UserNotifications
import RichFlyer
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// 管理サイトで発行されたSDK実行キーを設定
RFApp.setServiceKey(serviceKey: "1234567890",
appGroupId: "group.jp.co.infocity.richflyer",
sandbox: false)
//通知のDelegate設定
RFApp.setRFNotficationDelegate(delegate: self)
//OSに対してプッシュ通知受信の許可をリクエスト
RFApp.requestAuthorization(application: UIApplication.shared, applicationDelegate: self)
// 自分で通知受信時のOptionを設定する場合
//RFApp.requestAuthorization(application: UIApplication.shared, applicationDelegate: self, options: [.alert, .badge, .sound])
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
//デバイストークンを登録
RFApp.registDevice(deviceToken: deviceToken, completion: { (result: RFResult) in
if (!result.result) {
// 失敗
print(result.message + "(code:\(result.code))")
}
})
}
}
extension AppDelegate: RFNotificationDelegate {
func dismissedContentDisplay(_ action: RFAction?, content: RFContent?) {
}
func willPresentNotification(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
}
func didReceiveNotification(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
}
}
Objective-C
#import "AppDelegate.h"
#import <RichFlyer/RichFlyer.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 管理サイトで発行されたSDK実行キーを設定
[RFApp setServiceKey:@"1234567890" appGroupId:@"group.jp.co.infocity.richflyer" sandbox:NO];
// delegateの設定
[RFApp setRFNotificationDelegate:self];
// OSにプッシュ通知の受信許可をリクエスト
[RFApp requestAuthorization:[UIApplication sharedApplication]
applicationDelegate:self];
// 自分で通知受信時のOptionを設定する場合
//[RFAppDelegate requestAuthorization:[UIApplication sharedApplication]
// options:RFAuthorizationOptionAlert|RFAuthorizationOptionBadge|RFAuthorizationOptionSound
// applicationDelegate:self];
return YES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
//デバイストークンを登録
[RFApp registDevice:deviceToken completion:^(RFResult* result){
if (!result.result) {
// 失敗
NSLog(@"%@(code:%ld)", result.message, (long)result.code);
}
}];
}
#pragma mark - RFNotificationDelegate
- (void)didReceiveNotificationWithCenter:(UNUserNotificationCenter *)center response:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {
}
- (void)willPresentNotificationWithCenter:(UNUserNotificationCenter *)center notification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
}
- (void)dismissedContentDisplay:(RFAction *)action content:(RFContent*)content {
}