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

客戶端代碼:連接地址html

服務器代碼:連接地址  連接地址java

這裏記錄下iOS消息推送實現的全過程apache

首先,申請祕鑰。服務器

以後進入連接地址開發者,固然你得有啊!!!!!app

點擊這裏ide

如圖:測試

下面實現建立推送證書(和開發證書不同)ui

接上圖:this

下圖:spa

第一步完:

爲證書添加推送功能:

點擊以後的效果:

點擊以後

 

 

 

到如今咱們已經有倆個證書了,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 *)application
didReceiveRemoteNotification:(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

相關文章
相關標籤/搜索