3

UrbanAirship でプッシュ通知を追加しています。AppDelegate.m にこれら 2 つのメソッドがあります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Create Airship options dictionary and add the required UIApplication launchOptions
    NSMutableDictionary *takeOffOptions = [NSMutableDictionary dictionary];
    [takeOffOptions setValue:launchOptions forKey:UAirshipTakeOffOptionsLaunchOptionsKey];

    // Call takeOff (which creates the UAirship singleton), passing in the launch options so the
    // library can properly record when the app is launched from a push notification. This call is
    // required.
    //
    // Populate AirshipConfig.plist with your app's info from https://go.urbanairship.com
    [UAirship takeOff:takeOffOptions];

    // Set the icon badge to zero on startup (optional)
    [[UAPush shared] resetBadge];

    // Register for remote notfications with the UA Library. This call is required.
    [[UAPush shared] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                         UIRemoteNotificationTypeSound |
                                                         UIRemoteNotificationTypeAlert)];

    // Handle any incoming incoming push notifications.
    // This will invoke `handleBackgroundNotification` on your UAPushNotificationDelegate.
    [[UAPush shared] handleNotification:[launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]
                       applicationState:application.applicationState];

    // Override point for customization after application launch.
    return YES;
}

そしてこの方法:

// Implement the iOS device token registration callback
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    UALOG(@"APN device token: %@", deviceToken);

    // Updates the device token and registers the token with UA. This won't occur until
    // push is enabled if the outlined process is followed.
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSString *alias = [defaults objectForKey:@"user_id"];
    [[UAPush shared] setAlias:@"test-alias"];
    [[UAPush shared] registerDeviceToken:deviceToken];
}

ここの UrbanAirship の説明から入手しました: https://docs.urbanairship.com/display/DOCS/Getting+Started:+iOS:+Push

しかし、プッシュ通知を送信する画面を指定する方法がわかりません。それはどこで行われますか?また、サーバーはプッシュとともに JSON を送信します。その JSON からデータを抽出する場所と方法は?

ありがとう!

4

3 に答える 3

1

handleNotificationJSON をメソッドに渡します。それはあなたが書いたメソッドですか、それともurbanairshipコードの一部ですか? (サーバーコードに加えてクライアント側コードを提供するかどうかはわかりません)。自分で書いたメソッドであれば、そのメソッドで JSON からデータにアクセスできます。そうでない場合は、独自のメソッドを記述して、同じデータを渡すことができます。

この方法で通知 JSON にアクセスできるのは、通知が届いたときにアプリケーションが実行されておらず、ユーザーが通知をタップしてアプリを開いた場合のみです。ユーザーがアプリの起動アイコンをタップすると、そのデータは失われます。

JSON でカスタム プロパティを使用して、ランディング スクリーンを指定できます。そのプロパティを解析し、表示するビューを決定するのはあなたの責任です。

application:didReceiveRemoteNotification:アプリケーションがフォアグラウンドで実行されているときに通知が届いた場合、通知データを処理するためにも実装する必要があります。

于 2013-03-27T17:34:26.227 に答える
1

簡単に言えば、必要ありません (その機能が提供されていないためです)。

アプリの実行中にプッシュを受信すると、-[UIApplicationDelegate application:didReceiveRemoteNotification:]が呼び出されます。このメソッドの実装では、適切なアクション (メッセージの表示、アプリケーションの特定の領域への移動など) を実行する責任があります。


ドキュメントから

アプリが実行中で、リモート通知を受信した場合、アプリはこのメソッドを呼び出して通知を処理します。このメソッドの実装では、通知を使用して適切なアクションを実行する必要があります。たとえば、サーバーに接続し、アプリを待機しているデータをダウンロードするためのシグナルとして使用できます。

userInfo ディクショナリには、値が別のディクショナリである aps キーが含まれています。aps ディクショナリの情報は必要ありませんが、次のキーを使用して内容を取得できます。

userInfo ディクショナリには、JSON スキーマに従ってプロバイダーによって定義されたカスタム データも含まれる場合があります。カスタム データのプロパティは、aps ディクショナリと同じレベルで指定する必要があります。ただし、通知ごとに厳密なサイズ制限 (256 バイト) があり、配信が保証されないため、大量のデータ転送にはカスタム定義のプロパティを使用しないでください。

于 2013-03-27T17:36:36.283 に答える
1

アプリケーション デリゲートでリモート プッシュ通知を処理する必要があります。

- (void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo

ここからルート ビュー コントローラーにアクセスして、他のビュー コントローラーの表示をトリガーできます。

ドキュメントから:

アプリが実行中で、リモート通知を受信した場合、アプリはこのメソッドを呼び出して通知を処理します。このメソッドの実装では、通知を使用して適切なアクションを実行する必要があります。たとえば、サーバーに接続し、アプリを待機しているデータをダウンロードするためのシグナルとして使用できます。

userInfo ディクショナリには、都市型飛行船で送信された追加データが含まれています。

詳細については、リファレンスを参照してください。

于 2013-03-27T17:34:40.957 に答える