关于 Token Authentication鉴权,开发环境正常,生产环境无法接受推送问题

ios
收不到消息
标签: #<Tag:0x00007fb83b677938> #<Tag:0x00007fb83b6777d0>

(Jane) #1

我打包的应用在生产环境下可以正常接收推送,打包成iOS企业级应用后发布到我们的服务器再下载就无法接受推送了,我拿registration_id去jpush后台手动发送通知是可以接收到的,预估人数也是1,这是不是就说明我已经获得了token并传给了极光并且我的registration_id是生产环境的?我们的安卓端一切正常只有iOS的生产环境出现这个问题,而iOS与Android走的是同一个后台。以下为相关信息:

AppKey:e92e9028f58ece2782d563be
registration_id:101d855909633eed504
极光后台手动推送通知的messageid:54043196691466518

求尽快回复!这个节过完还没解决,小弟可能就要被杀了祭天了。


#2

消息是成功的,已成功发给了 Apple 服务器

本帖第三点,检查


(Jane) #3

依照第三点检查了,全都没有问题。。。


(Jane) #4

您好,我拿到了没接收到的messageid与send_NO
messageid : 63050395947778668
send_no : 1948622325
请帮我查看一下这条推送接收不到的原因,谢谢!


#5

这条消息显示环境不一致,后台是给 iOS 开发环境推送的消息

另外,你之前说

而你一开始给的 MessageID 就是官网推送的MessageID,则代表这条消息实际你是收到了的不是吗?

web推送可以收到,API推送不行,请自行对比二者推送历史-详情中的区别,一般是环境问题(iOS)、appkey不对、推送目标不一样,没有给Android或者iOS传值,alert为空等等。

API推送消息给iOS,需要指定推送的环境!请让后台修改apns_production,false是开发,true是生产。


(Jane) #6

您好,我是自己全都干的那种,后台也是我写的。。。


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.Notification;

public class PushExample {
    protected static final Logger LOG = LoggerFactory.getLogger(PushExample.class);

    protected static final String APP_KEY ="e92e9028f58ece2782d563be";
    protected static final String MASTER_SECRET = 

	public static final String TITLE = "警告!";
    public static final String ALERT = "您的车辆未在规定时间内行驶至指定路程,请进我的预警处理此条预警信息。";

    /**
     * 极光推送方法
     * @param platform 设备系统取值ios||android
     * @param registration_id 在手机上获取的唯一id,卸载APP后重装则id改变
     */
	public static void testSendPush(String platform,String registration_id) {
		ClientConfig clientConfig = ClientConfig.getInstance();
        final JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY, null, clientConfig);
        PushPayload payload;
        System.out.println("Jpush registration_id : "+registration_id);
        if (platform.equals("android")) {
        	 payload =  PushPayload.newBuilder()
        			.setPlatform(Platform.android())
        			.setAudience(Audience.registrationId(registration_id))
        			.setNotification(Notification.alert(ALERT))
        			.build();
		} else {
			 payload =  PushPayload.newBuilder()
        			.setPlatform(Platform.ios())
        			.setAudience(Audience.registrationId(registration_id))
        			.setNotification(Notification.alert(ALERT))
        			.build();
		}


        try {
            PushResult result = jpushClient.sendPush(payload);
            LOG.info("Got result - " + result);

        } catch (APIConnectionException e) {
            LOG.error("Connection error. Should retry later. ", e);
            LOG.error("Sendno: " + payload.getSendno());
        } catch (APIRequestException e) {
            LOG.error("Error response from JPush server. Should review and fix it. ", e);
            LOG.info("HTTP Status: " + e.getStatus());
            LOG.info("Error Code: " + e.getErrorCode());
            LOG.info("Error Message: " + e.getErrorMessage());
            LOG.info("Msg ID: " + e.getMsgId());
            LOG.error("Sendno: " + payload.getSendno());
        }
    }
}

以上为我后台代码,我不知道该如何修改为给iOS生产环境推送消息,求教。。这份代码是公司以前的前辈留给我的,现在他已经离职半年了。。。


#7

别把你的 密码和 appkey 同时发出来,如果是测试应用无所谓,线上的应用要特别注意保密,泄露后及时在官网重置。

参考 example 设置


(Jane) #8

改完之后有推送了,谢谢前辈!!!这回不怕领导回来了!!!


(Jane) #9

怎么结贴啊???


#10

勾一个解决方案就行