第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>
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
通知を送信するには、以下を実行します。
apns:notify[?options]
フィードバックを利用するには、以下を実行します。
apns:consumer[?options]
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
プロデューサー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
| プロパティー | デフォルト | 説明 |
|---|---|---|
トークン
|
デフォルトでは空です。通知するデバイスに関連するトークンを静的に宣言する場合は、このプロパティーを設定します。トークンはコンマで区切ります。 |
コンシューマー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
| プロパティー | デフォルト | 説明 |
|---|---|---|
delay
|
3600
|
各ポーリング間の遅延(秒単位)。 |
initialDelay
|
10
|
ポーリングが開始されるまでの秒数。 |
timeUnit
|
SECONDS
|
ポーリングの時間単位。 |
userFixedDelay
|
true
|
true の場合は、プール間の固定遅延を使用します。そうでない場合は、固定レートが使用されます。詳細は、JDK の ScheduledExecutorService を参照してください。
|
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ApnsComponent は com.notnoop.apns.ApnsService で設定する必要があります。このサービスは、org.apache.camel.component.apns.factory.ApnsServiceFactory を使用して作成および設定できます。例については、以下を参照してください。詳細は、テストソースコード を参照してください。
エクスチェンジデータ形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel が非アクティブなデバイスに対応するフィードバックデータを取得すると、InactiveDevice オブジェクトのリストを取得します。取得したリストの各 InactiveDevice オブジェクトは In body として設定され、コンシューマーエンドポイントによって処理されます。
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel Apns はこれらのヘッダーを使用します。
| プロパティー | デフォルト | 説明 |
|---|---|---|
CamelApnsTokens
|
デフォルトでは空です。 | |
CamelApnsMessageType
|
文字列、ペイロード、APNS_NOTIFICATION
|
メッセージタイプとして PAYLOAD を選択すると、メッセージは APNS ペイロードと見なされ、そのまま送信されます。STRING を選択すると、メッセージは APNS ペイロードに変換されます。APNS_NOTIFICATION は、メッセージボディーを com.notnoop.apns.ApnsNotification タイプとして送信するために使用されます。
|
ApnsServiceFactory Builder コールバック リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ApnsServiceFactory には、デフォルトの ApnsServiceBuilder インスタンスの設定または置き換えに使用できる空のコールバックメソッドが含まれています。メソッドの形式は以下のとおりです。
protected ApnsServiceBuilder configureServiceBuilder(ApnsServiceBuilder serviceBuilder);
ApnsServiceFactory proxiedApnsServiceFactory = new ApnsServiceFactory(){
@Override
protected ApnsServiceBuilder configureServiceBuilder(ApnsServiceBuilder serviceBuilder) {
return serviceBuilder.withSocksProxy("my.proxy.com", 6666);
}
};
サンプル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
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>
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;
}
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");
}
}
}
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);
}
};
}
ApnsConsumer リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
from("apns:consumer?initialDelay=10&delay=3600&timeUnit=SECONDS")
.to("log:com.apache.camel.component.apns?showAll=true&multiline=true")
.to("mock:result");
関連項目 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!