【轉】iOS訊息推送實現過程記錄

來源:互聯網
上載者:User

標籤:option   註冊   idfa   清理   過程   開發   nts   receive   users   

用戶端代碼:連結地址

伺服器代碼:連結地址  連結地址

這裡記錄下iOS訊息推送實現的全過程

首先,申請秘鑰。

之後進入連結地址開發人員,當然你得有啊!!!!!

點擊這裡

下面實現建立推送認證(和開發認證不一樣)

接:

第一步完:

為認證添加推送功能:

點擊之後的效果:

點擊之後

 

 

 

到現在我們已經有倆個認證了,aps_development.cer 和CertificateSigningRequest.certSigningRequest。

下面的步驟比較關鍵。我們需要把機器中的之前的認證清理乾淨,如果不清理乾淨的畫會出現如下錯誤:

Error Domain=NSCocoaErrorDomain Code=3000 "未找到應用程式的“aps-environment”的權利字串" UserInfo=0x17007d6c0 {NSLocalizedDescription=未找到應用程式的“aps-environment”的權利字串}

這個錯誤大概的意思就是認證不匹配的意思。

清理之後,我們點擊

將推送認證添加進去。

Capabilities中開啟Push Notifications 開關
在XCode7中這裡的開關不開啟,推送也是可以正常使用的,但是在XCode8中,這裡的開關必須要開啟,不然會報錯:

Error Domain=NSCocoaErrorDomain Code=3000 "未找到應用程式的“aps-environment”的授權字串" UserInfo={NSLocalizedDescription=未找到應用程式的“aps-environment”的授權字串}

之後我們匯出一個可以供伺服器端使用的。

 

以下代碼來著網上的活雷鋒貢獻。

下面附上用戶端代碼:  

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    // Override point for customization after application launch.            NSString* str = [UIDevice currentDevice];        if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey] != nil) {        //擷取應用程式訊息通知標記數(即小紅圈中的數字)        int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;        if (badge>0) {            //如果應用程式訊息通知標記數(即小紅圈中的數字)大於0,清除標記。            badge--;            //清除標記。清除小紅圈中數字,小紅圈中數字為0,小紅圈才會消除。            [UIApplication sharedApplication].applicationIconBadgeNumber = badge;        }    }    //訊息推送註冊    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge];            return YES;}-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{    NSString* token = [NSString stringWithFormat:@"%@",deviceToken];    NSLog(@"%@",token);        }- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {    NSString *error_str = [NSString stringWithFormat: @"%@", error];    NSLog(@"Failed to get token, error:%@", error_str);}- (void)application:(UIApplication *)applicationdidReceiveRemoteNotification:(NSDictionary *)userInfo{    //在此處理接收到的訊息。    NSLog(@"Receive remote notification : %@",userInfo);}

下面附上伺服器端代碼:

import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;import javapns.*;import javapns.back.PushNotificationManager;import javapns.back.SSLConnectionHelper;import javapns.data.Device;import javapns.data.PayLoad;public class PushDemo {    public static void main(String[] args) throws Exception {         try            {                //從用戶端擷取的deviceToken,在此為了測試簡單,寫固定的一個測試裝置標識。               String deviceToken = "9f8e0099 1e72c4ab ca835ec3 994e93d9 a09ce215 62d91bb3 6e929a33 02c29456";                               System.out.println("Push Start deviceToken:" + deviceToken);                //定義訊息模式                PayLoad payLoad = new PayLoad();                payLoad.addAlert("this is test!");                payLoad.addBadge(1);//訊息推送標記數,小紅圈中顯示的數字。                payLoad.addSound("default");                //註冊deviceToken                PushNotificationManager pushManager = PushNotificationManager.getInstance();                pushManager.addDevice("iPhone", deviceToken);                //串連APNS                String host = "gateway.sandbox.push.apple.com";                //String host = "gateway.push.apple.com";                int port = 2195;                String certificatePath = "/Users/tokou/Desktop/PushDemo.p12";//前面產生的用於JAVA後台串連APNS服務的*.p12檔案位置                String certificatePassword = "123";//p12檔案密碼。                pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);                //發送推送                Device client = pushManager.getDevice("iPhone");                System.out.println("推送訊息: " + client.getToken()+"\n"+payLoad.toString() +" ");                pushManager.sendNotification(client, payLoad);                //停止串連APNS                pushManager.stopConnection();                //刪除deviceToken                pushManager.removeDevice("iPhone");                System.out.println("Push End");            }            catch (Exception ex)            {                ex.printStackTrace();            }    }}

原文地址:http://www.aiuxian.com/article/p-1327006.html

 

【轉】iOS訊息推送實現過程記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.