1

過去数週間、Phonegap 2 ベース アプリで PushNotification をセットアップしようとしていました。

ここに私が行った手順があります。

  1. PushNotification フォルダーを plugins フォルダーにドラッグします。


    (ソース: joelchu.com )

  2. ドキュメントごとに次の指示に従ってください


    (ソース: joelchu.com )

  3. Cordova.plistプラグイン セクションに PushNotification / PushNotification を追加

  4. 次を変更しAppDelegate.mます。

    - (void) dealloc
    {
        [super dealloc];
    }
    
    /* START PUSH MODIFCATION */
    
    #pragma PushNotification delegation
    
    - (void)application:(UIApplication*)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
    {
        PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
        [pushHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
    }
    
    - (void)application:(UIApplication*)app didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
    {
        PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
        [pushHandler didFailToRegisterForRemoteNotificationsWithError:error];
    }
    
    - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
    {
        PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
        NSMutableDictionary* mutableUserInfo = [userInfo mutableCopy];
    
        // Get application state for iOS4.x+ devices, otherwise assume active
        UIApplicationState appState = UIApplicationStateActive;
        if ([application respondsToSelector:@selector(applicationState)]) {
            appState = application.applicationState;
        }
    
        [mutableUserInfo setValue:@"0" forKey:@"applicationLaunchNotification"];
        if (appState == UIApplicationStateActive) {
            [mutableUserInfo setValue:@"1" forKey:@"applicationStateActive"];
            [pushHandler didReceiveRemoteNotification:mutableUserInfo];
        } else {
            [mutableUserInfo setValue:@"0" forKey:@"applicationStateActive"];
            [mutableUserInfo setValue:[NSNumber numberWithDouble: [[NSDate date] timeIntervalSince1970]] forKey:@"timestamp"];
            [pushHandler.pendingNotifications addObject:mutableUserInfo];
        }
    }
    
    /* END PUSH MODIFICATION */
    
    @end
    

最初のエラー

不明な型名 PushNotification

したがって、最後のインポートの直後に次の行を追加します。

#import "PushNotification.h"

これで問題は解決します。

次の問題

CDVPlugin.h ファイルが見つかりません

そこで、すべてのビルド設定に、ユーザー ヘッダー検索パスに以下を追加します。

$(CORDOVALIB)/Classes (recursive)

次の問題

その後、20 を超えるエラーがスローされます。


(ソース: joelchu.com )

私は何を間違えましたか?

至る所で上下に検索しています。驚いたことに、誰も問題を抱えていないようです。

私のセットアップの詳細:

  • フォンギャップ 2.0
  • XCode 4.5 (プレビュー 4)
  • iOS 6 ベース (iOS 5 以降のアプリビルド)

誰かが答えてくれることを願っています。ありがとうございました。

(PS Phonegap PushNotification プラグインが壊れている場合は、まだ 4 か月間更新されていません。無料の代替手段はありますか?ありがとうございます)

私は自分のブログで同じ問題を説明しました。

修正済み(今のところ)

修繕

/* START BLOCK */

#pragma PushNotification delegation

- (void) application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
    [pushHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}

- (void) application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
    [pushHandler didFailToRegisterForRemoteNotificationsWithError:error];
}

- (void) application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
    PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
    NSMutableDictionary* mutableUserInfo = [userInfo mutableCopy];

    // Get application state for iOS4.x+ devices, otherwise assume active
    UIApplicationState appState = UIApplicationStateActive;
    if ([application respondsToSelector:@selector(applicationState)]) {
        appState = application.applicationState;
    }

    [mutableUserInfo setValue:@"0" forKey:@"applicationLaunchNotification"];
    if (appState == UIApplicationStateActive) {
        [mutableUserInfo setValue:@"1" forKey:@"applicationStateActive"];
        [pushHandler didReceiveRemoteNotification:mutableUserInfo];
    } else {
        [mutableUserInfo setValue:@"0" forKey:@"applicationStateActive"];
        [mutableUserInfo setValue:[NSNumber numberWithDouble: [[NSDate date] timeIntervalSince1970]] forKey:@"timestamp"];
        [pushHandler.pendingNotifications addObject:mutableUserInfo];
    }
}

/* STOP BLOCK */

私がしたこと - 最初の2つ

- (void)application:(UIApplication*)app

に変更

- (void) application:(UIApplication*)application

そして私は

#import "PushNotification.h"

ブロックの先頭に (変更コードの直前ではなく、@end がコンテキストにない問題を引き起こします)。

私はまだJavaScriptインターフェースを実行していません。しかし、すべてのエラーがなくなりました。

ありがとう。

4

1 に答える 1

2

変更をインポートに戻してから、このブロックを置き換えてみてください

#ifdef CORDOVA_FRAMEWORK
    #import <Cordova/CDVPlugin.h>
#else
    #import "CDVPlugin.h"
#endif

この行で

#import <Cordova/CDVPlugin.h>

それでもうまくいかない場合は、PhoneGap 2.0 プロジェクトがないか、間違ったバージョンまたは複数のバージョンのフレームワークをインストールした可能性があります。

「PushNotification.m」ファイルでも同じことができます。2 番目のインポートを#import <Cordova/JSONKit.h>.

私はまだそのプラグインを使用していないことに注意してください。これは、2.0 への移植に関する私の経験からのものです (私はタブ/ナビゲーション バー プラグインの作成者です)。

于 2012-09-11T14:47:49.187 に答える