プッシュ通知用のデバイス トークンを取得する Adobe AIR の iOS ネイティブ拡張に取り組んでいます。残念ながら、私は客観的な C プログラマーではないので、使用しているコードに何か問題があるかどうかはわかりません。問題なくコンパイルされます。拡張機能をAIRで使用できますが、通知に登録してもプラスの効果もマイナスの効果も返されないようです。したがって、私がやろうとしているのは、RegisterDevice 関数が AIR から呼び出されたときに通知を登録することです。登録されている場合は、デバイス トークンを deviceTokenString に格納し、登録されずにエラーが返された場合は、この文字列にエラーを格納します。 . GetToken 関数が呼び出されると、deviceTokenString を AIR に返すので、トークンまたはエラーのいずれかになります。AIR アプリケーションでは、最初に RegisterDevice 関数を起動し、その後ボタンをクリックして GetToken 関数を起動します。残念ながら、トークンもエラーも表示されません (許可を求めるポップアップも表示されません)。また、didFinishLaunchingWithOptions に登録部分を入れようとしましたが、didFinishLaunchingWithOptions が起動されないようです。コードに問題がなければご覧いただければ幸いです。それとも、他に何が間違っている可能性があるか考えていますか? プロビジョニング ポータルでプッシュ SSL 証明書を有効にしました。これが私が使用しているコードです コードに問題がなければご覧いただければ幸いです。それとも、他に何が間違っている可能性があるか考えていますか? プロビジョニング ポータルでプッシュ SSL 証明書を有効にしました。これが私が使用しているコードです コードに問題がなければご覧いただければ幸いです。それとも、他に何が間違っている可能性があるか考えていますか? プロビジョニング ポータルでプッシュ SSL 証明書を有効にしました。これが私が使用しているコードです
"NativePush.m":
#import "UIKit/UIKit.h"
#import "include/FlashRuntimeExtensions.h"
@implementation NativePush
@synthesize tokenString = _tokenString;
NSString *deviceTokenString = @"";
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *str =
[NSString stringWithFormat:@"%@",deviceToken];
deviceTokenString = str;
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err
{
NSString *str = [NSString stringWithFormat: @"Error: %@", err];
deviceTokenString = str;
}
void ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx,
uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) {
*numFunctionsToTest = 2;
FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*2);
func[0].name = (const uint8_t*)"RegisterDevice";
func[0].functionData = NULL;
func[0].function = &RegisterDevice;
func[1].name = (const uint8_t*)"GetToken";
func[1].functionData = NULL;
func[1].function = &GetToken;
*functionsToSet = func;
}
void ContextFinalizer(FREContext ctx) {
return;
}
void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet,
FREContextFinalizer* ctxFinalizerToSet) {
*extDataToSet = NULL;
*ctxInitializerToSet = &ContextInitializer;
*ctxFinalizerToSet = &ContextFinalizer;
}
void ExtFinalizer(void* extData) {
return;
}
FREObject RegisterDevice(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
[[UIApplication sharedApplication]
registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound)];
return NULL;
}
FREObject GetToken(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
NSString* tokenS = deviceTokenString;
char* tokenChar = [tokenS UTF8String];
FREObject tokenObject = NULL;
FRENewObjectFromUTF8( strlen(tokenChar)+1 , (const uint8_t*)tokenChar, &tokenObject);
return tokenObject;
}
@end
ヘッダーファイル「NativePush.h」:
import "Foundation/Foundation.h"
import "include/FlashRuntimeExtensions.h"
@interface NativePush : NSObject
@property (nonatomic, retain) NSString* tokenString;
FREObject RegisterDevice(
FREContext ctx,
void* funcData,
uint32_t argc,
FREObject arg[]
);
FREObject GetToken(
FREContext ctx,
void* funcData,
uint32_t argc,
FREObject arg[]
);
void ContextInitializer(
void* extData,
const uint8_t* ctxType,
FREContext ctx,
uint32_t* numFunctionsToTest,
const FRENamedFunction** functionsToSet
);
void ContextFinalizer(FREContext ctx);
void ExtInitializer(
void** extDataToSet,
FREContextInitializer* ctxInitializerToSet,
FREContextFinalizer* ctxFinalizerToSet
);
void ExtFinalizer(void* extData);
@end