問題は次のとおりです。
Marmalade SDK ( http://www.madewithmarmalade.com/ ) を使用しています。
Marmalade SDK は、プラットフォーム固有のプラグイン (用語の拡張) を作成する機会を提供します。
すべての拡張機能は静的ライブラリとしてコンパイルされ、特別な展開ツールを使用してメイン アプリケーション (用語ではローダー) にリンクされます。
メイン アプリケーションのソースは開かれていないため、アプリのデリゲート メソッドを実装/オーバーライドすることはできません。
Upsight SDK (以前の PLayhaven) を介してリモート プッシュ通知を管理するための拡張機能が必要です。
iOS 8 が登場し、リモート プッシュ通知の登録に追加の作業が必要になりました。特に、didRegisterForRemoteNotificationsWithDeviceTokenおよびdidRegisterUserNotificationSettingsを実装する必要があります。
質問は次のとおりです。
静的ライブラリ (メイン アプリケーションのソースにアクセスできない) からアプリケーション デリゲート メソッドに注入するにはどうすればよいですか?
考えは次のとおりです。
1) カテゴリの使用。UIApplication クラスに新しいメソッドを追加しようとしましたが、元のメソッドと交換しました。私の新しいメソッドは機能し、元のメソッドを呼び出しました。しかし、うまくいかないようです。私のobj-cの経験はかなり貧弱です。私のクラス拡張が間違って実装されているか、元のアイデアが間違っていました:
@interface UIApplication(MyDelegate)
- (void)application:(UIApplication *)application newDidRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings;
@end
@implementation UIApplication(MyDelegate)
- (void)application:(UIApplication *)application newDidRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
NSLog(@"PLAYHAVEN: didRegisterUserNotificationSettings:%@", notificationSettings);
[[PHPushProvider sharedInstance] registerUserNotificationSettings:notificationSettings];
}
@end
s3eResult s3ePlayhavenInit_platform()
{
// Add any platform-specific initialisation code here
myDelegate = [[MyDeleagte alloc] init];
oldHandler1 = class_getInstanceMethod([UIApplication class], @selector(application:didRegisterUserNotificationSettings:));
newHandler1 = class_getInstanceMethod([UIApplication class], @selector(application:newDidRegisterUserNotificationSettings:));
method_exchangeImplementations(oldHandler1, newHandler1);
...
return S3E_RESULT_SUCCESS;
}
2) NSNotificationCenter を使用して、対応する通知をリッスンします。
[[NSNotificationCenter defaultCenter] addObserver:myDelegate selector:@selector(didRegisterUserNotificationSettings:) name:@"UIApplicationDidRegisterUserNotificationSettings" object:nil];
しかし、そのような名前の通知が投稿されるかどうかはまったくわかりません。UIApplication クラスで関連する定数を見つけることができませんでした。その結果、これも機能しません。
最後の質問は次のとおりです。
それはまったく可能ですか?何か案は?
皆さんありがとう。