第6章 APNS


APN コンポーネント

Camel 2.8 から利用可能
apns コンポーネントは、iOS デバイスに通知を送信するために使用されます。apns コンポーネントは javapns ライブラリーを使用します。コンポーネントは、Apple Push Notification Servers (APNS)への通知の送信と、サーバーからのフィードバックの消費をサポートします。
コンシューマーは、デフォルトのポーリング時間 3600 秒で設定されます。サーバーのフラッディングを避けるために、Apple Push Notification Server からのフィードバックストリームを間隔で定期的に使用することが推奨されます。
フィードバックストリームは、非アクティブなデバイスに関する情報を提供します。この情報は、モバイルアプリケーションが頻繁に使用されていない場合は、頻繁に(すべて 2 時間または 3 時間)消費できます。
Transport Layer Security (TLS)を使用するように apns コンポーネントを設定するには、Security Guide の Configuring Transport Security for Camel Components の章を参照してください
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-apns</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

URI 形式

通知を送信するには、以下を実行します。
apns:notify[?options]
Copy to Clipboard Toggle word wrap
フィードバックを利用するには、以下を実行します。
apns:consumer[?options]
Copy to Clipboard Toggle word wrap

オプション

プロデューサー

Expand
プロパティー デフォルト 説明
トークン デフォルトでは空です。通知するデバイスに関連するトークンを静的に宣言する場合は、このプロパティーを設定します。トークンはコンマで区切ります。

コンシューマー

Expand
プロパティー デフォルト 説明
delay 3600 各ポーリング間の遅延(秒単位)。
initialDelay 10 ポーリングが開始されるまでの秒数。
timeUnit SECONDS ポーリングの時間単位。
userFixedDelay true true の場合は、プール間の固定遅延を使用します。そうでない場合は、固定レートが使用されます。詳細は、JDK の ScheduledExecutorService を参照してください。
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

コンポーネント

ApnsComponentcom.notnoop.apns.ApnsService で設定する必要があります。このサービスは、org.apache.camel.component.apns.factory.ApnsServiceFactory を使用して作成および設定できます。例については、以下を参照してください。詳細は、テストソースコード を参照してください。

エクスチェンジデータ形式

Camel が非アクティブなデバイスに対応するフィードバックデータを取得すると、InactiveDevice オブジェクトのリストを取得します。取得したリストの各 InactiveDevice オブジェクトは In body として設定され、コンシューマーエンドポイントによって処理されます。

メッセージヘッダー

Camel Apns はこれらのヘッダーを使用します。
Expand
プロパティー デフォルト 説明
CamelApnsTokens デフォルトでは空です。
CamelApnsMessageType 文字列、ペイロード、APNS_NOTIFICATION メッセージタイプとして PAYLOAD を選択すると、メッセージは APNS ペイロードと見なされ、そのまま送信されます。STRING を選択すると、メッセージは APNS ペイロードに変換されます。APNS_NOTIFICATION は、メッセージボディーを com.notnoop.apns.ApnsNotification タイプとして送信するために使用されます。

ApnsServiceFactory Builder コールバック

ApnsServiceFactory には、デフォルトの ApnsServiceBuilder インスタンスの設定または置き換えに使用できる空のコールバックメソッドが含まれています。メソッドの形式は以下のとおりです。
protected ApnsServiceBuilder configureServiceBuilder(ApnsServiceBuilder serviceBuilder);
Copy to Clipboard Toggle word wrap
これは以下の方法で使用されます。
ApnsServiceFactory proxiedApnsServiceFactory = new ApnsServiceFactory(){

  @Override
  protected ApnsServiceBuilder configureServiceBuilder(ApnsServiceBuilder serviceBuilder) {
    return serviceBuilder.withSocksProxy("my.proxy.com", 6666);
  }

};
Copy to Clipboard Toggle word wrap

サンプル

