Slide 1

Slide 1 text

%FWFMPQFST*0 ాதɹ޹໌ɹϞόΠϧΞϓϦαʔϏε෦ ⡥$MBTTNFUIPE *OD ೥݄೔ "OESPJEʔJ04։ൃൺֱʙJ04Τϯ δχΞ͔Βݟͨ"OESPJEͷΞϨίϨʙ

Slide 2

Slide 2 text

ࣗݾ঺հ w ాத޹໌ w IUUQEFWDMBTTNFUIPEKQBVUIPSUBOBLBUBLBBLJ w ϞόΠϧΞϓϦαʔϏε෦ॴଐ w J04։ൃ୲౰ ⡥$MBTTNFUIPE *OD

Slide 3

Slide 3 text

Ѫ஌ݝʹॅΜͰ͍ͨ͜ͱ͋Γ·͢ ⡥$MBTTNFUIPE *OD

Slide 4

Slide 4 text

ฐࣾͷΑ͋͘Δཁ݅ w "OESPJEJ04ฒߦ։ൃ w ಉ࣌ϦϦʔε w J04ઌߦϦϦʔεͱ͍͏Ҋ݅΋͋Γ w "QQMFͷ৹ࠪظؒΛ౿·͑ͯJ04Λલ౗͠Ͱ։ൃ͢Δͱ͍͏͜ ͱ΋͋Γ ⡥$MBTTNFUIPE *OD

Slide 5

Slide 5 text

ฐࣾͷΑ͋͘Δ։ൃମ੍ ⡥$MBTTNFUIPE *OD "OESPJEJ04։ൃऀؒͰίʔυϨϏϡʔΛߦ͏͜ͱ΋͋Δ

Slide 6

Slide 6 text

ຊ୊ ⡥$MBTTNFUIPE *OD

Slide 7

Slide 7 text

ϞόΠϧ։ൃʹ͓͍ͯ஫ҙ͢Δ఺ w ରԠ04όʔδϣϯʹ͍ͭͯ w ڞ௨ͷυΩϡϝϯτʹ͍ͭͯ w ࣮૷ํ਑ʹ͍ͭͯ ⡥$MBTTNFUIPE *OD

Slide 8

Slide 8 text

ϞόΠϧ։ൃʹ͓͍ͯ஫ҙ͢Δ఺ w ରԠ04όʔδϣϯʹ͍ͭͯ w ڞ௨ͷυΩϡϝϯτʹ͍ͭͯ w ࣮૷ํ਑ʹ͍ͭͯ ⡥$MBTTNFUIPE *OD

Slide 9

Slide 9 text

ରԠ04όʔδϣϯʹ͍ͭͯ w "OESPJE ⡥$MBTTNFUIPE *OD IUUQEFWFMPQFSBOESPJEDPNJOUMKBBCPVUEBTICPBSET JOEFYIUNM

Slide 10

Slide 10 text

ରԠ04όʔδϣϯʹ͍ͭͯ w "OESPJE w Yܥ͸γΣΞ͕ఔ౓͋ΔͷͰαϙʔτͤ͟ΔΛಘͳ͍ঢ় گ͕ଟ͍ w ͔Β͸8FC7JFX͕$IPSPNFϕʔεʹมߋ͞Ε͍ͯΔͨΊɺ 8FC7JFXΛར༻͢ΔҊ݅͸஫ҙ͕ඞཁ ⡥$MBTTNFUIPE *OD

Slide 11

Slide 11 text

ରԠ04όʔδϣϯʹ͍ͭͯ w J04 ⡥$MBTTNFUIPE *OD IUUQTEFWFMPQFSBQQMFDPNTVQQPSUBQQTUPSFKQ

Slide 12

Slide 12 text

ରԠ04όʔδϣϯʹ͍ͭͯ w J04 w 4XJGUͰ৽نͰ࡞੒͢Δ৔߹͸J04Ҏ্ਪ঑ w 4XJGU$PDPB1PETͰ&NCFEGSBNFXPSL͕ར༻Ͱ͖Δͨ Ί w ͻͱͭલͷόʔδϣϯʢJ04ʣରԠͰͷγΣΞ͸֬อ Ͱ͖Δ ⡥$MBTTNFUIPE *OD

Slide 13

Slide 13 text

ରԠ04όʔδϣϯʹ͍ͭͯ w J04 w 9DPEFͷόʔδϣϯΞοϓରԠʹ͸஫ҙ w 9DPEFͷόʔδϣϯʹΑͬͯαϙʔτ͞ΕΔ4XJGUͷόʔ δϣϯ͕ҧ͏ w 9DPEF4XJGU w 9DPEF4XJGU w 9DPEF4XJGU w 9DPEF4XJGU w 9DPEF4XJGU w 9DPEF4XJGU ⡥$MBTTNFUIPE *OD

Slide 14

Slide 14 text

ରԠ04όʔδϣϯʹ͍ͭͯ w "OESPJE w ରԠ04͸ଟ͍ w 8FC7JFXରԠʹ஫ҙ w #-&Ҋ݅ʹ஫ҙ w J04 w 4XJGUͷόʔδϣϯʹ஫ҙ w "54ରԠ ⡥$MBTTNFUIPE *OD

Slide 15

Slide 15 text

ϞόΠϧ։ൃʹ͓͍ͯ஫ҙ͢Δ఺ w ରԠ04όʔδϣϯʹ͍ͭͯ w ڞ௨ͷυΩϡϝϯτʹ͍ͭͯ w ࣮૷ํ਑ʹ͍ͭͯ ⡥$MBTTNFUIPE *OD

Slide 16

Slide 16 text

ڞ௨ͷυΩϡϝϯτʹ͍ͭͯ ⡥$MBTTNFUIPE *OD w ͓٬༷ͱ։ൃଆؒͰΞϓϦͷػೳΛ࣮ݱ͢ΔͨΊʹඞ ཁͳ΋ͷΛચ͍ग़͓ͯ͘͠ w "OESPJEJ04։ൃऀͷؒͰ΋ڞ௨ͷೝࣝΛ࣋ͯΔ υΩϡϝϯτΛ࡞੒͓ͯ͘͠

Slide 17

Slide 17 text

ڞ௨ͷυΩϡϝϯτʹ͍ͭͯ ⡥$MBTTNFUIPE *OD

Slide 18

Slide 18 text

ڞ௨ͷυΩϡϝϯτʹ͍ͭͯ ⡥$MBTTNFUIPE *OD ͸͡ΊΑ͏ཁ݅ఆٛdϏΪφʔ͔Βϕςϥϯ·Ͱ

Slide 19

Slide 19 text

ϞόΠϧ։ൃʹ͓͍ͯ஫ҙ͢Δ఺ w ରԠ04όʔδϣϯʹ͍ͭͯ w ڞ௨ͷυΩϡϝϯτʹ͍ͭͯ w ࣮૷ํ਑ʹ͍ͭͯ ⡥$MBTTNFUIPE *OD

Slide 20

Slide 20 text

࣮૷ํ਑ʹ͍ͭͯ w ։ൃ؀ڥɺ࣮૷ํ਑ʹ͍ͭͯ͸ॳظஈ֊Ͱܾఆ͓ͯ͠ ͘ w ܾఆͨ͠಺༰͸υΩϡϝϯτͱͯ͠࢒͓ͯ͘͠ w ։ൃ؀ڥˠ(JU)VCͷ3&"%.&ʹهࡌ w ࣮૷ํ਑ˠ8JLJʹهࡌ w ৽ͨͳνʔϜϝϯόʔ͕ՃΘͬͨࡍʹҰཡͰ֬ೝͰ͖ ΔυΩϡϝϯτΛ੔උ͓ͯ͘͠ʢ8JLJ౳Λ׆༻ʣ w "1*࢓༷΍ཁ݅ఆٛɺઃܭͷࢿྉ͕ҰཡͰ֬ೝͰ͖ΔΑ͏ʹ͠ ͓ͯ͘ ⡥$MBTTNFUIPE *OD

Slide 21

Slide 21 text

࣮૷ํ਑ͷڞ༗ ⡥$MBTTNFUIPE *OD ύοέʔδ໊ VJ WJFXͳͲͷը໘දࣔʹؔΘΔΫϥεΛ·ͱΊΔ EPNBJO WJFXͷදࣔʹؔΘΔϩδοΫ΍ɺΤϯςΟςΟͳͲ ͷϞσϧΫϥεΛ·ͱΊΔ JOGSB "1*௨৴ɺ%#ΞΫηεɺσʔλอଘΛ·ͱΊΔ w ύοέʔδ෼ྨͷҰྫʢ˞͋͘·ͰҰྫͰ͢ʣ

Slide 22

Slide 22 text

ͦΕͧΕͷ෦඼ΛͲ͜ʹ഑ஔ͢Δ͔ʜ ⡥$MBTTNFUIPE *OD

Slide 23

Slide 23 text

VJ ⡥$MBTTNFUIPE *OD

Slide 24

Slide 24 text

VJ ⡥$MBTTNFUIPE *OD

Slide 25

Slide 25 text

EPNBJO ⡥$MBTTNFUIPE *OD

Slide 26

Slide 26 text

EPNBJO ⡥$MBTTNFUIPE *OD

Slide 27

Slide 27 text

JOGSB ⡥$MBTTNFUIPE *OD

Slide 28

Slide 28 text

JOGSB ⡥$MBTTNFUIPE *OD

Slide 29

Slide 29 text

࣮૷ํ਑ʹ͍ͭͯ w ը໘ͷ࡞੒ํ๏ʹؔͯ͠͸04ʹґଘ͍ͯ͠Δͱ͜Ζ͕ େ͖͍ͷͰɺϨϏϡʔͰ͖ΔΑ͏ʹͳΔ·Ͱ͕͔͔࣌ؒ Δ w ϓϧϦΫΤετʹ͸मਖ਼ͨ͠ը໘ͷεΫϦʔϯγϣοτ Λషͬͯ΋Β͏ w "OESPJE w 9.-ϑΝΠϧΛΰϦΰϦฤू͢Δ w J04 w 4UPSZ#PBSEΛ࢖͏ ⡥$MBTTNFUIPE *OD

Slide 30

Slide 30 text

࣮૷ํ਑ʹ͍ͭͯ ⡥$MBTTNFUIPE *OD

Slide 31

Slide 31 text

࣮૷ํ਑ʹ͍ͭͯ ⡥$MBTTNFUIPE *OD

Slide 32

Slide 32 text

࣮૷ํ਑ʹ͍ͭͯ w ֤෦඼ͷ୲౰ൣғΛ໌֬ʹ͢Δ͜ͱͰίʔυϨϏϡʔ ͷࡍʹ෦඼Λཧղ͢Δ·ͰͷίετΛܰݮ͢Δ w ϩδοΫɺϞσϧΛ෼཭͢Δ͜ͱͰ"OESPJEJ04 ։ൃऀ͕ίʔυϨϏϡʔͰ͖ΔൣғΛ૿΍͢ w ࣮૷࿙ΕΛແ͘͢ ⡥$MBTTNFUIPE *OD

Slide 33

Slide 33 text

ΞϨίϨ͋Γ·͕͢ ݁ہ͸ࣗΒखΛಈ͔࣮ͯ͠૷ͯ͠ ͍͔ͳ͍ͱ਎ʹ͔ͭͳ͍ ⡥$MBTTNFUIPE *OD

Slide 34

Slide 34 text

ࣗΒखΛಈ͔͢

Slide 35

Slide 35 text

1VTI௨஌Λ "OESPJEͱJ04Ͱ ࣮૷ͯ͠ΈΔ

Slide 36

Slide 36 text

Slide 37

Slide 37 text

1VTI௨஌Λ࣮૷ͯ͠ΈΔ w 1VTIαʔϏεͷొ࿥ w ($.ʢ(PPHMF$MPVE.FTTBHJOHʣ w "1/4ʢ"QQMF1VTI/PUJpDBUJPO4FSWJDFʣ w 1VTI௨஌ͷ࡞੒ w 1VTIϝοηʔδΛ࡞੒ w 1VTI௨஌ͷड৴ w 04ຖʹड৴ॲཧΛߦ͏ ⡥$MBTTNFUIPE *OD

Slide 38

Slide 38 text

1VTI௨஌Λ࣮૷ͯ͠ΈΔ ⡥$MBTTNFUIPE *OD IUUQTBXTBNB[PODPNKQTOT "NB[PO4JNQMF/PUJpDBUJPO4FSWJDF 4/4

Slide 39

Slide 39 text

"OESPJEଆͷ࡞ۀ ⡥$MBTTNFUIPE *OD w ($.΁ͷొ࿥ w ϥΠϒϥϦͷΠϯϙʔτ w ύʔϛογϣϯͷઃఆ w 1VTIड৴ॲཧͷ࣮૷ w "NB[PO$PHOJUP*%ͷऔಘ w "NB[PO4/4΁τʔΫϯͷૹ৴ w ड৴࣌ͷॲཧͷ࣮૷

Slide 40

Slide 40 text

J04ଆͷ࡞ۀ ⡥$MBTTNFUIPE *OD w "1/4΁ͷొ࿥ w ϥΠϒϥϦͷΠϯϙʔτ w "NB[PO$PHOJUP*%ͷऔಘ w "NB[PO4/4΁τʔΫϯͷૹ৴ w ड৴࣌ͷॲཧ

Slide 41

Slide 41 text

"84ଆͷ࡞ۀ ⡥$MBTTNFUIPE *OD w "NB[PO$PHOJUPͰ*EFOUJUZQPPMΛ࡞੒ w "NB[PO4/4Ͱ(PPHMF"OESPJEͷ1MBUGPSN Λ࡞੒ w "NB[PO4/4Ͱ"QQMFJ04%FWͷ1MBUGPSNΛ ࡞੒ w "NB[PO4/4Ͱ5PQJDΛ࡞੒

Slide 42

Slide 42 text

։ൃ؀ڥ w "OESPJE w "OESPJE4UVEJP w +BWB w J04 w 9DPEF w $PDPB1PETPS$BSUIBHF w 4XJGU ⡥$MBTTNFUIPE *OD

Slide 43

Slide 43 text

"OESPJEଆͷ࡞ۀ ⡥$MBTTNFUIPE *OD w ($.΁ͷొ࿥ w ϥΠϒϥϦͷΠϯϙʔτ w ઃఆϑΝΠϧͷΠϯϙʔτ w ύʔϛογϣϯͷઃఆ w 1VTIड৴ॲཧͷ࣮૷ w "NB[PO$PHOJUP*%ͷऔಘ w "NB[PO4/4΁τʔΫϯͷૹ৴ w ड৴࣌ͷॲཧͷ࣮૷

Slide 44

Slide 44 text

($.΁ͷొ࿥ ⡥$MBTTNFUIPE *OD IUUQTEFWFMPQFSTHPPHMFDPNDMPVENFTTBHJOH

Slide 45

Slide 45 text

($.΁ͷొ࿥ ⡥$MBTTNFUIPE *OD w HPPHMFTFSWJDFTKTPOΛμ΢ϯϩʔυ͢Δ

Slide 46

Slide 46 text

($.΁ͷొ࿥ ⡥$MBTTNFUIPE *OD w HPPHMFTFSWJDFTKTPOΛϓϩδΣΫτʹ௥Ճ͢Δ

Slide 47

Slide 47 text

ϥΠϒϥϦͷΠϯϙʔτ ⡥$MBTTNFUIPE *OD …
 
 android {
 …
 }
 
 dependencies {
 … 
 compile 'com.amazonaws:aws-android-sdk-cognito:2.+'
 compile 'com.amazonaws:aws-android-sdk-sns:2.+'
 
 } w CVJMEHSBEMFΛฤू w "84ͷ4%,Λࢦఆ͢Δ

Slide 48

Slide 48 text

ϥΠϒϥϦͷΠϯϙʔτ ⡥$MBTTNFUIPE *OD apply plugin: 'com.google.gms.google-services'
 
 android {
 …
 }
 
 dependencies {
 …
 
 compile "com.google.android.gms:play-services:8.3.0"
 
 …
 } w CVJMEHSBEMFΛฤू w ($.༻ͷϥΠϒϥϦΛద༻͢Δ

Slide 49

Slide 49 text

ϥΠϒϥϦͷΠϯϙʔτ ⡥$MBTTNFUIPE *OD w "OESPJE4UVEJP͔ΒϥΠϒϥϦΛΠϯϙʔτ͢Δ w ʮ4ZOD1SPKFDUXJUI(SBEMF'JMFTʯΛ࣮ߦ͢Δ

Slide 50

Slide 50 text

ύʔϛογϣϯͷઃఆ ⡥$MBTTNFUIPE *OD 
 
 
 
 
 
 
 
 
 w "OESPJE.BOJGFTUYNMΛฤू w ύʔϛογϣϯͷઃఆ

Slide 51

Slide 51 text

1VTIड৴ॲཧͷ࣮૷ ⡥$MBTTNFUIPE *OD 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 w "OESPJE.BOJGFTUYNMΛฤू

Slide 52

Slide 52 text

1VTIड৴ॲཧͷ࣮૷ ⡥$MBTTNFUIPE *OD public class MsgGcmListenerService extends GcmListenerService {
 
 static final String TAG = MsgGcmListenerService.class.getSimpleName();
 
 @Override
 public void onMessageReceived(String from, Bundle data) {
 String message = data.getString("message");
 sendNotification(message);
 sendBroadcast(message);
 }
 
 void sendNotification(String message) {
 Intent intent = new Intent(this, MainActivity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
 PendingIntent.FLAG_ONE_SHOT);
 
 Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
 NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
 .setSmallIcon(R.mipmap.ic_launcher)
 .setContentTitle("Message received!")
 .setContentText(message)
 .setAutoCancel(true)
 .setSound(defaultSoundUri)
 .setContentIntent(pendingIntent);
 
 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 manager.notify(0, notificationBuilder.build());
 }
 
 void sendBroadcast(String message) {
 Intent broadcastIntent = new Intent();
 broadcastIntent.putExtra("message", message);
 broadcastIntent.setAction("MESSAGE_RECEIVED");
 getBaseContext().sendBroadcast(broadcastIntent);
 }
 
 } w ($.͔Βϝοηʔδ͕ฦ͖ͬͯͨ࣌ͷॲཧ

Slide 53

Slide 53 text

1VTIड৴ॲཧͷ࣮૷ ⡥$MBTTNFUIPE *OD …
 
 void sendNotification(String message) {
 Intent intent = new Intent(this, MainActivity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
 PendingIntent.FLAG_ONE_SHOT);
 
 Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
 NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
 .setSmallIcon(R.mipmap.ic_launcher)
 .setContentTitle("Message received!")
 .setContentText(message)
 .setAutoCancel(true)
 .setSound(defaultSoundUri)
 .setContentIntent(pendingIntent);
 
 NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
 manager.notify(0, notificationBuilder.build());
 }
 
 ... w ௨஌ηϯλʔʹදࣔͤ͞Δ

Slide 54

Slide 54 text

1VTIड৴ॲཧͷ࣮૷ ⡥$MBTTNFUIPE *OD public class MsgGcmListenerService extends GcmListenerService {
 
 …
 
 void sendBroadcast(String message) {
 Intent broadcastIntent = new Intent();
 broadcastIntent.putExtra("message", message);
 broadcastIntent.setAction("MESSAGE_RECEIVED");
 getBaseContext().sendBroadcast(broadcastIntent);
 }
 
 } w ϝοηʔδΛड৴ͨ͜͠ͱΛ௨஌͢Δ

Slide 55

Slide 55 text

1VTIड৴ॲཧͷ࣮૷ ⡥$MBTTNFUIPE *OD public class RegistrationIntentService extends IntentService {
 
 public RegistrationIntentService() {
 super("RegistrationIntentService");
 }
 
 @Override
 protected void onHandleIntent(Intent intent) {
 if (intent != null) {
 try {
 InstanceID instanceID = InstanceID.getInstance(this);
 String token = instanceID.getToken(
 getString(R.string.gcm_defaultSenderId),
 GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
 Prefs.put("token", token);
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 }
 
 } w τʔΫϯऔಘॲཧʹͯτʔΫϯΛอ͓࣋ͯ͘͠

Slide 56

Slide 56 text

"NB[PO$PHOJUP*%ͷऔಘ ⡥$MBTTNFUIPE *OD void getCognitoId() {
 new Thread(new Runnable() {
 @Override
 public void run() {
 CognitoCachingCredentialsProvider provider = ɹɹɹɹɹɹɹɹɹnew CognitoCachingCredentialsProvider(
 self,
 COGNITO_IDENTITY_POOL_ID,
 AWS_REGION
 );
 final String identityId = provider.getIdentityId();
 Prefs.put("cognito_id", identityId);
 }
 }).start();
 } w $PHOJUP$BDIJOH$SFEFOUJBMT1SPWJEFSʹ $PHOJUP*EFOUJUZ1PPM*%Λࢦఆ͢Δ

Slide 57

Slide 57 text

"NB[PO4/4΁τʔΫϯͷૹ৴ ⡥$MBTTNFUIPE *OD void sendToken() {
 AmazonSNSClient snsClient = new AmazonSNSClient(mProvider);
 snsClient.setRegion(Region.getRegion(AWS_REGION));
 CreatePlatformEndpointRequest createRequest = new CreatePlatformEndpointRequest();
 createRequest.setPlatformApplicationArn(AWS_SNS_APPLICATION_ARN);
 String token = Prefs.get("token");
 createRequest.setToken(token);
 CreatePlatformEndpointResult platformEndpoint = snsClient.createPlatformEndpoint(createRequest);
 String endpointArn = platformEndpoint.getEndpointArn();
 snsClient.subscribe(AWS_SNS_SUBSCRIBE_TOPIC_ARN, "application", endpointArn);
 } w ࢦఆͨ͠5PQJDΛ4VTDSJCF͢Δ

Slide 58

Slide 58 text

ड৴࣌ͷॲཧͷ࣮૷ ⡥$MBTTNFUIPE *OD private MessageBroadcastReceiver mReceiver;
 
 public class MessageBroadcastReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
 Bundle bundle = intent.getExtras();
 String message = bundle.getString("message");
 Toast.makeText(context, message, Toast.LENGTH_LONG).show();
 }
 }
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 …
 
 mReceiver = new MessageBroadcastReceiver();
 IntentFilter intentFilter = new IntentFilter();
 intentFilter.addAction("MESSAGE_RECEIVED");
 registerReceiver(mReceiver, intentFilter);
 }

Slide 59

Slide 59 text

J04ଆͷ࡞ۀ ⡥$MBTTNFUIPE *OD w "1/4΁ͷొ࿥ w ϥΠϒϥϦͷΠϯϙʔτ w "NB[PO$PHOJUP*%ͷऔಘ w "NB[PO4/4΁τʔΫϯͷૹ৴ w ड৴࣌ͷॲཧ

Slide 60

Slide 60 text

"1/4΁ͷొ࿥ ⡥$MBTTNFUIPE *OD IUUQTEFWFMPQFSBQQMFDPNKQEPDVNFOUBUJPO 3FNPUF/PUJpDBUJPOT1(QEG

Slide 61

Slide 61 text

"1/4΁ͷొ࿥ ⡥$MBTTNFUIPE *OD w ΩʔνΣʔϯΞΫηεΛىಈͯ͠ೝূہʹূ໌ॻΛཁ ٻ͢Δ

Slide 62

Slide 62 text

"1/4΁ͷొ࿥ ⡥$MBTTNFUIPE *OD

Slide 63

Slide 63 text

"1/4΁ͷొ࿥ ⡥$MBTTNFUIPE *OD

Slide 64

Slide 64 text

"1/4΁ͷొ࿥ ⡥$MBTTNFUIPE *OD IUUQTEFWFMPQFSBQQMFDPNMJCSBSZJPTEPDVNFOUBUJPO /FUXPSLJOH*OUFSOFU$PODFQUVBM3FNPUF/PUJpDBUJPOT1( $IBQUFST"QQMF1VTI4FSWJDFIUNM

Slide 65

Slide 65 text

"1/4΁ͷొ࿥ ⡥$MBTTNFUIPE *OD w 1SPWJTJPOJOH1SPpMF͕ਖ਼͘͠ࢦఆ͞Ε͍ͯΔ͔֬ ೝ͢Δ

Slide 66

Slide 66 text

ϥΠϒϥϦͷΠϯϙʔτ ⡥$MBTTNFUIPE *OD platform :ios, '8.0' use_frameworks! target 'App' do pod 'AWSSNS' end w $PDPB1PETܦ༝ͰΠϯϙʔτ͢Δ w 1PEpMFΛฤू

Slide 67

Slide 67 text

ϥΠϒϥϦͷΠϯϙʔτ ⡥$MBTTNFUIPE *OD w $PDPB1PETܦ༝ͰΠϯϙʔτ͢Δ w QPEJOTUBMMίϚϯυΛ࣮ߦ ➜ app git:(develop) ✗ bundle exec pod install

Slide 68

Slide 68 text

"NB[PO$PHOJUP*%ͷऔಘ ⡥$MBTTNFUIPE *OD func application( application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let credentialsProvider = AWSCognitoCredentialsProvider( regionType: AWSRegionType.APNortheast1, identityPoolId: CognitoIdentityPoolId) let defaultServiceConfiguration = AWSServiceConfiguration( region: AWSRegionType.APNortheast1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = defaultServiceConfiguration self.registerForRemoteNotifications() return true } w "844FSWJDF.BOBHFSͷઃఆΛ࣮ࢪ w $PHOJUP*EFOUJUZ1PPM*E͸"84Ͱ࡞੒ͨ͠΋ͷΛࢦఆ͢Δ

Slide 69

Slide 69 text

"NB[PO4/4΁τʔΫϯͷૹ৴ ⡥$MBTTNFUIPE *OD func application( application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { let deviceTokenString = "\(deviceToken)" .stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:"<>")) .stringByReplacingOccurrencesOfString(" ", withString: "") … } w τʔΫϯऔಘ࣌ʹݺ͹ΕΔϝιου͔ΒτʔΫϯΛऔ ಘ͢Δ

Slide 70

Slide 70 text

"NB[PO4/4΁τʔΫϯͷૹ৴ ⡥$MBTTNFUIPE *OD … let sns = AWSSNS.defaultSNS() let request = AWSSNSCreatePlatformEndpointInput() request.token = deviceTokenString request.platformApplicationArn = AWSSNSApplicationArn sns.createPlatformEndpoint(request).continueWithExecutor( AWSExecutor.mainThreadExecutor(), withBlock: { (task: AWSTask!) -> AnyObject! in if task.error != nil { print("Error: \(task.error)") } else { let createEndpointResponse = task.result as! AWSSNSCreateEndpointResponse let subscribeRequest = AWSSNSSubscribeInput() subscribeRequest.topicArn = self.AWSSNSSubscribeTopicArn subscribeRequest.endpoint = createEndpointResponse.endpointArn subscribeRequest.protocols = "Application" sns.subscribe(subscribeRequest) } return nil }) } w ࢦఆͨ͠5PQJDΛ4VTDSJCF͢Δ

Slide 71

Slide 71 text

ड৴࣌ͷॲཧ ⡥$MBTTNFUIPE *OD func application( application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { if application.applicationState == .Active { if let aps = userInfo["aps"] { if let alert = aps["alert"] { let alertController = UIAlertController( title: nil, message: alert, preferredStyle: .Alert) alertController.addAction( UIAlertAction( title: "OK", style: .Default, handler: nil)) self.window?.rootViewController?.presentViewController( alertController, animated: true, completion: nil) } } } } w 1VTIΛड৴ͨ࣌͠ͷॲཧΛهࡌ͢Δ

Slide 72

Slide 72 text

"84ଆͷ࡞ۀ ⡥$MBTTNFUIPE *OD w "NB[PO$PHOJUPͰ*EFOUJUZQPPMΛ࡞੒ w "NB[PO4/4Ͱ(PPHMF"OESPJEͷ1MBUGPSN Λ࡞੒ w "NB[PO4/4Ͱ"QQMFJ04%FWͷ1MBUGPSNΛ ࡞੒ w "NB[PO4/4Ͱ5PQJDΛ࡞੒

Slide 73

Slide 73 text

"NB[PO$PHOJUPͰ*EFOUJUZQPPMΛ࡞੒ ⡥$MBTTNFUIPE *OD IUUQBXTBNB[PODPNKQDPHOJUP

Slide 74

Slide 74 text

"NB[PO$PHOJUPͰ*EFOUJUZQPPMΛ࡞੒ ⡥$MBTTNFUIPE *OD

Slide 75

Slide 75 text

"NB[PO4/4Ͱ(PPHMF"OESPJEͷ1MBUGPSNΛ࡞੒ ⡥$MBTTNFUIPE *OD IUUQTBXTBNB[PODPNKQTOT

Slide 76

Slide 76 text

"NB[PO4/4Ͱ"QQMFJ04%FWͷ1MBUGPSNΛ࡞੒ ⡥$MBTTNFUIPE *OD IUUQTBXTBNB[PODPNKQTOT

Slide 77

Slide 77 text

"NB[PO4/4Ͱ5PQJDΛ࡞੒ ⡥$MBTTNFUIPE *OD IUUQTBXTBNB[PODPNKQTOT

Slide 78

Slide 78 text

%&.0 ⡥$MBTTNFUIPE *OD

Slide 79

Slide 79 text

⡥$MBTTNFUIPE *OD

Slide 80

Slide 80 text

⡥$MBTTNFUIPE *OD

Slide 81

Slide 81 text

·ͱΊ ⡥$MBTTNFUIPE *OD w ڞ௨ͷυΩϡϝϯτΛ༻ҙ͢Δ w ϊΠζΛݮΒͯ͠։ൃऀಉ͕࢜ίʔυϨϏϡʔͰ͖Δ ൣғΛ૿΍͢ w खΛಈ͔͢

Slide 82

Slide 82 text

%FWFMPQFST*0 ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ εϥΠυ͸ޙ೔ϒϩάͰެ։͠·͢ɻ " ⡥$MBTTNFUIPE *OD #cmdevio2016