⑴ android 使用了極光推送.怎麼樣可以控制用
Ionic 集成 jpush(極光)推送之 IOS 篇
說明:這篇文章已經年代久遠,其中一些地方可能已經無效,僅做參考
極光推送官方版的 phonegap 插件在這里7。
由於官方版插件 ios 版暫時沒有打開通知的方法,所以在官方基礎上修改了下,修改後的插件放在了這里4,下面說明以修改後的插件為准。(感謝極光官方大神viper耐心幫助,同時也參考了下@lanceli1大神的cnodejs-ionic7項目)
極光賬戶設置部分可以參考小和尚的這篇9分享。
下面主要說明項目代碼部分修改。
新建一個 ionic項目
$ ionic start --id com.ionichina.ionicjpush ionic_jpush tabs
註:修改 id 為自己應用的 Bundle identifier
添加 IOS 平台
$ cd ionic_jpush
$ ionic platform add ios
安裝插件
$ ionic plugin add
等待時間比較長,你也可以像小和尚文章9里介紹的先下載下來,再安裝,但這個過程是跑不了的
(接下來,蛋疼的事情開始了)
修改配置
修改:ionic_jpushpluginscn.jpush.phonegap.JPushPluginsrciosPushConfig.plist
修改對應的APP_KEY和CHANNEL(渠道)為你自己申請的值,
注意
確保有如下代碼,不然後面 Xcode 運行會警告:
- <key>APS_FOR_PRODUCTION</key><string>0</string>
在 js 中添加通知實現
在app.js最後添加一個 push 工廠(參考了@lanceli1大神的Ccnodejs-ionic7項目)
- .factory('Push', function() { var push; return { setBadge: function(badge) { if (push) { console.log('jpush: set badge', badge);
- plugins.jPushPlugin.setBadge(badge);
- }
- }, setAlias: function(alias) { if (push) { console.log('jpush: set alias', alias);
- plugins.jPushPlugin.setAlias(alias);
- }
- }, check: function() { if (window.jpush && push) {
- plugins.jPushPlugin.(window.jpush); window.jpush = null;
- }
- }, init: function(notificationCallback) { console.log('jpush: start init-----------------------');
- push = window.plugins && window.plugins.jPushPlugin; if (push) { console.log('jpush: init');
- plugins.jPushPlugin.init();
- plugins.jPushPlugin.setDebugMode(true);
- plugins.jPushPlugin. = notificationCallback;
- plugins.jPushPlugin. = notificationCallback;
- }
- }
- };
- });
在 app.js 的 run 函數里定義通知回調函數
記得在 run 函數里引用 Push 先
- // push notification callback
- var notificationCallback = function(data) { console.log('received data :' + data); var notification = angular.fromJson(data); //app 是否處於正在運行狀態
- var isActive = notification.notification; // here add your code
- //ios
- if (ionic.Platform.isIOS()) { window.alert(notification);
- } else { //非ios(android)
- }
- };
在 $ionicPlatform.ready 里進行初始化
- //初始化Push.init(notificationCallback);//設置別名Push.setAlias("12345678");
編譯 IOS 項目
$ ionic build ios
(接下來,更蛋疼的事情開始了)
修改配置 IOS 項目(不要問我為啥)
修改 AppDelegate.m,
添加
- #import "APService.h"#import "JPushPlugin.h" //viper
didFinishLaunchingWithOptions函數中添加
- // Required#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
- if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { //可以添加自定義categories
- [APService :(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)
- categories:nil];
- } else { //categories 必須為nil
- [APService :(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)
- categories:nil];
- }#else
- //categories 必須為nil
- [APService :(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)
- categories:nil];#endif
- // Required
- [APService setupWithOption:launchOptions];
中添加
- // Required[APService registerDeviceToken:deviceToken];
- [APService setDebugMode];
添加函數
- - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Required
- [APService handleRemoteNotification:userInfo]; BOOL isActive; if (application.applicationState == UIApplicationStateActive) {
- isActive = TRUE;
- } else {
- isActive = FALSE;
- } NSDictionary *dict=[[NSMutableDictionary alloc] initWithDictionary:userInfo];
-
- [dict setValue: [[NSNumber alloc] initWithBool:isActive] forKey:@"isActive" ];
-
- [[NSNotificationCenter defaultCenter] postNotificationName:kJPushPlugReceiveNotificaiton
- object:dict] ;//viper
-
- }
OC 代碼算是完事兒,然後就是配置
修改項目 Capabilities,打開 Background Modes,勾選最後一項Remote notications
設置證書,這個就不教了,網上一大堆
Xcode 這邊就算配置完了
接下就是設置一些Xcode常規操作,編譯運行,從極光官方控制台發送一條通知,然後查看Xcode控制台,應該就會有推送的通知數據列印了。
下面的事兒你自己應該搞的定。