Camel Xml ルート

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

	<!-- Replace by desired values -->
	<bean id="apnsServiceFactory" class="org.apache.camel.component.apns.factory.ApnsServiceFactory">

		<!-- Optional configuration of feedback host and port -->
		<!-- <property name="feedbackHost" value="localhost" /> -->
		<!-- <property name="feedbackPort" value="7843" /> -->

		<!-- Optional configuration of gateway host and port -->
		<!-- <property name="gatewayHost" value="localhost" /> -->
		<!-- <property name="gatewayPort" value="7654" /> -->

		<!-- Declaration of certificate used -->
                <!-- from Camel 2.11 onwards you can use prefix: classpath:, file: to refer to load the certificate from classpath or file. Default it classpath -->
		<property name="certificatePath" value="certificate.p12" />
		<property name="certificatePassword" value="MyCertPassword" />

		<!-- Optional connection strategy - By Default: No need to configure -->
		<!-- Possible options: NON_BLOCKING, QUEUE, POOL or Nothing -->
		<!-- <property name="connectionStrategy" value="POOL" /> -->
		<!-- Optional pool size -->
		<!-- <property name="poolSize" value="15" /> -->

		<!-- Optional connection strategy - By Default: No need to configure -->
		<!-- Possible options: EVERY_HALF_HOUR, EVERY_NOTIFICATION or Nothing (Corresponds to NEVER javapns option) -->
		<!-- <property name="reconnectionPolicy" value="EVERY_HALF_HOUR" /> -->
	</bean>

	<bean id="apnsService" factory-bean="apnsServiceFactory" factory-method="getApnsService" />

	<!-- Replace this declaration by wanted configuration -->
	<bean id="apns" class="org.apache.camel.component.apns.ApnsComponent">
		<property name="apnsService" ref="apnsService" />
	</bean>

	<camelContext id="camel-apns-test" xmlns="http://camel.apache.org/schema/spring">
        	<route id="apns-test">
                	<from uri="apns:consumer?initialDelay=10&elay=3600&imeUnit=SECONDS" />
        	        <to uri="log:org.apache.camel.component.apns?showAll=true&ultiline=true" />
                	<to uri="mock:result" />
        	</route>
	</camelContext>

</beans>

Copy to Clipboard Toggle word wrap

Camel Java ルート

camel コンテキストを作成し、プログラムで apns コンポーネントを宣言します。

    protected CamelContext createCamelContext() throws Exception {
        CamelContext camelContext = super.createCamelContext();

        ApnsServiceFactory apnsServiceFactory = new ApnsServiceFactory();
        apnsServiceFactory.setCertificatePath("classpath:/certificate.p12");
        apnsServiceFactory.setCertificatePassword("MyCertPassword");

        ApnsService apnsService = apnsServiceFactory.getApnsService(camelContext);

        ApnsComponent apnsComponent = new ApnsComponent(apnsService);
        camelContext.addComponent("apns", apnsComponent);

        return camelContext;
    }

Copy to Clipboard Toggle word wrap

ApnsProducer - iOS ターゲットデバイスがヘッダー経由で動的に設定された "CamelApnsTokens"

    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() throws Exception {
                from("direct:test")
                    .setHeader(ApnsConstants.HEADER_TOKENS, constant(IOS_DEVICE_TOKEN))
                    .to("apns:notify");
                }
        }
    }

Copy to Clipboard Toggle word wrap

ApnsProducer - iOS ターゲットデバイスが URI 経由で静的に設定される

    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() throws Exception {
                from("direct:test").
                to("apns:notify?tokens=" + IOS_DEVICE_TOKEN);
            }
        };
    }

Copy to Clipboard Toggle word wrap

ApnsConsumer

from("apns:consumer?initialDelay=10&delay=3600&timeUnit=SECONDS")
    .to("log:com.apache.camel.component.apns?showAll=true&multiline=true")
    .to("mock:result");

Copy to Clipboard Toggle word wrap

関連項目

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat